ビルドとタグアクションによるGithubアクションの高速化


私が好きなgithubアクションを持っていると言っているのは奇妙ですbuild-and-tag-action .

それはなぜ重要ですか?
JavaScriptベースのGithubアクションのためにDockerランタイムを使用することについての最大の不満の一つは、彼らが遅いです.リアルタイムスロー.あなたはかなり簡単にノードベースのアクションにそれらを変換することができますが、それは別の障壁を追加-あなたのコミットメントを開始する必要がありますnode_modules アクションとしてのフォルダnpm ci 自動的にあなたのため.
両方の世界のベストを取得しようとするnode_modules フォルダー、しかし、高速実行)auto-compile-node どれが@vercel/ncc リリースがタグ付けされるたびに、アクションとすべての依存関係を含む単一のJSファイルをビルドするには.これは私が開発のためにDockerを使うことを許しました、しかし、リリースがタグ付けされるときはいつでも、速度利点を得ます.
Jasonはさらに一歩を踏み出し、ビルドプロセスを一般化してnpm run build そして、主要なバージョンの自動再調整を統合するactions-tagger ).

どうやって動くの?build-and-tag-actionrelease is published or edited . ワークフローはactions/checkout 前にそのタグのコードをクローン化するにはbuild-and-tag-action runs your setup script . を指定しない場合setup スクリプトbuild-and-tag-action 意志use a default of npm ci && npm run build --if-present . これは、プロジェクトの依存関係(開発依存関係を含む)をすべてインストールし、実行しますnpm build スクリプトを定義します.
あなたが使いたいならばbuild-and-tag-action JavaScript Githubのアクションを構築するにはbuild スクリプトはnpx @vercel/ncc build . これはあなたのアクションとすべての依存関係を1つのファイルに変換しますmain あなたのpackage.json ).
一度npm run build が終了しました.build-and-tag-action 意志create a new commit のみ含むaction.yml あなたのmain ファイルを更新し、このワークフローを引き起こしたタグを更新して新しいコミットをポイントします.これは、タグが完全にコンパイルされたJavaScriptのアクションで追加のファイル(これはアクションをクローンにかかる時間を減らすことなく)を指すことを意味します.
最後にbuild-and-tag-action 意志extract the major version from your tag - あなただけのタグv1.8.2 抽出するv1 - そして、そのshaを更新しますv1 タグをポイントします.これは、あなたの消費者が依存できることを意味しますv1 そして、まだアクションへのアップデートを取得します.build-and-tag-action あなたの期待action.yml 含むruns.using: node12 デフォルトでは.これはブランチベースの開発のためのDockerを使用しないようにします.あなたがブランチとノードのためにDockerを使用したいならば、あなたのbuild スクリプトnpx @vercel/ncc build && npx convert-action . convert-action 自動的にあなたのaction.yml ノードランタイムを使用するファイル.
例を挙げるpackage.json それはあなたの行動と更新をコンパイルしますaction.yml 一つのコマンドで
{
  "name": "your-action-name",
  "main": "dist/index.js",
  "scripts": {
    "build": "npx @vercel/ncc build && npx convert-action"
  }
}
上記のすべてはあなたが手動でリリースを作成しているか、個人のアクセストークン(PAT)でAPIを使用していると仮定します.リリースを生成するアクションを使用してワークフローを使用している場合はtag_name 呼び出し時入力build-and-tag-action :
- uses: fictional/releaser@v1 # Not a real action!
  id: releaser
- uses: JasonEtco/build-and-tag-action@v1
  with:
    tag_name: ${{ steps.releaser.outputs.tag_name }}
これは、GITHUB_TOKEN 秘密は、ワークフローの実行をトリガしないので、使用する必要がありますbuild-and-tag-action 追加ステップとパスとしてtag_name 入力として.この例ではreleaser step returns a tag_name 我々が使うことができる出力.

tag_name is automatically populated for the release event, so we do not need to pass any inputs to the workflow. If the tag_name input is provided, it will override the auto-detection


あなたの行動を繰り返すことができますし、あなたのmain ブランチと利点の速度の増加から任意のタグのリリースを使用してノードのランタイムを使用してbuild-and-tag-action 走る@vercel/ncc and convert-action .
加えてbuild-and-tag-action 主要なバージョン分岐を保持します.v1 , v2 最新のあなたの行動の最新のマイナーとパッチのバージョンでは、最新の状態に保つためにあなたの消費者のための努力を減らす.私はそれを使用all of my actions そして、あなたもすることをお勧め!

便利なリンク
  • GitHub Marketplace
  • GitHub Repo
  • Example Usage