コンテンツにスキップ

CI/CD とガバナンス

このリポジトリでは、4つの GitHub Actions ワークフローと集中型テンプレートシステムをガバナンスに使用しています。

ワークフローファイルトリガー目的
GitHub Pages デプロイgithub-pages-deploy.ymlmain への Push(docs/**)、手動ディスパッチドキュメントサイトをビルドし GitHub Pages にデプロイする
Docker イメージのビルドと公開build-image.ymlmain への Push(docker/**package*.json)、日次 cron、repository_dispatchDocker イメージをビルドし、GHCR にプッシュし、下流リポジトリへリビルドをディスパッチする
リンクされた Issue の必須化require-linked-issue.ymlプルリクエストイベントGitHub Issue を参照していない PR をブロックする
リポジトリ設定の適用enforce-repo-settings.yml6時間ごと、設定ファイルへの Push、手動ディスパッチテンプレートから標準化されたリポジトリ設定を適用する
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

テンプレートリポジトリ内の再利用可能なワークフローに委譲します:

jobs:
docs:
uses: f5-sales-demo/docs-control/.github/workflows/github-pages-deploy.yml@main

パーミッション: contents: readpackages: readpages: writeid-token: write。古いデプロイを避けるため、cancel-in-progress: true を設定した pages 同時実行グループを使用します。

docs/ 配下のファイルが変更された場合のみ Push でトリガーされます。workflow_dispatch による手動トリガーも可能で、これは build-image.yml のディスパッチジョブが下流のリビルドをトリガーする方法でもあります。

on:
push:
branches: [main]
paths:
- 'docker/**'
- 'package.json'
- 'package-lock.json'
schedule:
- cron: '0 6 * * *'
repository_dispatch:
types: [rebuild-image]

ステップ:

  1. コードのチェックアウト
  2. docker/login-action を使用して ghcr.io にログイン
  3. docker/build-push-action でコンテキスト . とファイル docker/Dockerfile を使用してビルドおよびプッシュ
  4. タグ: ghcr.io/<owner>/<repo>:latestghcr.io/<owner>/<repo>:<sha>

ビルドが成功した後、dispatch ジョブはテンプレートリポジトリの downstream-repos.json 設定にリストされたすべての下流リポジトリに対して workflow_dispatch 経由で github-pages-deploy.yml をトリガーします。これにより、すべてのコンテンツリポジトリが更新されたビルダーイメージでドキュメントをリビルドすることが保証されます。

日次 cron により、コード変更がなくてもイメージが最新の状態に保たれます(依存関係の更新を取り込みます)。repository_dispatch イベントにより、外部システムからリビルドをトリガーできます。

docker/ ファイルまたは package*.json が変更された場合のみ Push でトリガーされます。ドキュメントのみの変更ではイメージのリビルドはトリガーされません。

on:
pull_request_target:
types: [opened, edited, reopened, synchronize]

nearform-actions/github-action-check-linked-issues@v1 を使用して、すべての PR が GitHub Issue を参照していること(例: 説明に Closes #42 と記載)を強制します。Dependabot の PR は以下の設定で除外されます:

exclude-branches: "dependabot/**"

チェックに失敗した場合、コントリビューターに期待されるフォーマットを示すカスタムメッセージが表示されます。コントリビューターワークフローの詳細については CONTRIBUTING.md を参照してください。

on:
schedule:
- cron: '0 */6 * * *'
push:
branches: [main]
paths:
- '.github/config/repo-settings.json'
workflow_dispatch:

テンプレートリポジトリ内の再利用可能なワークフローに委譲します:

jobs:
enforce:
uses: f5-sales-demo/docs-control/.github/workflows/enforce-repo-settings.yml@main
secrets:
repo-admin-token: ${{ secrets.REPO_ADMIN_TOKEN }}

6時間ごと、および設定ファイルへの変更時に実行されます。.github/config/repo-settings.json からブランチ保護ルール、マージ設定、その他のリポジトリ設定を適用します。

f5-sales-demo/docs-control リポジトリは以下の唯一の信頼できるソースです:

  • 再利用可能なワークフロー定義(ドキュメントデプロイ、リポジトリ設定の適用)
  • 組織内のすべてのリポジトリに同期されるマネージドファイル
  • 標準設定およびブランチ保護ルール

このビルダーおよびすべてのコンテンツリポジトリは、テンプレートから CI/CD の動作を継承します。

テンプレートリポジトリは、マネージドファイル(ワークフロー定義や設定ファイルなど)を下流リポジトリにプッシュできます。これにより、手動更新なしですべてのリポジトリの整合性が保たれます。同期はテンプレートリポジトリ内の別ワークフローで実行されます。

リポジトリ設定適用ワークフローは、テンプレートからブランチ保護ルールを適用します。これには以下が含まれます:

  • マージ前の必須ステータスチェック
  • リンクされた Issue チェックの必須化
  • スカッシュマージの優先
  • マージ後のヘッドブランチの自動削除
シークレットソース目的
GITHUB_TOKEN自動(GitHub)ほとんどのワークフローでチェックアウト、パッケージ公開、API 呼び出しに使用
REPO_ADMIN_TOKEN手動(リポジトリシークレット)リポジトリ設定適用およびディスパッチジョブで、ブランチ保護やリポジトリ設定の変更、下流ワークフローのトリガーに必要(admin スコープが必要)