Closed6

goreleaserでリリースした成果物をpublic repositoryのreleasesにアップロードするgithub action

Hirotaka MiyagiHirotaka Miyagi

こんな感じの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にもアップロードしたい。

Hirotaka MiyagiHirotaka Miyagi

別のリポジトリに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

https://github.com/actions/create-releaseを使えばできそう。

Hirotaka MiyagiHirotaka Miyagi

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
Hirotaka MiyagiHirotaka Miyagi

バリデーションエラーが解決できなくてなぜだろうと思っていたけど、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
Hirotaka MiyagiHirotaka Miyagi

続いて上記で作った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名をベタ書きにしてる。必要が出てきたら考える

このスクラップは2021/12/15にクローズされました