codegen: Disambiguate when shared response model shared between multiple codes in same group, and handle 'default' error codes #15644
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: CI | |
| on: | |
| pull_request: | |
| push: | |
| branches: ['**'] | |
| tags: [v*] | |
| permissions: | |
| contents: write # release-drafter, auto-merge requirement | |
| pull-requests: write # labeler, auto-merge requirement | |
| env: | |
| # .sbtopts specifies 8g, which is needed to import into IntelliJ, but on GH that exceeds the maximum available memory | |
| SBT_JAVA_OPTS: -J-Xms4g -J-Xmx4g | |
| jobs: | |
| ci: | |
| # run on 1) push, 2) external PRs, 3) github-actions PRs | |
| # do not run on internal, non-steward PRs since those will be run by push to branch | |
| if: | | |
| github.event_name == 'push' || | |
| github.event.pull_request.head.repo.full_name != github.repository || | |
| github.event.pull_request.user.login == 'softwaremill-ci' || | |
| github.event.pull_request.user.login == 'dependabot[bot]' | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| scala-version: [ "2.12", "2.13", "3" ] | |
| target-platform: [ "JVM", "JS", "Native" ] | |
| java: [ "11", "21" ] | |
| exclude: | |
| - java: "21" | |
| include: # Restricted to build only specific Loom-based modules | |
| - scala-version: "2.13" | |
| target-platform: "JVM" | |
| java: "21" | |
| - scala-version: "3" | |
| target-platform: "JVM" | |
| java: "21" | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - uses: sbt/setup-sbt@66fb4376e81982c7d92a4074170846fff88e2e30 # v1, specifically v1.5.0 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| cache: 'sbt' | |
| java-version: ${{ matrix.java }} | |
| - name: Install sam cli | |
| if: matrix.java == '11' | |
| run: | | |
| wget -q https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip | |
| unzip -q aws-sam-cli-linux-x86_64.zip -d sam-installation | |
| sudo ./sam-installation/install --update | |
| sam --version | |
| - name: Install NPM | |
| if: matrix.java == '11' | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 18 | |
| - run: npm --version | |
| - name: Install AWS CDK | |
| if: matrix.java == '11' | |
| run: | | |
| npm install -g aws-cdk | |
| cdk --version | |
| - name: Install libidn2-dev libcurl3-dev | |
| if: matrix.target-platform == 'Native' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install libidn2-dev libcurl3-dev | |
| echo "STTP_NATIVE=1" >> $GITHUB_ENV | |
| - name: Install scala-cli | |
| if: matrix.target-platform == 'JVM' && matrix.java == '21' && matrix.scala-version == '3' | |
| uses: VirtusLab/scala-cli-setup@42e5f90b7aed2c0478e8074e5c25a030e1db3af6 # main, specifically v1.15.0 | |
| with: | |
| jvm: '' # needed because scala-cli-setup otherwise forces the installation of their default JVM (17) | |
| - name: Enable Loom-specific modules | |
| if: matrix.java == '21' | |
| run: echo "ONLY_LOOM=1" >> $GITHUB_ENV | |
| - name: Enable ZIO-specific modules # zio-json requires JDK 17+ | |
| if: matrix.java == '21' | |
| run: echo "WITH_ZIO=1" >> $GITHUB_ENV | |
| - name: Compile | |
| run: sbt $SBT_JAVA_OPTS -v "compileScoped ${{ matrix.scala-version }} ${{ matrix.target-platform }}" | |
| - name: Compile core & server-core with next Scala 3 | |
| if: matrix.scala-version == '3' && matrix.target-platform == 'JVM' && matrix.java == '21' | |
| env: | |
| SCALA_3_NEXT: "3.8.3" | |
| run: | | |
| sbt $SBT_JAVA_OPTS -v \ | |
| "set LocalProject(\"core3\") / scalaVersion := \"$SCALA_3_NEXT\"" \ | |
| "set LocalProject(\"serverCore3\") / scalaVersion := \"$SCALA_3_NEXT\"" \ | |
| "set LocalProject(\"coreJS3\") / scalaVersion := \"$SCALA_3_NEXT\"" \ | |
| "set LocalProject(\"serverCoreJS3\") / scalaVersion := \"$SCALA_3_NEXT\"" \ | |
| core3/Test/compile serverCore3/Test/compile \ | |
| coreJS3/Test/compile serverCoreJS3/Test/compile | |
| - name: Compile documentation | |
| if: matrix.target-platform == 'JVM' && matrix.java == '21' | |
| run: sbt $SBT_JAVA_OPTS -v compileDocumentation | |
| - name: Verify that examples compile using Scala CLI | |
| if: matrix.target-platform == 'JVM' && matrix.java == '21' && matrix.scala-version == '3' | |
| run: sbt $SBT_JAVA_OPTS -v "project examples3" verifyExamplesCompileUsingScalaCli | |
| - name: Test | |
| if: matrix.target-platform != 'JS' | |
| uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v3, specifically v4.0.0 | |
| with: | |
| # this step runs every server-backend suite; on a slower runner the total wall-clock approaches 10 min and | |
| # flakily trips the timeout, with both attempts then timing out, so allow more room | |
| timeout_minutes: 15 | |
| max_attempts: 2 | |
| # the netty server interpreter tests include some which run a large number of requests, to detect potential leaks | |
| # storing the output to verify it in the next step | |
| command: | | |
| # watchdog: the test run sometimes hangs silently (a stuck test or a wedged shutdown); when output.log | |
| # hasn't been written to for >240s, capture thread dumps from all JVMs (into thread-dumps.log, uploaded | |
| # as an artifact below) so the hang can be diagnosed | |
| touch output.log | |
| ( | |
| while true; do | |
| sleep 30 | |
| if [ $(( $(date +%s) - $(stat -c %Y output.log) )) -gt 240 ]; then | |
| { | |
| echo "=== $(date -u '+%Y-%m-%d %H:%M:%S') build silent for >240s, dumping threads ===" | |
| for pid in $(jps -q); do | |
| echo "--- jcmd $pid Thread.print ---" | |
| jcmd "$pid" Thread.print || true | |
| done | |
| } >> thread-dumps.log 2>&1 | |
| fi | |
| done | |
| ) & | |
| WATCHDOG_PID=$! | |
| # reStop the forked client test server while the JVM is healthy; otherwise sbt-revolver's | |
| # shutdown hook races on JVM exit (IllegalStateException: Shutdown in progress) and can flake the build | |
| sbt $SBT_JAVA_OPTS -v "testScoped ${{ matrix.scala-version }} ${{ matrix.target-platform }}" "clientTestServer/reStop" 2>&1 | tee output.log | |
| SBT_EXIT_CODE=${PIPESTATUS[0]} | |
| kill $WATCHDOG_PID 2>/dev/null || true | |
| exit $SBT_EXIT_CODE | |
| - name: Upload thread dumps (if hang occurred) | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: 'thread-dumps-${{ matrix.scala-version }}-${{ matrix.target-platform }}-${{ matrix.java }}' | |
| path: thread-dumps.log | |
| if-no-files-found: ignore | |
| - name: Check for reported leaks | |
| if: matrix.target-platform != 'JS' | |
| run: | | |
| if grep -q "LEAK" output.log; then | |
| echo "Leak detected!" | |
| exit 1 | |
| fi | |
| - name: Test OpenAPI codegen | |
| if: matrix.target-platform == 'JVM' && (matrix.scala-version == '2.12' || matrix.scala-version == '3') | |
| run: sbt $SBT_JAVA_OPTS -v $(sed 's/\./_/' <<<"openapiCodegenSbt${{ matrix.scala-version }}/scripted") | |
| # The finatra tests take a really long time (1/3 of the build duration); hence, they are disabled and need to be run separately | |
| #- name: Test finatra | |
| # if: matrix.target-platform != 'JS' | |
| # run: sbt $SBT_JAVA_OPTS -v testFinatra | |
| # Temporarily call JS tests for each subproject explicitly as a workaround until | |
| # https://github.com/scala-js/scala-js/issues/4317 has a solution | |
| - name: Test | |
| if: matrix.target-platform == 'JS' && matrix.scala-version == '2.12' | |
| run: sbt $SBT_JAVA_OPTS catsJS2_12/test circeJsonJS2_12/test clientCoreJS2_12/test clientTestsJS2_12/test coreJS2_12/test enumeratumJS2_12/test jsoniterScalaJS2_12/test newtypeJS2_12/test openapiDocsJS2_12/test playJsonJS2_12/test redocJS2_12/test serverCoreJS2_12/test sttpClientJS2_12/test testingJS2_12/test testsJS2_12/test uPickleJsonJS2_12/test zioJsonJS2_12/test clientTestServer/reStop | |
| - name: Test | |
| if: matrix.target-platform == 'JS' && matrix.scala-version == '2.13' | |
| run: sbt $SBT_JAVA_OPTS catsJS/test circeJsonJS/test clientCoreJS/test clientTestsJS/test coreJS/test enumeratumJS/test jsoniterScalaJS/test newtypeJS/test openapiDocsJS/test playJsonJS/test redocJS/test serverCoreJS/test sttpClientJS/test testingJS/test testsJS/test uPickleJsonJS/test zioJsonJS/test clientTestServer/reStop | |
| - name: Test | |
| if: matrix.target-platform == 'JS' && matrix.scala-version == '3' | |
| run: sbt $SBT_JAVA_OPTS catsJS3/test circeJsonJS3/test clientCoreJS3/test clientTestsJS3/test coreJS3/test jsoniterScalaJS3/test openapiDocsJS3/test redocJS3/test serverCoreJS3/test sttpClientJS3/test testingJS3/test testsJS3/test uPickleJsonJS3/test zioJsonJS3/test clientTestServer/reStop | |
| - uses: actions/upload-artifact@v7 # upload test results | |
| if: success() || failure() # run this step even if previous step failed | |
| with: | |
| name: 'tests-results-${{ matrix.scala-version }}-${{ matrix.target-platform }}-${{ matrix.java }}' | |
| path: '**/test-reports/TEST*.xml' | |
| - name: Prepare release notes | |
| if: github.ref == 'refs/heads/master' # this should not run on PR builds | |
| uses: release-drafter/release-drafter@4d75298e00d9e34c483e5ff8c68d0ea1c1940c1e # v6, specifically v7.5.1 | |
| with: | |
| config-name: release-drafter.yml | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # identify binary incompatibilities (check build.sbt for details) | |
| mima: | |
| uses: softwaremill/github-actions-workflows/.github/workflows/mima.yml@main | |
| with: | |
| java-version: '21' | |
| java-opts: '-Xms4g -Xmx4g' # SBT_JAVA_OPTS env parameter adapted for JVM | |
| publish: | |
| name: Publish release | |
| needs: [ci] | |
| if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v')) | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| java: [ "11", "21" ] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - uses: sbt/setup-sbt@66fb4376e81982c7d92a4074170846fff88e2e30 # v1, specifically v1.5.0 | |
| - name: Set up JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: ${{ matrix.java }} | |
| cache: 'sbt' | |
| - name: Install libidn2-dev libcurl3-dev | |
| if: matrix.java == '11' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install libidn2-dev libcurl3-dev | |
| - name: Enable Native-specific modules | |
| if: matrix.java == '11' | |
| run: echo "STTP_NATIVE=1" >> $GITHUB_ENV | |
| - name: Enable Loom and ZIO-specific modules # zio-json requires JDK 17+ | |
| if: matrix.java == '21' | |
| run: | | |
| echo "ONLY_LOOM=1" >> $GITHUB_ENV | |
| echo "WITH_ZIO=1" >> $GITHUB_ENV | |
| - name: Compile | |
| run: sbt $SBT_JAVA_OPTS compile | |
| - name: Publish artifacts | |
| run: sbt $SBT_JAVA_OPTS ci-release | |
| env: | |
| PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} | |
| PGP_SECRET: ${{ secrets.PGP_SECRET }} | |
| SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} | |
| SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} | |
| - name: Extract version from commit message | |
| if: matrix.java == '11' | |
| run: | | |
| version=${GITHUB_REF/refs\/tags\/v/} | |
| echo "VERSION=$version" >> $GITHUB_ENV | |
| env: | |
| COMMIT_MSG: ${{ github.event.head_commit.message }} | |
| - name: Publish release notes | |
| if: matrix.java == '11' | |
| uses: release-drafter/release-drafter@4d75298e00d9e34c483e5ff8c68d0ea1c1940c1e # v6, specifically v7.5.1 | |
| with: | |
| config-name: release-drafter.yml | |
| publish: true | |
| name: "v${{ env.VERSION }}" | |
| tag: "v${{ env.VERSION }}" | |
| version: "v${{ env.VERSION }}" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| label: | |
| # only for PRs by softwaremill-ci | |
| if: github.event.pull_request.user.login == 'softwaremill-ci' | |
| uses: softwaremill/github-actions-workflows/.github/workflows/label.yml@main | |
| secrets: inherit | |
| auto-merge-github-actions: | |
| # only for PRs by softwaremill-ci | |
| if: github.event.pull_request.user.login == 'softwaremill-ci' | |
| needs: [ ci, mima, label ] | |
| uses: softwaremill/github-actions-workflows/.github/workflows/auto-merge.yml@main | |
| secrets: inherit | |
| auto-merge-dependabot: | |
| # only for PRs by dependabot[bot] | |
| if: github.event.pull_request.user.login == 'dependabot[bot]' | |
| needs: [ ci, mima ] | |
| uses: softwaremill/github-actions-workflows/.github/workflows/auto-merge.yml@main | |
| secrets: | |
| github-token: ${{ secrets.SOFTWAREMILL_CI_PR_TOKEN }} |