werckerからgithubへ配置するときにバージョンにタグがあるときだけ、replace

概要

werckerでビルドしたあとの成果物について バージョンを固定したら、上書きはしてほしくないが、 バージョンにタグがあるときだけ、成果物の置き換えを行いたい。 具体的には、以下のような感じ

version 置き換え
0.1.4-dev する
0.1.4 しない

gobumpでバージョンを取得し、タグが付いてるか調べる

タグがついているときだけ、replaceしたいので、 正規表現で調べることにした。 こんなかんじ、gobumpなどはあらかじめインストールしてあるとする。

- script:
    name: get version from gobump
    code: |
      export REPLACEFLAG=true
      export RELEASE_TAG=$(gobump show | jq -r .version)
      if [[ "$RELEASE_TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        export REPLACEFLAG=false
      fi

最終的にはこんなかんじなった

バージョンにタグがついてるときだけ replaceを有効にした。

box: tcnksm/gox
dev:
  steps:
    - internal/watch:
        code: |
          go build ./...
          ./source
        reload: true
build:
  steps:
    - setup-go-workspace
    - script:
        name: show environments
        code: |
          git version
          go version
    - script:
        name: go get
        code: |
          go get -t ./...
    - script:
        name: go test
        code: |
          go test -v ./...
deploy:
  steps:
    - setup-go-workspace
    - script:
        name: install tools
        code: |
          apt-get update
          apt-get install -y zip
          curl -L http://stedolan.github.io/jq/download/linux64/jq -o /usr/local/bin/jq
          chmod +x /usr/local/bin/jq
          go get github.com/motemen/gobump/cmd/gobump
    - script:
        name: get version from gobump
        code: |
          export REPLACEFLAG=true
          export RELEASE_TAG=$(gobump show | jq -r .version)
          if [[ "$RELEASE_TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
            export REPLACEFLAG=false
          fi
    - motemen/gobump-github-pull-request:
        github_token: $GITHUB_TOKEN
        label_pattern_major: ^(major|breaking)$
        label_pattern_minor: ^(minor|feature)$
    - script:
        name: go get
        code: |
          go get ./...
    - wercker/gox:
        os: darwin linux windows
        arch: 386 amd64
        output: '__/'
        dest: $WERCKER_OUTPUT_DIR/pkg
    - script:
        name: include assets into artifacts
        code: |
          for dir in $WERCKER_OUTPUT_DIR/pkg/*; do
            if [ -d "$dir" ]; then
              cp helloworld.txt "$dir/README.txt"
            fi
          done
    - tcnksm/zip:
        input: $WERCKER_OUTPUT_DIR/pkg
        output: $WERCKER_OUTPUT_DIR/dist
    - script:
        name: set release tag
        code: |
          if [ -n "$GOBUMP_NEW_VERSION" ]; then
            export RELEASE_TAG="v$GOBUMP_NEW_VERSION"
          fi
    - tcnksm/ghr:
        token: $GITHUB_TOKEN
        input: $WERCKER_OUTPUT_DIR/dist
        replace: $REPLACEFLAG
        version: $RELEASE_TAG

参考

今回作ったもの

参考書

Written on September 7, 2016