Skip to content

0_RunAll.ps1 に -IgnoreErrors を渡せず、既知のエラーで必ず NG になる #555

Description

@OsscJpDevInfra

概要

0_RunAll.ps1 の結果を、そのまま合否として読めない。

1_BuildAll.ps1 には -IgnoreErrors があり、既知のエラー(ClickOnce の署名)を
合否判定から外せる。0_RunAll.ps1 にはそれを渡す口が無い。

このため 0_RunAll.ps1 を回すと、環境に由来する既知のエラーで必ず 1 本が NG になる。

現状

.\0_RunAll.ps1 -Lang Both
================ 全体のまとめ ================

スクリプト        終了コード
----------------- ----------
1_BuildAll.ps1    1          ← 既知の MSB3482 だけで NG
2_RunAllTests.ps1 0
3_SmokeTest.ps1   0

1 本が 0 以外で終了しました。上のログを確認してください。

エラーの中身はこれ 1 件だけである。

[WSClnt_sample (net48)] error MSB3482: 署名中にエラーが発生しました:
  WSClientWinCone_sample.exe の署名に失敗しました。
  SignTool Error: No certificates were found that met all the given criteria.

WSClientWinCone_sample.csproj は ClickOnce のマニフェスト署名が有効で、
証明書の拇印を直接指定している。 その証明書が無い環境では必ず失敗する
BUILDING.md 4 節に記載済み)。

1_BuildAll.ps1 を直接呼ぶ場合は、これを除外して回せる。

.\1_BuildAll.ps1 -IgnoreErrors 'error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj'

0_RunAll.ps1 にはこの口が無いため、同じことができない。

何が困るか

  • 「NG が 1 本ある」が常態になり、本物の失敗と見分けが付かない。
    結局ログを開いて中身を読むことになる
  • 現状の 0_RunAll.ps1 は、この状況をコメントで説明しているだけである
# 1_BuildAll.ps1 は既知の署名エラー(MSB3482)で 1 になることがある。
# 終了コードだけで判断せず、エラー一覧の内容を確認すること(RELEASE.md 3 節)。

説明で回避するのではなく、判定できるようにしたい。

対応

0_RunAll.ps1-IgnoreErrors を足し、既定でこの既知エラーを渡す。

param(
    [ValidateSet("CS", "VB", "Both")]
    [string]$Lang = "CS",
    [string[]]$IgnoreErrors = @('error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj')
)
  • 1_BuildAll.ps1 にだけ渡す(23 は受け取らない)
  • 既定で渡す。 通しで回す人がいちいち指定するものではない
  • 明示的に -IgnoreErrors @() を渡せば、除外なしにもできる

除外したものは 1_BuildAll.ps1別枠で件数と内容を出すので、
黙って消えるわけではない。

======== 既知として除外したエラー ========
  除外条件 : error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj
  [WSClnt_sample (net48)] ... error MSB3482: ...

併せて直すもの

  • ヘッダのコメント(「終了コードだけで判断せず…」)を、現状に合わせて書き直す
  • -IgnoreErrors の説明を BUILDING.md /
    CHEATSHEET.md の記述と食い違わないようにする

影響

  • 利用者への影響: 無しroot/programs の検証スクリプトのみ)
  • net48 / net10.0: 両方(1_BuildAll.ps1 の全体に効く)
  • 既定の挙動は変わる。 これまで NG だったものが OK になる。
    ただし除外した内容は表示され続けるので、見落としにはならない
  • 検証: .\0_RunAll.ps1 -Lang Both終了コードがそのまま合否として読めること

補足

既定で除外してよいのか、という点は一考した。

「環境に依存して必ず出るエラー」を既定で除外するのは、
本来直すべきものを隠すことにもなり得る。
ただし本件は csproj が証明書の拇印を直接持っている構造上の事情で、
証明書を配布しない限り、どの環境でも必ず失敗する。
BUILDING.md 4 節でも既知として扱っている。

「必ず失敗すると分かっているものを、毎回 NG として数える」方が実害が大きいと考える。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions