Skip to content

ci: GitHub Actions 更新 + deploy 戦略 + postcss 脆弱性対応#39

Merged
pi-kari merged 5 commits into
mainfrom
ci/bump-github-actions
May 29, 2026
Merged

ci: GitHub Actions 更新 + deploy 戦略 + postcss 脆弱性対応#39
pi-kari merged 5 commits into
mainfrom
ci/bump-github-actions

Conversation

@pi-kari

@pi-kari pi-kari commented May 29, 2026

Copy link
Copy Markdown
Contributor

概要

3つの変更をまとめて対応します。
(※ 当初含めていた security-auto-fix.yml はレビュー指摘を受け #40 に分離しました)


1. GitHub Actions major 更新(Dependabot #31#35

アクション 変更 備考
pnpm/action-setup v4 → v6 version 入力削除(packageManager フィールドで一本化)
actions/setup-node v4 → v6 cache: pnpm は明示指定のため影響なし
actions/upload-pages-artifact v3 → v5 include-hidden-files: true 追加(v4+ の dotfile 除外対応、.nojekyll 維持)
actions/deploy-pages v4 → v5 Node24 ランタイム化のみ
dependabot/fetch-metadata v2.5.0 → v3.1.0 SHA 固定を更新。破壊的変更は Node24 ランタイム化のみで update-type 出力は維持(auto-merge への影響なし)

Closes #31, #32, #33, #34, #35


2. deploy 戦略の見直し(オートマージ分が未デプロイ問題)

問題: GITHUB_TOKEN によるオートマージの push は GitHub の仕様で他ワークフローをトリガーしない。そのため Dependabot オートマージ分が GitHub Pages に未反映だった。

対応: deploy.yml に週次 schedule(月曜 00:00 UTC = 09:00 JST)を追加。dependabot.yml を月曜 06:00 JST 実行に固定し、オートマージ完了の約3時間後に週次デプロイが連動する。


3. postcss 脆弱性対応

問題: next@16.2.6 の transitive 依存 postcss@8.4.31< 8.5.10 で該当)が脆弱。Dependabot は「直接依存は安全・間接が脆弱」のケースを pnpm で解決できず unknown_error でクラッシュし続けていた。

対応:

  • pnpm-workspace.yamloverrides: postcss@<8.5.10: ^8.5.10 を追加 → postcss@8.4.31 を lockfile から排除(8.5.15 に解決)
  • レビューで指摘された no-op の minimumReleaseAgeExcludeminimumReleaseAge 未設定のため無効)を削除

transitive 脆弱性を週次自動修正する security-auto-fix.yml は、本 PR から分離し #40 で対応します。


検証

  • CI(build)が PR 上でグリーン
  • grep "postcss@8.4.31" pnpm-lock.yaml がヒットしないこと(ローカル確認済み)
  • pnpm build 成功(ローカル確認済み)
  • main マージ(=push)時に Deploy が走り、滞留中の Bump the npm-minor-patch group with 2 updates #36 分も含め反映されること
  • workflow_dispatchdeploy.yml の手動実行パスを確認

🤖 Generated with Claude Code

pi-kari and others added 2 commits May 29, 2026 22:28
- pnpm/action-setup v4 → v6(version 入力削除、packageManager フィールドに一本化)
- actions/setup-node v4 → v6
- actions/upload-pages-artifact v3 → v5(include-hidden-files: true 追加、.nojekyll 維持)
- actions/deploy-pages v4 → v5
- dependabot/fetch-metadata v2.5.0 → v3.1.0(SHA 固定更新)

Closes #31 #32 #33 #34 #35

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
GITHUB_TOKEN によるオートマージの push は deploy をトリガーしない仕様のため、
オートマージされた依存更新が GitHub Pages へ反映されていなかった。

- deploy.yml: push に加え週次 cron(月曜 00:00 UTC = 09:00 JST)と workflow_dispatch で実行
- dependabot.yml: 週次実行を月曜 06:00 JST に固定し、約3時間後の週次デプロイと連動

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@pi-kari pi-kari changed the title ci: GitHub Actions major バージョン更新(#31〜#35) ci: GitHub Actions 更新 + deploy 戦略の見直し May 29, 2026
## 即時修正
- pnpm-workspace.yaml に `pnpm audit --fix=override` で生成した overrides を追加
  - postcss@<8.5.10 を >=8.5.10 に強制 (next@16.2.6 の transitive @8.4.31 を排除)
- pnpm-lock.yaml を更新 (postcss@8.4.31 のエントリが消滅)

## 自動化
- security-auto-fix.yml を追加 (週次月曜 10:00 JST / workflow_dispatch)
  - pnpm audit --fix=override → pnpm install → pnpm build 検証 → PR 作成まで自動
  - Dependabot が直せない transitive 脆弱性への恒久対策

Closes #1 (Dependabot security alert: postcss medium)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@pi-kari pi-kari changed the title ci: GitHub Actions 更新 + deploy 戦略の見直し ci: GitHub Actions 更新 + deploy 戦略 + postcss 脆弱性対応 May 29, 2026
- heredoc によるYAMLパースエラーを解消(--body を単一行文字列に変更)
- gh pr view → gh pr list --state open の件数判定に変更
  (マージ済み PR にマッチして PR 作成がスキップされるバグを修正)
- git checkout -b → -B(冪等性の改善)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread .github/workflows/security-auto-fix.yml Outdated
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git checkout -B "$BRANCH"
git add pnpm-workspace.yaml pnpm-lock.yaml

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 pnpm audit --fix=override が書き込む package.json がコミットされず、lockfile 不整合になります。

pnpm 11.2.2 の pnpm audit --help より:「override adds overrides to the package.json file」。--fix=override は overrides を package.jsonpnpm.overrides)に書き込みます。しかしこの行は pnpm-workspace.yamlpnpm-lock.yaml しかステージしないため、package.json への overrides 追加がコミットから抜け落ちます。

結果、Sync lockfile で override を反映した pnpm-lock.yaml だけがコミットされ、コミット後の package.json には対応する overrides が無い状態になります。生成 PR や後続の pnpm install --frozen-lockfile(CI・deploy・次回の本ワークフロー)は lockfile とマニフェストの不整合(ERR_PNPM_LOCKFILE_CONFIG_MISMATCH)で失敗するか、セキュリティ修正が黙って失われます。

補足: 既存の手動 overrides は pnpm-workspace.yaml 側にあり、自動修正は package.json 側へ書くため、修正が成功しても overrides が 2 箇所に分裂します。package.json をステージ対象に含めてください。

Suggested change
git add pnpm-workspace.yaml pnpm-lock.yaml
git add package.json pnpm-workspace.yaml pnpm-lock.yaml

Comment thread .github/workflows/security-auto-fix.yml Outdated
- name: Detect changes
id: diff
run: |
if git diff --quiet; then

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ 中身の無い "security fix" PR が毎週量産されうる変更検知です。

git diff --quiet は追跡対象ファイルのあらゆる差分で changed=true になります。pnpm audit が何も修正しなくても、Sync lockfilepnpm install --no-frozen-lockfilepnpm-lock.yaml を再正規化(pnpm バージョン差・設定差・整形差)するだけで changed=true となり、毎週 security/audit-fix に force-push して空の PR を作成します。GITHUB_TOKEN 作成の PR は自動マージされないため、人間が毎回クローズする運用負荷になります。

実際に脆弱性修正があったか(例: pnpm audit --json の結果)で作成可否を判定するか、package.json/overrides の意味的差分のみをトリガにすることを検討してください。

Comment thread pnpm-workspace.yaml Outdated
@@ -1,2 +1,6 @@
allowBuilds:
sharp: true
minimumReleaseAgeExclude:

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ minimumReleaseAgeExcludeminimumReleaseAge 未設定では無効(dead config)です。

minimumReleaseAgeExcludeminimumReleaseAge(新規リリースを一定期間待つ設定)が有効な場合の除外リストです。本リポジトリには minimumReleaseAge がどこにも設定されていない(.npmrc も無し)ため、この 2 行は no-op です。

加えて除外対象が postcss@8.5.10 固定ですが、override postcss@<8.5.10: ^8.5.10 は実際には postcss を 8.5.15 に解決するため、仮に minimumReleaseAge を設定してもこの除外はインストール対象バージョンと一致しません。minimumReleaseAge を併せて設定するか、この minimumReleaseAgeExclude ブロックを削除してください。

Comment thread .github/workflows/security-auto-fix.yml Outdated
git checkout -B "$BRANCH"
git add pnpm-workspace.yaml pnpm-lock.yaml
git commit -m "fix(security): apply pnpm audit --fix=override"
git push -f origin "$BRANCH"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ concurrency 未設定 + git push -f の競合・上書きリスク。

このワークフローには concurrency グループがありません。workflow_dispatch の手動実行が schedule 実行と重なる(または再実行する)と、両方が security/audit-fixgit push -f して競合します。また push -f は、開いている PR ブランチにメンテナが追加したコミットを次回実行時に黙って破棄します。

トップレベルに concurrency: { group: security-auto-fix, cancel-in-progress: false } の追加を検討してください。

- security-auto-fix.yml を削除(修正版は別ブランチ/PR で扱う)
- pnpm-workspace.yaml: minimumReleaseAge 未設定で no-op の
  minimumReleaseAgeExclude を削除(postcss overrides は維持)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@pi-kari pi-kari merged commit 81170ef into main May 29, 2026
2 checks passed
@pi-kari pi-kari deleted the ci/bump-github-actions branch May 29, 2026 15:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant