Skip to content

ci: promote linux-arm64 + alpine-musl to enforcing; close the native-deps deferral - #357

Merged
raroche merged 2 commits into
mainfrom
ci/promote-native-legs
Jul 27, 2026
Merged

ci: promote linux-arm64 + alpine-musl to enforcing; close the native-deps deferral#357
raroche merged 2 commits into
mainfrom
ci/promote-native-legs

Conversation

@raroche

@raroche raroche commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Picks up the ci-nonblocking-platform-native-deps deferral. Its own removal condition — "both non-blocking legs pass the Test step in CI (green)" — is now met, and the premise it was written on is obsolete.

Why the premise no longer holds

The deferral described a genuine native-loading failure:

  • arm64libSkiaSharp.so: undefined symbol: uuid_generate_random, then FT_Get_BDF_Property once libuuid was preloaded
  • alpine (musl) — the raster-fallback native failing to load at all

That is fixed. The fontconfig-hardening step and the apk prerequisites, together with the SkiaSharp 4.150.1 bump in #355, load the native cleanly.

The decisive evidence is what those legs were actually doing while still labelled red: 8604 of 8609 tests passing, with the only two failures being font-dependent assertions in AutoHeightFlexTimelineFooterTests — never a native-load error. Those were fixed in #356, and both legs have since run the full suite green:

Leg Before #356 Now
linux-arm64 fail (2 assertions, 8604 passing) pass
alpine-musl-x64 fail (same 2 assertions) pass

Changes

  • linux-arm64 loses nonblocking: true; the alpine job loses continue-on-error: true. Both are renamed as a result — the ", non-blocking" suffix is part of the check name. Neither name is in branch protection's required contexts today, so no existing required check breaks.
  • macos-x64 stays non-blocking and keeps its own separate deferral: hosted Intel-mac runner availability, which nothing in this repo can fix. It is now the only non-blocking leg.
  • The deferral is removed from docs/deferrals.md and DeferralsParityTests (the documented convention for picking one up), and the macos-x64 entry's cross-reference is rewritten so it no longer points at a deleted anchor.
  • Stale rationale comments in ci.yml replaced with what is actually true now.

Maintainer action still needed

Making these legs enforcing turns the workflow red on failure, but it does not block a merge until the two renamed contexts are added to branch protection's required checks:

  • build+test (linux-arm64)
  • build+test (alpine-musl-x64)

Worth doing alongside benchmark gate (linux-x64), which is still not a required check — so even now that it measures again (#356), a genuine perf regression would not block a merge.

Verification

Build 0 errors · UnitTests 8614 passed / 3 skipped (including DeferralsParityTests, which enforces the doc/ID parity this PR changes) · git diff --check clean.

PROGRESS.md was rolled too, but it is gitignored — untracked deliberately in #284 as an internal doc — so it stays local and out of this PR.

…deferral

The `ci-nonblocking-platform-native-deps` deferral's own removal condition —
"both non-blocking legs pass the Test step in CI (green)" — is now met, and its
premise is obsolete.

It was written when libSkiaSharp genuinely would not load on those images
(arm64: `undefined symbol: uuid_generate_random`, then FT_Get_BDF_Property;
alpine: musl native-load failure). That is fixed: the fontconfig-hardening step
plus the apk prerequisites, together with the SkiaSharp 4.150.1 bump (#355),
load the native cleanly. The evidence is that both legs were running 8604 of
8609 tests, and their only failures were two font-dependent ASSERTIONS —
AutoHeightFlexTimelineFooterTests, fixed in #356 — never a native-load error.
Both have since run the full suite green.

- linux-arm64 loses `nonblocking: true`; the alpine job loses
  `continue-on-error: true`. Both are renamed accordingly (the ", non-blocking"
  suffix is part of the check name). Neither name is in branch protection's
  required contexts today, so no existing required check breaks.
- macos-x64 stays non-blocking and keeps its own deferral: hosted Intel-mac
  runner availability, which nothing in this repo can fix.
- Deferral removed from docs/deferrals.md + DeferralsParityTests (the documented
  convention for picking one up), and the macos-x64 entry's cross-reference
  rewritten so it no longer points at a deleted anchor.

NOTE for the maintainer: making these legs enforcing turns the WORKFLOW red on
failure, but it does not block a merge until the two renamed contexts are added
to branch protection's required checks — worth doing alongside
`benchmark gate (linux-x64)`, which is still not required.

(PROGRESS.md was also rolled, but it is gitignored — untracked deliberately in
#284 as an internal doc — so it stays local and out of this PR.)

Verified: build 0 errors; UnitTests 8614 passed / 3 skipped (incl.
DeferralsParityTests); git diff --check clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 27, 2026 20:56

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Promotes previously non-blocking CI coverage for linux-arm64 and alpine-musl-x64 to enforcing, and removes the now-obsolete deferral documentation/test parity entry, leaving macos-x64 as the only non-blocking leg due to hosted runner availability.

Changes:

  • Make linux-arm64 enforcing by removing the matrix nonblocking: true flag.
  • Make alpine-musl-x64 enforcing by removing continue-on-error: true and updating the check name.
  • Remove the ci-nonblocking-platform-native-deps deferral entry from docs/deferrals.md and update DeferralsParityTests parity expectations accordingly.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
tests/NetPdf.UnitTests/Docs/DeferralsParityTests.cs Removes the retired deferral from the expected-ID/priority lists to keep doc/test parity correct.
docs/deferrals.md Deletes the obsolete deferral section and updates the remaining macOS deferral text to remove the old cross-reference.
.github/workflows/ci.yml Promotes linux-arm64 and alpine-musl-x64 from non-blocking to enforcing; updates rationale comments and check names.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

PR #357 review [P2] — valid, and it names a gap this PR itself created.

Promoting linux-arm64 + alpine made them WORKFLOW-enforcing (a failure turns the
run red) but NOT merge-enforcing: `main`'s branch protection still requires only
build+test (linux-x64) / (windows-x64) / (macos-arm64), security-gate and
dependency-scan — verified against the live API. Deleting the old
`ci-nonblocking-platform-native-deps` entry removed the only thing tracking the
remaining step, so it could quietly be forgotten.

The reviewer offered either applying the setting or keeping a tracked follow-up.
Applying it is a repository SETTING that needs admin rights and cannot land
through a PR, so this takes the tracked-follow-up option and records it properly:

- New deferral `ci-branch-protection-required-contexts` (P2) states the current
  required list, the three checks missing from it, and the exact `gh api` command
  — including the trap that the API REPLACES the context list, so all eight must
  be sent, and that the two renamed checks must not be re-added under their old
  ", non-blocking" names.
- Rated P2, not P3, because the third missing context is `benchmark gate
  (linux-x64)`: until it is required, a genuine perf regression reports red and
  still merges, which silently weakens the CLAUDE.md performance contract.
- ci.yml now carries a CAVEAT next to "Enforcing matrix" pointing at the deferral,
  so the distinction is visible where the enforcement is declared.
- Registered in DeferralsParityTests (IDs + P2 priority), which is what makes the
  entry impossible to drop silently.

Verified: build 0 errors; UnitTests 8614 passed / 3 skipped; branch-protection
contexts re-read from the API to confirm the entry's factual claims.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@raroche
raroche merged commit cdc09a1 into main Jul 27, 2026
11 of 12 checks passed
@raroche
raroche deleted the ci/promote-native-legs branch July 27, 2026 21:26
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.

2 participants