Skip to content

Conversation

@faithandbrave
Copy link
Member

@faithandbrave faithandbrave commented Jul 22, 2025

グローバル修飾リスト (GLOBAL_QUALIFY_LIST.txt) への登録ルールとして、「プライマリ宣言ではないオーバーロード・特殊化へのリンクを登録してはならない」というものがありますが、それの自動チェックのために、以下を追加しました:

  • PRIMARY_OVERLOAD_SPECIALIZATION.txtファイルを追加し、プライマリ宣言を列挙した
  • チェックスクリプトglobal_qualify_check.pyを追加し、プライマリ宣言ではないオーバーロード・特殊化へのリンクがGLOBAL_QUALIFY_LIST.txtに登録されたらエラーになるようにした
  • GitHub Actionsのcheckアクションに組み込んだ

このPRがマージされたあとの作業として、以下をやろうと思います:

  • link_check.py --check-inner-linkで、GLOBAL_QUALIFY_LIST.txtとPRIMARY_OVERLOAD_SPECIALIZATION.txtのリンクチェック
  • GLOBAL_QUALIFY_LIST.txtとPRIMARY_OVERLOAD_SPECIALIZATION.txtを自動ソートするスクリプトを実装
  • check.pyを作って、外部リンクチェック以外をローカルで一度にチェックする

@faithandbrave
Copy link
Member Author

手元ではビルドが通ったので、CIでエラーがでてるのは、push -fしたからかな…

@akinomyoga
Copy link
Member

akinomyoga commented Jul 22, 2025

手元ではビルドが通ったので、CIでエラーがでてるのは、push -fしたからかな…

すみません。実は低確率で CI 上のビルドが頓死します。長らく問題自体は認識しているのですが原因不明です。。たぶん push -f は関係ないと思います…。経験上 rerun すると何事もなかったように動きます。

@github-actions
Copy link
Contributor

プレビュー (HTML) (更新時刻: 2025-07-22 22:07:43 JST)

  • Commit: f78ec17
  • プレビューの生成には時間がかかります (3~5分)。進捗状況はこちらをご確認ください。

変更記事一覧

1件の記事が変更されました。

※ソース (.md) に直接変更のあった記事を列挙しています。グローバル修飾や変換規則の変更による変化は考慮していません。

@akinomyoga
Copy link
Member

akinomyoga commented Jul 22, 2025

今 Re-run しても失敗して、再び re-run したら通りました。。。

直近で同じ事が起こったのは例えば以下の action です。

成功した場合とログを比べてみるとどうもこんな感じのエラーが最初のほうで出ているみたいです。

Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/home/runner/work/site/site/site_generator/run.py", line 593, in run
    convert_pageinfo(pageinfo, sidebar, sidebar_index, template, hrefs, global_qualify_list, global_defined_words)
  File "/home/runner/work/site/site/site_generator/run.py", line 553, in convert_pageinfo
    convert(pageinfo['path'], template, context, hrefs, global_qualify_list, global_defined_words)
  File "/home/runner/work/site/site/site_generator/run.py", line 151, in convert
    os.makedirs(dst_dir)
  File "<frozen os>", line 225, in makedirs
FileExistsError: [Errno 17] File exists: 'cpprefjp/cpprefjp.github.io/reference/mdspan/mdspan'

並列で実行している時に、存在しないディレクトリを別スレッドで同時に作成しようとして死ぬという、race condition の気がします。セマフォか何かで同期するか、並列に入る前に必要なディレクトリを先に全部作っておくか、「ファイルが既に存在しますエラー」を握りつぶすか。握りつぶすので良い気がする (ディレクトリ作成をセマフォ代わりにするテクもあるし…)。

akinomyoga added a commit to akinomyoga/cpprefjp-site_generator that referenced this pull request Jul 22, 2025
手動でディレクトリが存在しなかったら作るという判定を行っているが、並列
で実行している場合には、ディレクトリの存在チェック (os.path.exists) と
実際のディレクトリの作成 (os.makedirs) の間に、他のスレッドがディレク
トリを作成してしまいエラーが生じる可能性が残る (race condition)。始め
から os.makedirs の側で既に存在するディレクトリを無視するべき。

cpprefjp/site#1478 (comment)
@faithandbrave
Copy link
Member Author

週明けくらいにマージします〜

@faithandbrave faithandbrave merged commit a899b75 into master Jul 28, 2025
35 of 37 checks passed
@faithandbrave faithandbrave deleted the primary_check branch July 28, 2025 07:08
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.

3 participants