GitHub Actions から Releasesを作る
GitHub Actions から Releasesを作る
GitHub Actionsを使って、GitHub Releasesを作成し、そこに成果物を添付したいというのが動機です。
シンプルですが、GitHub Releasesを作成する記事はあるものの、成果物の添付までするようなものは少ない印象だったので、この記事を書いた次第です。
Actions から Releases を作るには
結論から言うと、svenstaro/upload-release-action@v2
のアクションを使うと簡単に実現が可能です。
たとえば、成果物が artifacts.zip として用意されているとして、ファイル添付ありでリリースするには、以下のようなymlファイルを記述します。
name: Sample
on:
workflow_dispatch:
jobs:
build-and-release:
runs-on: ubuntu-latest
name: build-release
steps:
- name: Checkout Repos
uses: actions/checkout@v4
- name: Build
run: |
echo "ここでビルド処理"
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/artifacts.zip
asset_name: artifacts.zip
tag: ${{ github.ref }}
overwrite: true
body: "This is my release text"
これはアクションのドキュメントにあるものをベースに記述していますが、そのまま使うには課題があります。たとえば、以下のような点で気になります。
- タグが
github.ref
なのでブランチ名などになってしまう - この
upload-release-action
では、対象となるタグが必要であること - リリースおよびタグにはバージョンなどの記載ができていないこと
タグを自動生成して Releases を作る
先の課題を解決するために、タグを自動で生成してバージョン情報とし、Releasesを作る方法があります。
日時情報からタグを付けてReleasesを作る設定例が以下の通りです。
gitの操作をするという点で、fetch-depth:0
を付けてチェックアウトしたり、tag を付けるためにユーザー情報を仮設定していたりなどしています。
タグを付けたらそれを元にsvenstaro/upload-release-action@v2
でリリースを作成する流れとなっています。
steps:
- name: Checkout Repos
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: build
run: |
echo "Build Process"
- name: Set current time
id: version
run: |
echo "text=ver$(TZ=Asia/Tokyo date +%y%m%d%H%M)" >> "$GITHUB_OUTPUT"
- name: Create tag
run: |
cd $GITHUB_WORKSPACE
git config user.name "github-actions"
git config user.email "github-actions@github.com"
git tag ${{ steps.version.outputs.text }}
git push origin ${{ steps.version.outputs.text }}
- name: upload pdf to release
uses: svenstaro/upload-release-action@v2
with:
release_name: ${{ steps.version.outputs.text }}
file: production.zip
asset_name: production-${{ steps.version.outputs.text }}.zip
tag: ${{ steps.version.outputs.text }}
body: "リリースしました🎉"
overwrite: true
その他
これでバージョンを自動生成し、Releasesを作れるようになりました。
この一連の作業を切り出して、Composite Actionとするのも良さそうです。
tagの生成をSHAを使うようにしたり、日付を使うようにしたりと、与える引数で切り替えられてもよいですね。
Actionsの記述を再利用する方法として、以下のようなパターンがあります
- Composite Action
- Reusable workflow
独立性を高くして再活用したかったので、今回はComposite Actionを選択しました。ここでReusable workflowの記述と混乱してしまったので簡単に注意点を記載します。
Composite Actionは、以下のような配置で使う必要があります。
フォルダやファイル名に固定のルールがあります。
root
+ .github
| + actions
| | + your-action
| | + action.yml (or action.yaml)
| + workflows
| + myworkflow.yml
|
+ source (プロジェクトコード類)
ポイントは以下の点です。ファイル名が固定となる点が注意です。
-
.github/actions
以下に、アクション名を示すフォルダを作成する - 各Composite Actionは、action.yml という固定のファイル名であること
参考情報
一度ある程度分かった後だと、情報を調べやすくなりました。
参考にした各サイトへのリンクを紹介します。
Discussion