4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHub Actions のリリースを自動化する

Last updated at Posted at 2020-01-15

はじめに

JavaScript版の GitHub Actions のリリース作業は真面目にやるととても面倒です。

  1. ローカルで開発を行う
  2. リリース用にビルドする
  3. ビルドしたファイルや node_modules のような依存モジュールを含めて実行に必要なコードをリリース用ブランチにコミットする
  4. タグを付与する(メジャー、マイナー、パッチバージョンを考慮)
  5. GitHub に Push
  6. リリース

しかし GitHub Actions を使用することでこれらの手順もある程度自動化できます。

対象

TypeScript または JavaScript による GitHub Actions 開発者

Release GitHub Actions

Release GitHub Actions を使用することでリリース作業は以下のようになります。

  1. ローカルで開発を行う
  2. GitHub に変更を Push
  3. リリース(タグを作成)
  4. 自動化された手順が完了するのを待つ
    1. リリース用にビルドする
    2. ビルドしたファイルや node_modules のような依存モジュールを含めて実行に必要なコードをリリース用ブランチにコミットする
    3. タグを付与する(メジャー、マイナー、パッチバージョンを考慮)
    4. GitHub に Push

開発者が行うことは

  • GitHub Actions の開発
  • GitHub Releases からリリース または タグをPush

だけになります。

使用方法

以下のような workflow を設定するだけです。

.github/workflows/release.yml
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 に buildproductionprod または package が含まれている場合、ビルド用コマンドとしてそれが使用されます。(BUILD_COMMAND_TARGETでコマンドの検索対象は変更可能です)
  • npm run installyarn 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/v1test/v1.2test/v1.2.3 のタグ指定でアクションが利用できます。
テスト用タグ または リリース用ブランチで利用する Workflow を用意しておけばリリース前に気軽に試せるようになります。

uses: owner/repo@test/v1
# または
# uses: owner/repo@gh-actions

CLI Tool

technote-space/release-github-actions-cli - GitHub

その他

指定可能なオプション

実際に使用している例

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?