はじめに
JavaScript版の GitHub Actions のリリース作業は真面目にやるととても面倒です。
- ローカルで開発を行う
- リリース用にビルドする
- ビルドしたファイルや node_modules のような依存モジュールを含めて実行に必要なコードをリリース用ブランチにコミットする
- タグを付与する(メジャー、マイナー、パッチバージョンを考慮)
- GitHub に Push
- リリース
しかし GitHub Actions を使用することでこれらの手順もある程度自動化できます。
対象
TypeScript または JavaScript による GitHub Actions 開発者
Release GitHub Actions
Release GitHub Actions を使用することでリリース作業は以下のようになります。
- ローカルで開発を行う
- GitHub に変更を Push
- リリース(タグを作成)
- 自動化された手順が完了するのを待つ
- リリース用にビルドする
- ビルドしたファイルや node_modules のような依存モジュールを含めて実行に必要なコードをリリース用ブランチにコミットする
- タグを付与する(メジャー、マイナー、パッチバージョンを考慮)
- GitHub に Push
開発者が行うことは
- GitHub Actions の開発
- GitHub Releases からリリース または タグをPush
だけになります。
使用方法
以下のような workflow を設定するだけです。
on: create
name: Release
jobs:
release:
name: Release GitHub Actions
runs-on: ubuntu-latest
steps:
- name: Release GitHub Actions
uses: technote-space/release-github-actions@v2
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
詳細
ビルド
BUILD_COMMAND オプションでビルドに使用するコマンドを指定します。
デフォルトではこの値は空で、その場合は以下の手順でコマンドが生成されます。
-
package.jsonの scripts にbuild、production、prodまたはpackageが含まれている場合、ビルド用コマンドとしてそれが使用されます。(BUILD_COMMAND_TARGETでコマンドの検索対象は変更可能です) -
npm run installやyarn installのようなインストール用コマンドが存在しない場合、インストール用コマンドが追加されます。
したがって BUILD_COMMAND が設定されていない かつ package.json に build が存在する場合、以下のコマンドが実行されます。
yarn install
yarn build
yarn install --production
または
npm install
npm run build
rm -rdf node_modules
npm install --production
ファイル削除
GitHub Actions の実行時には「ビルドに使用したソースコード」や「テストコード」、「テスト設定」などは不要です。
また GitHub Actions は Workflow で使用される際に毎回ダウンロードされるため、ファイルは少ないほうがよいです。
この目的のために CLEAN_TARGETS オプションが存在し、デフォルトは「TypeScriptのActionテンプレート」や「JavaScriptのActionテンプレート」の使用を想定した値になっています。
default: .[!.]*,__tests__,src,*.js,*.ts,*.json,*.lock,_config.yml
rm -rdf .[!.]*
rm -rdf *.js
rm -rdf *.ts
rm -rdf *.json
rm -rdf *.lock
rm -rdf __tests__ src '_config.yml'
https://github.com/actions/typescript-action
https://github.com/actions/javascript-action
不要なファイルが削除された状態の例
https://github.com/technote-space/release-github-actions/tree/gh-actions
テスト用
タグ名は v1.2.3 のような Semantic Versioning に従っている必要があり、このタグ名でタグを作成すると本番リリースされます。
TEST_TAG_PREFIX を使用することでテスト用ビルドを行うことが可能です。
TEST_TAG_PREFIX: test/
を設定した場合、test/v1.2.3でもアクションが起動し、test/v1、test/v1.2、test/v1.2.3 のタグ指定でアクションが利用できます。
テスト用タグ または リリース用ブランチで利用する Workflow を用意しておけばリリース前に気軽に試せるようになります。
uses: owner/repo@test/v1
# または
# uses: owner/repo@gh-actions