mcpField
B
bitwarden-workflow-linter-rules

bitwarden-workflow-linter-rules

github.com/bitwardenクラウド・DevOps16263 回インストール今日更新
リポジトリ

bitwarden-workflow-linter-rules について

Bitwarden の GitHub Actions ワークフローを点検するルールセットです。機械的な問題には自動修正方法を定め、判断が必要な指摘ではユーザーへの確認を求めます。

主な機能

  1. 01ワークフローとジョブの命名規則
  2. 02明示的な権限の確認
  3. 03Runner ラベルの固定規則
  4. 04Action 参照の固定規則
  5. 05出力と環境変数の命名規則
  6. 06判断事項でのユーザー確認

活用シーン

  1. 01ワークフロー名と権限の統一
  2. 02Action と Runner の固定状態を確認
  3. 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.04
    • windows-latest → windows-2022
    • macos-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 が必須の準拠状態です。
  • 修正(外部アクション):

    1. GitHub API で正しいコミット SHA を解決します:gh api repos/{owner}/{repo}/commits/{ref} --jq '.sha'
    2. 適用する前に、SHA と検証リンク(https://github.com/{owner}/{repo}/commit/{sha})をユーザーに提示します。
    3. ユーザーが SHA を確認するまで待ちます。ユーザーが別の SHA を提示した場合は、そちらを使用します。
    4. uses: の値を {action}@{sha} に置き換え、元のタグをコメントとして追加します:# {original-ref}
    • 例: uses: actions/checkout@v4 → uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

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 の承認済みアクションリストにないアクションを参照しています。
  • ユーザーに提示する選択肢:
    1. 承認済みリストに追加 — アクションが正当なもので、レビューと承認が済んでいる場合は、bitwarden/workflow-linter の承認済みアクション設定に追加します。
    2. 置き換え — 同じ機能を提供する承認済みの代替アクションに差し替えます。
    3. 削除 — 必須でない場合は、そのステップを削除します。
  • この変更を自動で行わないでください。未承認のアクション名を提示し、ユーザーに希望する選択肢を尋ねてから実行します。

run_actionlint(複雑な指摘)

  • トリガー: actionlint が、単純な書式の問題ではないエラー(たとえば、式の型の不一致、無効なコンテキスト参照、シェルスクリプトのエラー)を報告しています。
  • 対応: 指摘内容をそのまま提示し、actionlint のメッセージに基づく修正案を提案して、適用する前にユーザーの確認を求めます。
  • 単純な actionlint の指摘(明確な 1 行の修正で対応できる shellcheck のスタイル警告など)は、自動で適用してもかまいません。

コメント