Skip to content

Move CI to GitHub Actions, remove the Azure pipeline - #2905

Merged
nohwnd merged 7 commits into
mainfrom
ci/gh-actions-pilot
Aug 22, 2026
Merged

Move CI to GitHub Actions, remove the Azure pipeline#2905
nohwnd merged 7 commits into
mainfrom
ci/gh-actions-pilot

Conversation

@nohwnd

@nohwnd nohwnd commented Jul 18, 2026

Copy link
Copy Markdown
Member

Moves CI to GitHub Actions and deletes azure-pipelines.yml. Releasing stays on Azure DevOps (azure-pipelines-publish.yml), it needs the signing service connection and the publishing variable groups.

Why now: Azure DevOps public projects are being retired, existing ones convert to private in 2027 and the free grant drops from 10 parallel jobs to 1. GitHub Actions is free for public repos with 20.

The workflow builds once on windows-latest, then runs the same 8 leg matrix Azure ran: PowerShell 7 on ubuntu/macOS/windows (latest plus one previous GA), Windows PowerShell 5.1 on windows (latest plus previous). Coverage shows in each run's job summary and in a consolidated table, and uploads to Codecov with a flag per leg. One Done job gates the matrix, same idea as the Azure Done stage, so branch protection requires one check instead of listing all 8 legs.

@fflaten the test report is fixed. It moved out of the matrix into test-report.yml, which is the setup dorny/test-reporter recommends for public repos, and also the reason nothing was showing: a run triggered by a pull request from a fork gets a read only token and cannot create a check run. A workflow_run workflow runs in the base repo and can. It lists only failed suites and tests now. One catch, workflow_run only fires for the copy of the workflow on the default branch, so the report cannot be seen on this PR, it starts working once this is merged.

Before merging, main still requires Pester PR (Build build) and Pester PR (Done Done). Neither can report once the pipeline file is gone, so the required check has to change to Done at the same time, and the Pester PR pipeline in Azure DevOps should stop triggering on pull requests.

Next: the same workflow on rel/5.x.x, and a Done job in the v4 workflow on rel/4.x.x, then one branch policy requiring Done covers main and both release branches.

Images are GA only, floating *-latest plus one pinned previous GA. macos-14 is deprecating (removed Nov 2026) and will need swapping before then.

🤖

@nohwnd
nohwnd force-pushed the ci/gh-actions-pilot branch from 2e2a602 to 64e2f1b Compare July 18, 2026 10:05
Runs in parallel with azure-pipelines.yml so we can compare the two before cutting over. Build once on Windows, then the same 8-leg matrix as Azure: PowerShell 7 on ubuntu/macOS/windows (latest + one previous GA), Windows PowerShell 5.1 on windows (latest + previous). Coverage renders in each run's job summary and a consolidated table, and uploads to Codecov with a flag per leg. GA-only images: floating *-latest plus one pinned previous GA.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@nohwnd
nohwnd force-pushed the ci/gh-actions-pilot branch from 64e2f1b to 2177e4b Compare July 18, 2026 10:06
@fflaten

fflaten commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator

Add https://github.com/dorny/test-reporter to the test matrix jobs?
Could also add dependabot for github-actions (at least major versions) to keep up with the Node.js deprecations.

Why now: Azure DevOps public projects are being retired (existing ones convert to private in 2027, dropping the free grant from 10 parallel jobs to 1)

Didn't know. 🙁 Good thing we don't use exclusive features here.

nohwnd and others added 3 commits July 18, 2026 22:07
- Publish NUnit3 test results per matrix leg with dorny/test-reporter, a GitHub-native test report (Azure test-tab parity). test.ps1 gains an env-selectable result format (PESTER_TESTRESULT_FORMAT); Azure keeps the default NUnit 2.5, only the pilot switches to NUnit3.

- Add Dependabot for github-actions (weekly, grouped, incl. major) to keep the actions current and ahead of Node.js runtime deprecations.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dorny/test-reporter shells out to git and fails with exit 128 when the leg has no repo checkout (the legs are artifact-only). Add a shallow checkout before the artifact download; the artifact overlays it, so the tests still run against the published build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Azure PublishTestResults@2 supports NUnit3, so test.ps1 can just emit the modern format for both consumers. Drops the PESTER_TESTRESULT_FORMAT env indirection.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@fflaten

fflaten commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

Test result summary not showing, not sure why.

Looks like we need to extract the test-report to a follow-up workflow into separate workflow to handle forks (https://github.com/dorny/test-reporter#recommended-setup-for-public-repositories).

And maybe limit the summary to failed only using list-suites and list-tests?

nohwnd added 2 commits August 22, 2026 08:21
The pilot ran alongside Azure since July and matches it, so this removes
azure-pipelines.yml and makes the workflow the CI. Releasing stays on Azure
DevOps in azure-pipelines-publish.yml, it needs the signing service connection
and the publishing variable groups.

Test results now render from test-report.yml, a workflow_run workflow, instead
of from inside the matrix legs. That is the setup dorny/test-reporter
recommends for public repos, and the reason the report was not showing: a run
triggered by a pull request from a fork gets a read only token and cannot
create a check run. The separate workflow runs in the base repo and can. It
lists only failed suites and tests, a full pass list gets truncated by GitHub.

Legs no longer check out the repo, that checkout only existed to give
test-reporter git context.

The gate to require in branch protection is "Done".

🤖
@nohwnd nohwnd changed the title Add GitHub Actions CI pilot (with Codecov) alongside Azure Pipelines Move CI to GitHub Actions, remove the Azure pipeline Aug 22, 2026
The runner forces Node 20 actions onto Node 24 and warns about it on every
job. setup-dotnet v6, upload-artifact v7, download-artifact v8, codecov-action
v7. The github-script warning came from codecov-action v5, it is gone with v7.

download-artifact v8 fails the job when the download digest does not match,
instead of only warning.

🤖
@nohwnd
nohwnd merged commit b2b0fc7 into main Aug 22, 2026
12 checks passed
@nohwnd
nohwnd deleted the ci/gh-actions-pilot branch August 22, 2026 07:37
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