Skip to content

ci: devcontainer の clang-format を 14 に固定 (PR #78 の CI 失敗修正)#81

Merged
thawk105 merged 1 commit into
masterfrom
fix-clang-format-ci-version
May 14, 2026
Merged

ci: devcontainer の clang-format を 14 に固定 (PR #78 の CI 失敗修正)#81
thawk105 merged 1 commit into
masterfrom
fix-clang-format-ci-version

Conversation

@thawk105
Copy link
Copy Markdown
Owner

背景

PR #78 (issue #63 — CI に clang-format dry-run チェックを追加) が追加する
.github/workflows/format.ymlformat-check ジョブが、整形済みの
ツリーに対して失敗
していた。

根本原因 (CI 失敗ログから判明した事実)

clang-format のメジャーバージョン不一致

#78 の失敗 run のログ冒頭にも Ubuntu clang-format version 18.1.3 と出力され、
その直後から cc/cicada/... 等で code should be clang-formatted の violation が
多数並んでいた。14 で整形したツリーに 18 の --dry-run --Werror を当てれば
整形ルールの差で必ず diff が出るため、ジョブは緑になりようがない状態だった。

修正内容

.devcontainer/Dockerfiledev ステージのインストールを
clang-formatclang-format-14 の明示指定に変更し、
update-alternatives で plain な clang-format 名を clang-format-14
張り直す(format.yml も人間もバージョンサフィックス無しで呼べるように)。

これで「reformat に使った版」と「CI が使う版」のメジャーが 14 で一致する。
clang-format-14 は Ubuntu 24.04 noble の universe に
1:14.0.6-19build4 として存在する。

#75 / #76 / #78 のスタックとの関係

スタック構成は master ← #75 ← #76 ← #78。本 PR は master から独立
切ったブランチ。.devcontainer/Dockerfile#75/#76/#78 のどのブランチでも
変更されていないため、master へ独立にマージできる。

本 PR がマージされた後の道筋:

  1. 本 PR が master に入る → CI image (:latest) が再ビルドされ
    clang-format 14 入りになる。
  2. .clang-format: リポジトリ実態に合わせてリファイン #75style: ソース全体を .clang-format に合わせて一括 reformat #76ci: clang-format dry-run チェックジョブを追加 (#63) #78 がそれぞれ最新 master を取り込む(または ci: clang-format dry-run チェックジョブを追加 (#63) #78
    最終的に master にマージされる)と、format.yml は clang-format 14 の
    image 上で走る。
  3. style: ソース全体を .clang-format に合わせて一括 reformat #76 の reformat も 14 で行われているため、--dry-run --Werror は diff
    ゼロで緑になる。

検証 (ローカルで担保できた範囲)

docker がこの環境に無いため image ビルド自体は回せていないが、以下を確認:

CI 本体は GitHub 上でしか回せないため、image 再ビルド後の最終確認は
マージ後の Actions に委ねる。

PR #78 で追加した format.yml の clang-format dry-run ジョブが、
already-formatted なツリーに対して落ちていた。原因は clang-format の
メジャーバージョン不一致:

- PR #75/#76 はローカルの clang-format 14 で .clang-format のリファイン
  と全ソースの一括 reformat を実施
- 一方 devcontainer image (:latest) は `apt-get install clang-format` で
  バージョン無指定のため Ubuntu 24.04 のデフォルト = clang-format 18 が
  入る。format.yml はその image 上で走る

18 と 14 では整形結果が異なるため、14 で整形済みのツリーに 18 の
--dry-run --Werror を当てると必ず diff が出て落ちる (CI ログでも
"clang-format version 18.1.3" を確認)。

dev ステージのインストールを `clang-format-14` 明示指定に変更し、
update-alternatives で plain な `clang-format` 名を張り直す。これで
reformat に使われた版と CI が使う版のメジャーが一致する。
@thawk105 thawk105 merged commit d79014b into master May 14, 2026
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