Migrate Windows CI from AppVeyor to GitHub Actions windows-latest
Author: AmitKumarDeoghoriaCreated Sep 19, 2026Updated Sep 19, 2026
Numbers
Master builds on AppVeyor consistently take about 36 min. Last five from the AppVeyor API:
- #67993 — 36.8 min
- #67992 — 35.4 min
- #67991 — 35.9 min
- #67990 — 36.8 min
- #67989 — 37.2 min
The four matrix jobs run one after another. The free tier allows only 1 concurrent job — zero overlap in any of the five builds when comparing job start/end timestamps.
Per-job time in build #67993:
- sevntu — 5.0 min
- run_checkstyle — 5.7 min
- verify_without_checkstyle — 18.0 min
- site_without_verify — 5.4 min
Inside the 18-min job, from the raw log:
- Surefire tests — 6:48 (single-threaded; log shows
parallel='none') - SpotBugs — 3:04
- PMD — 1:57
- run-checkstyle-files-generator — 2:13
- Integration tests — 1:31
Observations
- Three of the four jobs don't need Windows.
run_checkstyle,site_without_verify, and most ofverify_without_checkstyle(PMD, SpotBugs, JaCoCo, forbiddenapis) produce identical output on any OS. Azure Pipelines already runsverifyon Ubuntu and macOS, so this work is happening twice. - Tests run single-threaded on a 2-core box.
- The image is labelled
Visual Studio 2026but the log reports Windows Server 2019..ci/validation.cmd:24has the comment: "Appveyor has old jdk21 there is problem compilation of Inputs". - AppVeyor runs only on master (
branches.only: master), so it cannot gate PRs — Windows regressions land first and are fixed after.
The one thing AppVeyor uniquely provides: it is our only Windows check.
Proposal
Move Windows verify to GitHub Actions windows-latest. Drop AppVeyor.
Why GitHub Actions and not Azure Pipelines:
- Microsoft has retired public projects on Azure Pipelines; existing public projects convert to private in 2027 and lose the free parallel-jobs grant.
- GHA
windows-latestis 4 vCPU / 16 GB / Windows Server 2025, free and unlimited on public repos. AppVeyor: 2 vCPU / 6 GB / Windows Server 2019. - Runs on PRs by default.
Expected outcome:
- One Windows verify job on GHA: about 10–12 min (vs 36 min today).
- Delete
appveyor.ymland the Windows-specific paths in.ci/validation.cmd.
Questions
- Any Windows-specific reason to keep the current 4-job matrix that I am missing?
- The
sevntujob appears to run only on AppVeyor — was that intentional? If we want to keep it, easiest is to move it to a Linux job.
Source: checkstyle/checkstyle