Skip to content

Java: Make it so slash command responses are accessible via RPC #434

Java: Make it so slash command responses are accessible via RPC

Java: Make it so slash command responses are accessible via RPC #434

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: write
checks: write
pull-requests: write
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 target/copilot-sdk/nodejs/node_modules/@github/copilot/index.js --version
- 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 JaCoCo badge
if: success() && github.ref == 'refs/heads/main' && matrix.test-jdk == '25'
working-directory: .
run: bash .github/scripts/generate-java-coverage-badge.sh java/target/site/jacoco-coverage/jacoco.csv .github/badges
- name: Create PR for JaCoCo badge update
if: success() && github.ref == 'refs/heads/main' && matrix.test-jdk == '25'
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v7
with:
commit-message: "Update Java JaCoCo coverage badge"
title: "Update Java JaCoCo coverage badge"
body: "Automated Java JaCoCo coverage badge update from CI."
branch: auto/update-java-jacoco-badge
add-paths: .github/badges/
delete-branch: true
- 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