Skip to content

Commit 3c2f67c

Browse files
committed
PRでビルドを通すCIを置き、Dependabotのpatch/minorを自動でマージする
依存更新のPRを検証する手段が無かった。docker-publish はイメージを作るだけで、 失敗してもPRの側には出ないので、更新が壊れているかどうかはマージしてみるまで 分からない。ci.yml を置いて npm ci と next build を回す(テストは無いが、 型エラーと依存の不整合はここで落ちる)。 そのうえで、Dependabot の patch / minor は自動でマージする。ゲートは needs: build だけ —— ブランチ保護は掛けていない運用なので、「CIが通ってからマージする」を ジョブの依存関係で表す。major は自動で入れない(壊れ方が読めないので人が見る)。 マージ後にイメージのビルドを明示的に起こす。GITHUB_TOKEN で作った push は workflow を起こさない仕様のため。workflow_dispatch は GITHUB_TOKEN でも発火する例外。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 7828c7a commit 3c2f67c

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# PR と main への push でビルドを通す。
2+
# docker-publish はイメージを作るだけで、失敗しても PR の側には出ないため、
3+
# 依存更新(Dependabot)や手直しの PR はここが通ってからマージする。
4+
#
5+
# テストは無いので、通すのは next build まで —— 型エラーと依存の不整合はここで落ちる。
6+
# 公開リポジトリなので標準ランナーの実行時間は無料枠の外。
7+
name: ci
8+
9+
on:
10+
pull_request:
11+
push:
12+
branches: [main]
13+
workflow_dispatch:
14+
15+
# 同じ ref への連続 push では古い実行を打ち切る
16+
concurrency:
17+
group: ci-${{ github.ref }}
18+
cancel-in-progress: true
19+
20+
permissions:
21+
contents: read
22+
23+
jobs:
24+
build:
25+
runs-on: ubuntu-latest
26+
steps:
27+
- uses: actions/checkout@v7
28+
29+
- uses: actions/setup-node@v6
30+
with:
31+
# Dockerfile のベース(node:24-alpine)と合わせる
32+
node-version: "24"
33+
cache: npm
34+
35+
- run: npm ci
36+
37+
# DB もクラウドの鍵も要らない(next build は静的解析とバンドルまで)
38+
- run: npm run build
39+
40+
# Dependabot の PR のうち、破壊的でない更新(patch / minor)を自動でマージする。
41+
#
42+
# needs が唯一のゲート —— ブランチ保護は掛けていない運用なので、
43+
# 「CI が通ってからマージする」をジョブの依存関係で表している。
44+
# major は自動で入れない(壊れ方が読めないので人が見る)。
45+
auto-merge:
46+
needs: build
47+
if: github.event_name == 'pull_request' && github.actor == 'dependabot[bot]'
48+
runs-on: ubuntu-latest
49+
permissions:
50+
contents: write
51+
pull-requests: write
52+
# マージ後にイメージのビルドを起こすために要る(下の理由を参照)
53+
actions: write
54+
steps:
55+
- name: 更新の種類を読む
56+
id: meta
57+
uses: dependabot/fetch-metadata@v2
58+
59+
- name: patch / minor ならマージする
60+
if: steps.meta.outputs.update-type != 'version-update:semver-major'
61+
run: gh pr merge --squash --delete-branch "$PR_URL"
62+
env:
63+
PR_URL: ${{ github.event.pull_request.html_url }}
64+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65+
66+
# GITHUB_TOKEN で作った push は workflow を起こさないので、このままだと
67+
# 依存が main に入ってもイメージが作り直されない。workflow_dispatch は
68+
# GITHUB_TOKEN でも発火する例外なので、明示的に起こす
69+
- name: イメージのビルドを起こす
70+
if: steps.meta.outputs.update-type != 'version-update:semver-major'
71+
run: gh workflow run docker-publish.yml --ref main
72+
env:
73+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)