COMP: Minimize redundant Azure CI matrix (issue #6163)#6164
COMP: Minimize redundant Azure CI matrix (issue #6163)#6164hjmjohnson merged 4 commits intoInsightSoftwareConsortium:mainfrom
Conversation
This comment was marked as resolved.
This comment was marked as resolved.
3a6ca83 to
b1781b1
Compare
|
Per request: enabled Note: |
|
I don't think force-pushes dismiss approvals on this repo. I re-approved it anyway 😄 |
|
Known flake: /azp run ITK.Linux.Python |
|
Update on the This PR (#6164) is blocked on #6166. Once #6166 merges, I'll rebase this branch on main and the LinuxPython lane should turn green. |
b1781b1 to
cfe0ccb
Compare
|
Rebased onto #6166 (the upstream-derived Eigen GitHub doesn't allow targeting a fork branch as a PR base, so the base stays /azp run |
|
/azp run ITK.Linux.Python |
cfe0ccb to
bf6e691
Compare
bf6e691 to
058e4b9
Compare
|
Rebased onto #6173 ( Why the rebase was neededThe 4 warnings on the prior Merge order
|
058e4b9 to
c96ede1
Compare
c96ede1 to
94cbf36
Compare
The pinned v0.8 (2018-2019) ships an action that builds the Go binary from source on every CI run. Each build downloads dependencies from gopkg.in, which intermittently fails the TLS handshake and aborts the labeling job. The failure has been observed across multiple recent PRs (InsightSoftwareConsortium#5775, InsightSoftwareConsortium#6177, InsightSoftwareConsortium#6164 -- 'Docker build failed with exit code 1' from 'go: gopkg.in/check.v1: net/http: TLS handshake timeout'). srvaroa/labeler ships a pre-built Docker image starting at v1.8.1, so newer versions skip the Go-compile step entirely. The maintainer publishes a floating 'v1' major tag that auto-tracks minor/patch releases; v1.14.0 is current upstream. The v1 schema replaces the v0.8-era flat dict-of-rules with a 'version: 1' header + 'labels:' list of {label, title, files, ...} objects, so .github/labeler.yml is migrated alongside the workflow bump. Pattern semantics are unchanged: both v0.8 and v1 use Go's RE2 regex engine, matching unanchored against PR file paths -- so existing patterns like 'Modules/IO/*' (which is regex 'Modules/IO/' followed by zero-or-more '/') continue to behave the same in v1.
A Python-wrapping build is a strict superset of the same OS+arch non-Python build. AzurePipelinesWindows and AzurePipelinesMacOS were duplicating coverage already provided by AzurePipelinesWindowsPython and AzurePipelinesMacOSPython respectively. Move BUILD_SHARED_LIBS=ON onto the macOS Python lane so the macOS shared-library build coverage previously carried by AzurePipelinesMacOS is preserved on the surviving job. Bump that job's Python to 3.12 to stagger Python-version coverage across surviving Python lanes. Part of issue InsightSoftwareConsortium#6163 (CI matrix consolidation).
Three jobs in AzurePipelinesLinux.yml previously covered overlapping ground: - Linux: default ubuntu-22.04 / C++17 / no-Python (strict subset of AzurePipelinesLinuxPython) - LinuxLegacyRemoved: ubuntu-22.04 / ITK_LEGACY_REMOVE=ON - LinuxCxx20: ubuntu-24.04 / CMAKE_CXX_STANDARD=20 Drop the Linux job entirely (covered by LinuxPython) and merge the two remaining lanes into a single LinuxLegacyRemovedCxx20 job on ubuntu-24.04 carrying both ITK_LEGACY_REMOVE=ON and CMAKE_CXX_STANDARD=20. The two axes are orthogonal (legacy-API surface vs language-conformance) and rarely need bisected isolation in CI. Part of issue InsightSoftwareConsortium#6163 (CI matrix consolidation).
MinSizeRel (-Os) tests an optimization profile ITK users overwhelmingly do not ship; users build Release (-O3) or RelWithDebInfo. The historical reason for MinSizeRel on hosted runners (small artifacts on free-tier images) no longer applies on current Azure agents. Switch the surviving Python wrapping jobs to Release so PR signal matches what users compile. The remaining MinSizeRel canary lives on the consolidated LinuxLegacyRemovedCxx20 job, which retains coverage that the unusual optimizer config still builds. Part of issue InsightSoftwareConsortium#6163 (CI matrix consolidation).
94cbf36 to
8b8a0c8
Compare
|
Force-pushed
Patterns added# MSVC "warning C####:" form (Eigenvalues/Tridiagonalization.h C4750 etc.)
".*Modules.ThirdParty.Eigen3.*warning C[0-9]+:.*"
# GCC continuation "note:" lines from Eigen paths
# (the IPA-CP -Wmaybe-uninitialized warnings in
# Core/products/SelfadjointMatrixVector.h are followed by a "note:
# by argument N of type ... declared here" line that some reporters
# count separately)
".*Modules/ThirdParty/Eigen3/.*note:.*"The pre-existing Final commit listFour commits on top of fresh upstream/main. |
Add two CTestCustom warning-exception patterns alongside the existing
".*Modules/ThirdParty/Eigen3/.*warning:.*" line so the dashboard
ignores the noise from vendored Eigen on all toolchains:
* MSVC "warning C####:" form (e.g. C4750 from Eigenvalues/
Tridiagonalization.h, 'function with _alloca() inlined into a
loop') -- the existing 'warning:' regex requires a literal colon
directly after 'warning', which MSVC's 'warning C4750:' format
does not satisfy.
* GCC continuation 'note:' lines from Eigen paths. GCC IPA-CP
cloning at -O3 + C++20 + ubuntu-24.04 / GCC 13/14 (the toolchain
introduced by this PR's CI consolidation) produces -Wmaybe-
uninitialized false positives in Core/products/SelfadjointMatrixVector.h;
each warning is followed by a multi-line 'note: by argument N of
type ... declared here' continuation that some reporters count
separately.
Suppressing in CTestCustom rather than patching vendored Eigen
follows the project pattern set by be77e85 (the MSVC C4750 fix on the
eigen-5.0.1-update branch); patches to the third-party tree get
overwritten on every Eigen vendor sync, while CTestCustom belongs to
ITK and survives those syncs cleanly.
8b8a0c8 to
5a29ced
Compare
|
Force-pushed What's covered now
The three new patterns are deliberately narrow -- a real Why pre-emptiveThe four warning categories all originate from the eigen-5.0.1-update prerequisite stack that this PR no longer carries. On the rebased tip none of them fire today (the older Eigen tree on Final commit list |
Follow-up to #6166. On ubuntu-24.04 + GCC 13/14 + C++20 (the toolchain that #6164 introduces), GCC -O3 IPA-CP emits additional false-positive -Wmaybe-uninitialized at the outer selfadjoint_product_impl::run() call site, attributing the read to "argument 3 of type const float *" of the cloned selfadjoint_matrix_vector_product::run.constprop.isra. Add pzero(Packet{}) declare-then-assign init for the four Packet locals (A0i, A1i, Bi, Xi) loaded from the lhs/rhs/res pointers inside the inner loop. Mirrors the #6166 ptmp2/ptmp3 pattern: pzero() is visible to GCC's IPA-CP as a definite zero starting state, while a bare declaration plus subsequent ploadu/pload is opaque and lets the optimizer trace an uninit path through cloned variants.
35fc0aa
into
InsightSoftwareConsortium:main
Implements the consolidation proposed in #6163: shrinks the per-PR Azure build matrix from 7 jobs to 3 while preserving every coverage axis (OS, arch, Python wrapping, legacy-removed, C++20, shared/static, MSVC v142/v143).
Three small commits, each independently revertible:
AzurePipelinesWindows.ymlandAzurePipelinesMacOS.yml(strict subsets of their*Pythonsiblings), movesBUILD_SHARED_LIBS=ONontoAzurePipelinesMacOSPython.ymlto preserve the macOS shared-lib axis, and bumps that lane's Python from 3.10 → 3.12.Linuxjob fromAzurePipelinesLinux.yml(covered byLinuxPython) and merges the orthogonalLinuxLegacyRemovedandLinuxCxx20jobs into one ubuntu-24.04 lane carrying bothITK_LEGACY_REMOVE=ONandCMAKE_CXX_STANDARD=20.MinSizeRellane is the consolidatedLinuxLegacyRemovedCxx20canary.Closes #6163 (or addresses it, depending on whether the maintainers want the optional Debug lane added in a follow-up).
Surviving Azure jobs after this PR
AzurePipelinesLinux.ymlLinuxLegacyRemovedCxx20ITK_LEGACY_REMOVE=ON,CMAKE_CXX_STANDARD=20AzurePipelinesLinuxPython.ymlLinuxITK_WRAP_PYTHON=ONAzurePipelinesMacOSPython.ymlmacOSBUILD_SHARED_LIBS=ON,ITK_WRAP_PYTHON=ONAzurePipelinesWindowsPython.ymlWindowsBUILD_SHARED_LIBS=ON,ITK_WRAP_PYTHON=ONAzurePipelinesBatch.ymlGitHub Actions workflows (
arm.yml,pixi.yml,pre-commit.yml) are not touched by this PR.Coverage axis check (before vs after)
arm.ymlarm.yml(unchanged)arm.ymlarm.yml(unchanged)ITK_LEGACY_REMOVE=ONCMAKE_CXX_STANDARD=20BUILD_SHARED_LIBS=ONLinuxBUILD_SHARED_LIBS=ONmacOSBUILD_SHARED_LIBS=ONWindowsMinSizeRelcanaryTest plan
arm.yml,pixi.yml,pre-commit.ymlunchanged and green.ITK_LEGACY_REMOVE=ONor C++20 coverage on the merged lane.MacOSPythonwithBUILD_SHARED_LIBS=ON.AzurePipelinesWindows.yml,AzurePipelinesMacOS.yml) are also retired on the Azure side.