goreleaserでリリースした成果物をpublic repositoryのreleasesにアップロードするgithub action
こんな感じのgoreleaserをするgithub actionsがある
name: goreleaser
on:
push:
tags:
- '*.*.*'
jobs:
release:
runs-on: ubuntu-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: Run GoReleaser
uses: goreleaser/goreleaser-action@v1
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
こいつでアップロードしたバイナリの成果物を、別のrepositoryのreleasesにもアップロードしたい。
別のリポジトリにreleasesを作成するgithub action
-
name: Checkout code
uses: actions/checkout@v2
-
name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
owner: "owner"
repo: "repo"
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
organization配下の別リポジトリへリリースするための認証どうしようかなと考えていたけど、とりあえずpersonal access tokenを取得してGITHUB_TOKENに差し替えることで解決。リポジトリを制限する方法があったらそれが良いんだけど…
参考:
tag_nameを ${{ github.ref }}
にしていると、取得できる内容が refs/tags/v1.2.3
とかになり困った。欲しいのは v1.2.3
現状github actionsではタグ名だけを抜き出す変数などは用意されていないらしく、ここを参考に抜き出して環境変数に入れる処理を追加して解決した。
-
name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
-
name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
with:
owner: owner
repo: repo
tag_name: ${{ env.RELEASE_VERSION }}
release_name: ${{ env.RELEASE_VERSION }}
draft: false
prerelease: false
バリデーションエラーが解決できなくてなぜだろうと思っていたけど、tagを付与するブランチが指定されていないからとのこと。 commitish
という変数に入れる必要があるらしい
-
name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
with:
owner: owner
repo: repo
tag_name: ${{ env.RELEASE_VERSION }}
release_name: ${{ env.RELEASE_VERSION }}
draft: false
prerelease: false
commitish: main
続いて上記で作ったreleasesにartifactをアップロードするactions
-
name: Upload assets
uses: actions/upload-artifact@v2
with:
name: hogehoge
path: dist/*
-
name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist/hogehoge_${{ env.RELEASE_VERSION }}_darwin_amd64.tar.gz
asset_name: hogehoge_${{ env.RELEASE_VERSION }}_darwin_amd64.tar.gz
asset_content_type: application/gzip
https://github.com/actions/upload-release-assetを使う。
upload_urlはreleasesのURLで、create-releaseが出力するのでそれを使えば良いとのこと。document通り
asset_path, asset_nameについては、インターネットのURLを指定できずactions内のファイルを指定しなければならないとのことなので、https://github.com/actions/upload-artifactを利用して保存しておく。
今回はdarwin/amd64だけでいい案件なのでasset名をベタ書きにしてる。必要が出てきたら考える