#21641·checkstyle

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 of verify_without_checkstyle (PMD, SpotBugs, JaCoCo, forbiddenapis) produce identical output on any OS. Azure Pipelines already runs verify on Ubuntu and macOS, so this work is happening twice.
  • Tests run single-threaded on a 2-core box.
  • The image is labelled Visual Studio 2026 but the log reports Windows Server 2019. .ci/validation.cmd:24 has 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-latest is 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.yml and 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 sevntu job appears to run only on AppVeyor — was that intentional? If we want to keep it, easiest is to move it to a Linux job.