バージョンはツール自体のバージョンではなくて、github上で発番するバージョンです。
Github Actionsってなに?
pushなどをフックしていろんなworkflowを組める、Github謹製のCI/CD的なものです。
詳しくは公式の説明をどうぞ
https://github.co.jp/features/actions
workflow
実際のworkflowのファイルです。
今回はGoのバイナリファイルを作成するという体で書いています。
流れは同じなので他の言語でも同じように組めばできるはずです。
※ Mac用しか書いてないですが、matrix追加したら複数OSの対応も可能です。
自動バージョニング版
注意:
- checkout@v2からfetchしないとタグとか取れないようなので、直後にfetchしています
- goreleaser-actionはバージョン指定さえすれば、勝手にリリースとか切ってくれそうですが、自動採番でよしなにやろうとしたときに細かい調整ができるように前回のタグを取得して、インクリメントする形をとっています。
- github-action-get-previous-tagは、最新タグを取得して、タグをそのまま渡すだけでなく、splitして一部分だけ取得できたりもするので、細かい制御に使えます
- increment-semantic-versionは、version-fragmentでバージョンのどこをインクリメントするか指定できるので便利です
- ただ、両方ともセマンティックバージョンのプレフィックスに対応してなさそうなので、そこは注意です。
- 普通のパッケージとかだったgoreleaser-actionだけのほうがいいかもしれないです
- 今回はCLIなので、他から参照されることを考慮してないため、こちらを採用しています
merge-master.yml
on:
push:
branches:
- master
name: create release information
jobs:
versioning:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Unshallow
run: git fetch --prune --unshallow
- name: Get Previous tag
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@master"
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- name: Bump release version
id: bump_version
uses: christian-draeger/increment-semantic-version@1.0.1
with:
current-version: ${{ steps.previoustag.outputs.tag }}
version-fragment: 'feature'
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.bump_version.outputs.next-version }}
release_name: ${{ steps.bump_version.outputs.next-version }}
draft: false
prerelease: false
releases:
name: Release Go Binary
needs: versioning
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- macOS-latest
version:
- latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Unshallow
run: git fetch --prune --unshallow
- name: Set up Go
uses: actions/setup-go@v1
with:
go-version: 1.14.x
- name: GoReleaser
uses: goreleaser/goreleaser-action@v1
with:
version: ${{ matrix.version }}
args: release --rm-dist
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
手動でリリース作った場合
別のバージョンで切り直したいとか、そういうケース用に手動でリリース作ったときのも用意しておきます。
release.yml
on:
release:
types: [published]
name: Build
jobs:
releases:
name: Release Go Binary
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- macOS-latest
version:
- latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Unshallow
run: git fetch --prune --unshallow
- name: Set up Go
uses: actions/setup-go@v1
with:
go-version: 1.14.x
- name: GoReleaser
uses: goreleaser/goreleaser-action@v1
with:
version: ${{ matrix.version }}
args: release --rm-dist
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"