Improve E2E coverage across SDKs #1037
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Java SDK Tests" | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - "java/**" | |
| - "test/**" | |
| - ".github/workflows/java-sdk-tests.yml" | |
| - ".github/actions/setup-copilot/**" | |
| - ".github/actions/java-test-report/**" | |
| pull_request: | |
| types: [opened, synchronize, reopened, ready_for_review] | |
| paths: | |
| - "java/**" | |
| - "test/**" | |
| - ".github/workflows/java-sdk-tests.yml" | |
| - ".github/actions/setup-copilot/**" | |
| - ".github/actions/java-test-report/**" | |
| - "!**/*.md" | |
| - "!**/LICENSE*" | |
| - "!**/.gitignore" | |
| - "!**/.editorconfig" | |
| - "!**/*.png" | |
| - "!**/*.jpg" | |
| - "!**/*.jpeg" | |
| - "!**/*.gif" | |
| - "!**/*.svg" | |
| workflow_dispatch: | |
| merge_group: | |
| permissions: | |
| contents: read | |
| jobs: | |
| java-sdk: | |
| name: "Java SDK Tests (JDK ${{ matrix.test-jdk }})" | |
| if: github.event.repository.fork == false | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| test-jdk: ["25", "17"] | |
| defaults: | |
| run: | |
| shell: bash | |
| working-directory: ./java | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 | |
| with: | |
| java-version: "25" | |
| distribution: "microsoft" | |
| cache: "maven" | |
| - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 | |
| with: | |
| node-version: 22 | |
| - name: Build SDK and set up test harness | |
| run: mvn test-compile jar:jar | |
| - name: Verify Javadoc generation | |
| if: matrix.test-jdk == '25' | |
| run: mvn javadoc:javadoc -q | |
| - name: Verify CLI works | |
| run: node ../nodejs/node_modules/@github/copilot/npm-loader.js --version | |
| - name: Prime Spotless Eclipse formatter cache | |
| if: matrix.test-jdk == '25' | |
| run: | | |
| set -euo pipefail | |
| p2_data="$HOME/.m2/repository/dev/equo/p2-data" | |
| bundle_dir="$p2_data/bundle-pool/https-download.eclipse.org-eclipse-updates-4.33-R-4.33-202409030240-" | |
| query_dir="$p2_data/queries/1.8.1-1468712279" | |
| jna_jar="$bundle_dir/com.sun.jna_5.14.0.v20231211-1200.jar" | |
| mkdir -p "$bundle_dir" "$query_dir" | |
| printf '1' > "$p2_data/queries/version" | |
| printf 'https://download.eclipse.org/eclipse/updates/4.33/R-4.33-202409030240/' > "$bundle_dir/.url" | |
| mvn -q dependency:get -Dartifact=net.java.dev.jna:jna:5.14.0 -Dtransitive=false | |
| cp "$HOME/.m2/repository/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" "$jna_jar" | |
| helper_dir="$(mktemp -d)" | |
| trap 'rm -rf "$helper_dir"' EXIT | |
| mkdir -p "$helper_dir/dev/equo/solstice/p2" | |
| cat > "$helper_dir/dev/equo/solstice/p2/P2QueryResult.java" <<'JAVA' | |
| package dev.equo.solstice.p2; | |
| import java.io.File; | |
| import java.io.FileOutputStream; | |
| import java.io.ObjectOutputStream; | |
| import java.io.Serializable; | |
| import java.util.ArrayList; | |
| import java.util.Collections; | |
| import java.util.List; | |
| public class P2QueryResult implements Serializable { | |
| private static final long serialVersionUID = 1L; | |
| private final List<String> mavenCoordinates; | |
| private final List<File> downloadedP2Jars; | |
| private P2QueryResult(List<String> mavenCoordinates, List<File> downloadedP2Jars) { | |
| this.mavenCoordinates = mavenCoordinates; | |
| this.downloadedP2Jars = downloadedP2Jars; | |
| } | |
| public static void main(String[] args) throws Exception { | |
| var coordinates = new ArrayList<String>(); | |
| Collections.addAll( | |
| coordinates, | |
| "net.java.dev.jna:jna-platform:5.14.0", | |
| "org.apache.felix:org.apache.felix.scr:2.2.12", | |
| "org.eclipse.platform:org.eclipse.core.commands:3.12.200", | |
| "org.eclipse.platform:org.eclipse.core.contenttype:3.9.500", | |
| "org.eclipse.platform:org.eclipse.core.expressions:3.9.400", | |
| "org.eclipse.platform:org.eclipse.core.filesystem:1.11.0", | |
| "org.eclipse.platform:org.eclipse.core.jobs:3.15.400", | |
| "org.eclipse.platform:org.eclipse.core.resources:3.21.0", | |
| "org.eclipse.platform:org.eclipse.core.runtime:3.31.100", | |
| "org.eclipse.platform:org.eclipse.equinox.app:1.7.200", | |
| "org.eclipse.platform:org.eclipse.equinox.common:3.19.100", | |
| "org.eclipse.platform:org.eclipse.equinox.event:1.7.100", | |
| "org.eclipse.platform:org.eclipse.equinox.preferences:3.11.100", | |
| "org.eclipse.platform:org.eclipse.equinox.registry:3.12.100", | |
| "org.eclipse.platform:org.eclipse.equinox.supplement:1.11.0", | |
| "org.eclipse.jdt:org.eclipse.jdt.core:3.39.0", | |
| "org.eclipse.jdt:ecj:3.39.0", | |
| "org.eclipse.platform:org.eclipse.osgi:3.21.0", | |
| "org.eclipse.platform:org.eclipse.text:3.14.100", | |
| "org.osgi:org.osgi.service.cm:1.6.1", | |
| "org.osgi:org.osgi.service.component:1.5.1", | |
| "org.osgi:org.osgi.service.event:1.4.1", | |
| "org.osgi:org.osgi.service.metatype:1.4.1", | |
| "org.osgi:org.osgi.service.prefs:1.1.2", | |
| "org.osgi:org.osgi.util.function:1.2.0", | |
| "org.osgi:org.osgi.util.promise:1.3.0"); | |
| var result = new P2QueryResult(coordinates, List.of(new File(args[1]))); | |
| try (var out = new ObjectOutputStream(new FileOutputStream(args[0]))) { | |
| out.writeObject(result); | |
| } | |
| } | |
| } | |
| JAVA | |
| javac "$helper_dir/dev/equo/solstice/p2/P2QueryResult.java" | |
| java -cp "$helper_dir" dev.equo.solstice.p2.P2QueryResult "$query_dir/content" "$jna_jar" | |
| - name: Run spotless check | |
| if: matrix.test-jdk == '25' | |
| run: | | |
| mvn spotless:check | |
| if [ $? -ne 0 ]; then | |
| echo "❌ spotless:check failed. Please run 'mvn spotless:apply' in java" | |
| exit 1 | |
| fi | |
| echo "✅ spotless:check passed" | |
| - name: Run Java SDK tests (JDK 25) | |
| if: matrix.test-jdk == '25' | |
| env: | |
| CI: "true" | |
| run: mvn verify -Dskip.test.harness=true | |
| - name: Switch to JDK 17 | |
| if: matrix.test-jdk == '17' | |
| uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 | |
| with: | |
| java-version: "17" | |
| distribution: "microsoft" | |
| - name: Run Java SDK tests (JDK 17, no recompilation) | |
| if: matrix.test-jdk == '17' | |
| env: | |
| CI: "true" | |
| run: | | |
| echo "Running tests against JDK 25-built classes using JDK 17 runtime..." | |
| java -version | |
| mvn jacoco:prepare-agent@wire-up-coverage-instrumentation antrun:run@print-test-jdk-banner surefire:test failsafe:integration-test failsafe:verify jacoco:report@build-coverage-report-from-tests -Denforcer.skip=true | |
| - name: Upload test results for site generation | |
| if: success() && github.ref == 'refs/heads/main' && matrix.test-jdk == '25' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: test-results-for-site | |
| path: | | |
| java/target/jacoco-test-results/sdk-tests.exec | |
| java/target/surefire-reports/ | |
| java/target/surefire-reports-isolated/ | |
| retention-days: 1 | |
| - name: Generate Test Report Summary | |
| if: always() | |
| uses: ./.github/actions/java-test-report | |
| with: | |
| title: "Copilot Java SDK :: Test Results JDK ${{ matrix.test-jdk }}" | |
| - name: Upload test results on failure | |
| if: failure() | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: java-test-results-jdk-${{ matrix.test-jdk }} | |
| path: | | |
| java/target/surefire-reports/ | |
| java/target/surefire-reports-isolated/ | |
| java/target/failsafe-reports/ | |
| retention-days: 7 |