release #14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Release version tag (e.g., v0.2.0)' | |
| required: true | |
| type: string | |
| permissions: | |
| contents: write | |
| concurrency: | |
| group: release-${{ inputs.version }} | |
| cancel-in-progress: false | |
| jobs: | |
| goreleaser: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| env: | |
| VERSION: ${{ inputs.version }} | |
| steps: | |
| - name: Validate version input | |
| run: | | |
| if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$ ]]; then | |
| echo "::error::version must match ^v[0-9]+\\.[0-9]+\\.[0-9]+(-.+)?$ (got: $VERSION)" | |
| exit 1 | |
| fi | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| fetch-depth: 0 | |
| - name: Create GitHub Release (tag も同時に作成) | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| if gh release view "$VERSION" >/dev/null 2>&1; then | |
| echo "::error::release $VERSION already exists" | |
| exit 1 | |
| fi | |
| # gh release create は GitHub REST API 経由で tag + release を同時生成する。 | |
| # NOTE: --draft にすると tag ref が publish まで作られず goreleaser / git fetch が | |
| # 失敗するため、非 draft で即 publish する。goreleaser は release.mode=append で | |
| # この既存 release に asset を追記する。 | |
| gh release create "$VERSION" \ | |
| --target "$GITHUB_SHA" \ | |
| --title "$VERSION" \ | |
| --generate-notes | |
| # tag が remote に作られたのでローカルでも取得しておく (goreleaser が参照する) | |
| git fetch origin "refs/tags/$VERSION:refs/tags/$VERSION" | |
| - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Mint Homebrew tap token | |
| id: tap-token | |
| uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3 | |
| with: | |
| app-id: ${{ secrets.GHA_APP_CLIENT_ID }} | |
| private-key: ${{ secrets.GHA_APP_PRIVATE_KEY }} | |
| owner: tqer39 | |
| repositories: homebrew-tap | |
| - name: Run goreleaser | |
| uses: goreleaser/goreleaser-action@ec59f474b9834571250b370d4735c50f8e2d1e29 # v7.0.0 | |
| with: | |
| distribution: goreleaser | |
| version: '~> v2' | |
| args: release --clean | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| HOMEBREW_TAP_GITHUB_TOKEN: ${{ steps.tap-token.outputs.token }} |