From 9b541e6e8d1133fc4deb4e616f4f845697d72bcd Mon Sep 17 00:00:00 2001 From: Tomasz Tylenda Date: Fri, 7 Nov 2025 17:07:49 +0100 Subject: [PATCH 1/2] QA on windows --- .cirrus.yml | 1 + .github/workflows/build.yml | 17 +++++++++++++++++ java-checks-test-sources/pom.xml | 3 +-- .../java/test/classpath/TestClasspathUtils.java | 5 +++-- .../src/test/resources/classpath-example.txt | 2 +- .../resources/invalid-classpath-example.txt | 4 ++-- 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index e94ab7dc233..55c16823a08 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -129,6 +129,7 @@ test_analyze_task: - ./check-license-compliance.sh cleanup_before_cache_script: cleanup_maven_repository +# Migrated to GHA. qa_os_win_task: ec2_instance: image: base-windows-jdk21-v* diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fee6d900c88..1fe8c4eea5f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -271,3 +271,20 @@ jobs: -Dmaven.test.redirectTestOutputToFile=false -Dparallel=methods -DuseUnlimitedThreads=true + + qa-os-win: + name: Build and Unit Test on Windows + # No dependency on build step, because we do not need the build number. + runs-on: github-windows-latest-m + permissions: + id-token: write # Required for Vault OIDC authentication + contents: write # Required for repository access and tagging + steps: + - name: Config Git + run: git config --global core.autocrlf input + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: jdx/mise-action@5ac50f778e26fac95da98d50503682459e86d566 # v3.2.0 + with: + version: 2025.7.12 + - name: Run Maven + run: mvn clean verify --batch-mode diff --git a/java-checks-test-sources/pom.xml b/java-checks-test-sources/pom.xml index f586103b9e9..a425fa42ec3 100644 --- a/java-checks-test-sources/pom.xml +++ b/java-checks-test-sources/pom.xml @@ -43,8 +43,7 @@ / :${line.separator} test - - $${M2_REPO} + M2_REPO UTF-8 ${project.build.directory}/test-classpath.txt diff --git a/java-checks-test-sources/test-classpath-reader/src/main/java/org/sonar/java/test/classpath/TestClasspathUtils.java b/java-checks-test-sources/test-classpath-reader/src/main/java/org/sonar/java/test/classpath/TestClasspathUtils.java index 6319142c3a0..94dab5afc1a 100644 --- a/java-checks-test-sources/test-classpath-reader/src/main/java/org/sonar/java/test/classpath/TestClasspathUtils.java +++ b/java-checks-test-sources/test-classpath-reader/src/main/java/org/sonar/java/test/classpath/TestClasspathUtils.java @@ -158,11 +158,12 @@ public static List loadFromFile(String classpathTextFilePath) { String mavenRepository = findMavenLocalRepository(System::getenv, System::getProperty); try { String content = Files.readString(toPath(classpathTextFilePath), UTF_8); - Arrays.stream(content.split(":")) + // Split on ":", but not when it follows Windows drive letter (e.g. "C:\"). + Arrays.stream(content.split("(? !line.isBlank()) .map(TestClasspathUtils::fixSeparator) - .map(line -> line.replace("${M2_REPO}", mavenRepository)) + .map(line -> line.replace("M2_REPO", mavenRepository)) .map(Paths::get) .forEach(dependencyPath -> { if (!Files.exists(dependencyPath)) { diff --git a/java-checks-test-sources/test-classpath-reader/src/test/resources/classpath-example.txt b/java-checks-test-sources/test-classpath-reader/src/test/resources/classpath-example.txt index 2ada24e3497..610310ad0d9 100644 --- a/java-checks-test-sources/test-classpath-reader/src/test/resources/classpath-example.txt +++ b/java-checks-test-sources/test-classpath-reader/src/test/resources/classpath-example.txt @@ -1,2 +1,2 @@ -${M2_REPO}/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar: +M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar: diff --git a/java-checks-test-sources/test-classpath-reader/src/test/resources/invalid-classpath-example.txt b/java-checks-test-sources/test-classpath-reader/src/test/resources/invalid-classpath-example.txt index 462d6ed2b84..a33cb733005 100644 --- a/java-checks-test-sources/test-classpath-reader/src/test/resources/invalid-classpath-example.txt +++ b/java-checks-test-sources/test-classpath-reader/src/test/resources/invalid-classpath-example.txt @@ -1,2 +1,2 @@ -${M2_REPO}/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar: -${M2_REPO}/org/bad/luck/missing-artifact/666/missing-artifact-666.jar: +M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar: +M2_REPO/org/bad/luck/missing-artifact/666/missing-artifact-666.jar: From 4818f7d52d98ed1eb4c5b60299ca5620382fc1f1 Mon Sep 17 00:00:00 2001 From: Tomasz Tylenda Date: Fri, 14 Nov 2025 12:05:43 +0100 Subject: [PATCH 2/2] promote --- .github/workflows/build.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fe8c4eea5f..90b715cc369 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -288,3 +288,25 @@ jobs: version: 2025.7.12 - name: Run Maven run: mvn clean verify --batch-mode + + promote: + needs: + - build + - ruling-qa + - plugin-qa + - sanity + - test-analyze + - autoscan + - qa-os-win + if: ${{ needs.build.outputs.deployed }} + runs-on: github-ubuntu-latest-s # Public repo uses custom GitHub-hosted runners + name: Promote + permissions: + id-token: write + contents: write + env: + BUILD_NUMBER: ${{ needs.build.outputs.build-number }} + steps: + - uses: SonarSource/ci-github-actions/promote@v1 + with: + promote-pull-request: true