bitwarden-workflow-linter-rules について
Bitwarden の GitHub Actions ワークフローを点検するルールセットです。機械的な問題には自動修正方法を定め、判断が必要な指摘ではユーザーへの確認を求めます。
主な機能
- 01ワークフローとジョブの命名規則
- 02明示的な権限の確認
- 03Runner ラベルの固定規則
- 04Action 参照の固定規則
- 05出力と環境変数の命名規則
- 06判断事項でのユーザー確認
活用シーン
- 01ワークフロー名と権限の統一
- 02Action と Runner の固定状態を確認
- 03出力名と環境変数名を点検
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bitwarden/ ai-plugins --skill bitwarden-workflow-linter-rulesインストール後、Claude Code で/bitwarden-workflow-linter-rulesを入力して読み込まれたか確認します。
詳細
機械的なルール — 自動的に適用
name_capitalized
- トリガー: ワークフローレベルまたはジョブレベルの
name:の値が大文字で始まっていません。 - 修正: 名前の値の最初の文字を大文字にします。それ以外は変更しません。
permissions_exist
- トリガー: ワークフローまたはジョブに明示的な
permissions:キーがありません。 - 修正: すべてのジョブにキーがない場合はワークフローレベルに、ないジョブが一部のみの場合は個々のジョブレベルに
permissions: {}を追加します。ジョブレベルの権限を優先します。
pinned_job_runner
- トリガー: ジョブの
runs-on:で、ピン留めされていないラベルが使われています。 - 修正: 現在のピン留めされた同等のラベルに置き換えます。
ubuntu-latest→ubuntu-24.04windows-latest→windows-2022macos-latest→macos-14
step_pinned
Bitwarden では、アクションの所有者に応じて、異なる 2 つのピン留め要件を適用します。uses: フィールドのないステップとローカルアクション(./ で始まるもの)は、完全に対象外です。
-
トリガー(内部アクション):
uses:の参照がbitwarden/で始まり、@mainにピン留めされていません。ただし、bitwarden/sm-action[/path]@<any-ref>形式の参照は、どの ref でも準拠しているため、このルールの対象になりません。 -
トリガー(外部アクション):
uses:の参照がbitwarden/で始まらず、40 文字の完全なコミット SHA にピン留めされていないか、インラインのバージョンコメントがありません。 -
修正(内部アクション):
- ref を
@mainに変更します(例:bitwarden/gh-actions/azure-login@v1→bitwarden/gh-actions/azure-login@main)。 - SHA は解決しません。
@mainが必須の準拠状態です。
- ref を
-
修正(外部アクション):
- GitHub API で正しいコミット SHA を解決します:
gh api repos/{owner}/{repo}/commits/{ref} --jq '.sha' - 適用する前に、SHA と検証リンク(
https://github.com/{owner}/{repo}/commit/{sha})をユーザーに提示します。 - ユーザーが SHA を確認するまで待ちます。ユーザーが別の SHA を提示した場合は、そちらを使用します。
uses:の値を{action}@{sha}に置き換え、元のタグをコメントとして追加します:# {original-ref}
- 例:
uses: actions/checkout@v4→uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- GitHub API で正しいコミット SHA を解決します:
underscore_outputs
- トリガー:
$GITHUB_OUTPUTへの書き込み、またはoutputs:ブロック内の複数単語からなる出力名で、ハイフンまたはキャメルケースが使われています。 - 修正: 出力キーをアンダースコアを使う形式に変更します。同じファイル内にある、その出力への参照もすべて更新します。
job_environment_prefix
- トリガー: ジョブレベルの環境変数名が
SCREAMING_SNAKE_CASEに従っていません。 - 修正:
SCREAMING_SNAKE_CASEに変更し、ジョブ内の使用箇所をすべて更新します。
check_pr_target
- トリガー:
pull_request_targetを使うワークフローで、ジョブがデフォルトブランチに制限されていません。 - 修正: 該当するジョブに条件を追加します:
if: github.ref == 'refs/heads/<default-branch>'。mainと決めつけず、リポジトリのデフォルトブランチを特定します。ジョブにすでにif:条件がある場合は、&&を使って結合します(例:if: <existing-condition> && github.ref == 'refs/heads/<default-branch>')。
判定ルール — 一時停止してユーザーに確認する
name_exists
- トリガー: ワークフローまたはジョブに
name:キーがまったくありません。 - 修正: 使用する名前をユーザーに尋ねてから、適切なレベルに大文字で始まる値を指定した
name:キーを追加します。
step_approved
- トリガー: ステップの
uses:が、Bitwarden の承認済みアクションリストにないアクションを参照しています。 - ユーザーに提示する選択肢:
- 承認済みリストに追加 — アクションが正当なもので、レビューと承認が済んでいる場合は、
bitwarden/workflow-linterの承認済みアクション設定に追加します。 - 置き換え — 同じ機能を提供する承認済みの代替アクションに差し替えます。
- 削除 — 必須でない場合は、そのステップを削除します。
- 承認済みリストに追加 — アクションが正当なもので、レビューと承認が済んでいる場合は、
- この変更を自動で行わないでください。未承認のアクション名を提示し、ユーザーに希望する選択肢を尋ねてから実行します。
run_actionlint(複雑な指摘)
- トリガー:
actionlintが、単純な書式の問題ではないエラー(たとえば、式の型の不一致、無効なコンテキスト参照、シェルスクリプトのエラー)を報告しています。 - 対応: 指摘内容をそのまま提示し、actionlint のメッセージに基づく修正案を提案して、適用する前にユーザーの確認を求めます。
- 単純な actionlint の指摘(明確な 1 行の修正で対応できる
shellcheckのスタイル警告など)は、自動で適用してもかまいません。
コメント
Markdown 対応