name: Conformance Tests on: workflow_dispatch: pull_request: branches: [ main ] push: branches: [ main ] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} # Cancel only when the run is NOT on `main` branch cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} jobs: run-conformance: runs-on: ${{ matrix.os }} name: Run Conformance Tests on ${{ matrix.os }} timeout-minutes: 20 env: JAVA_OPTS: "-Xmx8g -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dkotlin.daemon.jvm.options=-Xmx6g" strategy: fail-fast: false matrix: include: - os: ubuntu-latest max-workers: 3 - os: windows-latest max-workers: 3 - os: macos-latest max-workers: 2 steps: - uses: actions/checkout@v6 - name: Set up JDK 21 uses: actions/setup-java@v5 with: java-version: '21' distribution: 'temurin' - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '22' # increase only after https://github.com/nodejs/node/issues/56645 will be fixed - name: Setup Conformance Tests working-directory: conformance-test run: |- npm install -g @modelcontextprotocol/conformance@0.1.8 - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 with: add-job-summary: 'always' cache-read-only: ${{ github.ref != 'refs/heads/main' }} gradle-home-cache-includes: | caches notifications sdks ../.konan/** - name: Run Conformance Tests run: |- ./gradlew :conformance-test:test --no-daemon --max-workers ${{ matrix.max-workers }} - name: Upload Conformance Results if: always() uses: actions/upload-artifact@v7 with: name: conformance-results-${{ matrix.os }} path: conformance-test/results/