Repository navigation
THRIFT-6400: Package the voted compiler in the .NET tool #5098
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: "Build" | |
| on: | |
| push: | |
| branches: ["*"] | |
| pull_request: | |
| branches: ["*"] | |
| env: | |
| BUILD_DEPS: automake bison flex git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config | |
| CONFIG_ARGS_FOR_LIBS: > | |
| --disable-debug | |
| --disable-dependency-tracking | |
| --without-cpp | |
| --without-c_glib | |
| --without-java | |
| --without-kotlin | |
| --without-python | |
| --without-py3 | |
| --without-ruby | |
| --without-haxe | |
| --without-netstd | |
| --without-perl | |
| --without-php | |
| --without-php_extension | |
| --without-dart | |
| --without-erlang | |
| --without-go | |
| --without-d | |
| --without-nodejs | |
| --without-nodets | |
| --without-lua | |
| --without-rs | |
| permissions: | |
| contents: read | |
| jobs: | |
| # The Windows compiler build lives in cmake.yml. This workflow drives the | |
| # autotools build, which has no native Windows toolchain. | |
| compiler: | |
| strategy: | |
| matrix: | |
| os: | |
| - ubuntu-22.04 | |
| - ubuntu-24.04 | |
| fail-fast: false | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends g++ $BUILD_DEPS | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: ./configure --disable-debug --disable-libs | |
| - name: Run make | |
| run: make -j$(nproc) | |
| - name: Run install | |
| run: make install | |
| - name: Run thrift version | |
| run: /usr/local/bin/thrift -version | |
| - name: Run thrift audit tests | |
| run: make -C test/audit check | |
| - name: Test Delphi UUIDv8 GUID determinism | |
| run: | | |
| # Run the Delphi generator twice on the same input and verify identical output. | |
| # Tests: cross-platform determinism, service inheritance, struct field-order. | |
| THRIFT=/usr/local/bin/thrift | |
| INPUT=test/delphi/UuidV8Test.thrift | |
| mkdir -p /tmp/delphi-guid-run1 /tmp/delphi-guid-run2 | |
| $THRIFT --gen delphi --out /tmp/delphi-guid-run1 $INPUT | |
| $THRIFT --gen delphi --out /tmp/delphi-guid-run2 $INPUT | |
| diff -r /tmp/delphi-guid-run1 /tmp/delphi-guid-run2 | |
| # Also verify GUIDs are non-empty (grep for the GUID attribute pattern) | |
| grep -qP "^\s+\['\{[0-9A-F]{8}-[0-9A-F]{4}-8[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}\}'\]" \ | |
| /tmp/delphi-guid-run1/UuidV8Test.pas \ | |
| && echo "UUIDv8 GUIDs found in output" \ | |
| || { echo "ERROR: No UUIDv8 GUIDs found in Delphi output"; exit 1; } | |
| # Verify that Point and PointReversed have DIFFERENT GUIDs (field-order sensitivity) | |
| POINT_GUID=$(grep -A1 "IPoint = interface" /tmp/delphi-guid-run1/UuidV8Test.pas | grep "^\s*\['" | tr -d ' ') | |
| POINTREV_GUID=$(grep -A1 "IPointReversed = interface" /tmp/delphi-guid-run1/UuidV8Test.pas | grep "^\s*\['" | tr -d ' ') | |
| [ "$POINT_GUID" != "$POINTREV_GUID" ] \ | |
| && echo "Field-order sensitivity OK (Point vs PointReversed GUIDs differ)" \ | |
| || { echo "ERROR: Point and PointReversed have the same GUID — field order not hashed"; exit 1; } | |
| # Verify that BaseService and ExtendedService have DIFFERENT GUIDs (parent hash included) | |
| BASE_GUID=$(grep -A1 "Iface = interface$" /tmp/delphi-guid-run1/UuidV8Test.pas | grep "^\s*\['" | head -1 | tr -d ' ') | |
| EXT_GUID=$(grep -A1 "Iface = interface(.*Base" /tmp/delphi-guid-run1/UuidV8Test.pas | grep "^\s*\['" | head -1 | tr -d ' ') | |
| [ "$BASE_GUID" != "$EXT_GUID" ] \ | |
| && echo "Parent-hash inclusion OK (BaseService vs ExtendedService GUIDs differ)" \ | |
| || { echo "ERROR: BaseService and ExtendedService have the same GUID — parent not hashed"; exit 1; } | |
| echo "All Delphi UUIDv8 GUID determinism tests passed." | |
| # For the jobs that run on ubuntu-24.04. | |
| - name: Archive built thrift compiler | |
| if: matrix.os == 'ubuntu-24.04' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp/thrift | |
| retention-days: 3 | |
| # For lib-c_glib, which runs on ubuntu-22.04. The ubuntu-24.04 build | |
| # does not start there: it needs glibc 2.38, and ubuntu-22.04 has 2.35. | |
| - name: Archive built thrift compiler (ubuntu-22.04) | |
| if: matrix.os == 'ubuntu-22.04' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: thrift-compiler-ubuntu-22.04 | |
| path: compiler/cpp/thrift | |
| retention-days: 3 | |
| compiler-macos: | |
| strategy: | |
| matrix: | |
| os: &macos_versions [macos-15-intel, macos-14, macos-15, macos-26] | |
| fail-fast: false | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Install dependencies | |
| run: | | |
| brew install automake bison flex boost libevent openssl libtool pkg-config | |
| echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: ./configure --disable-debug --disable-tests --disable-libs | |
| - name: Run make | |
| run: make -j$(sysctl -n hw.ncpu) | |
| - name: Run install | |
| run: sudo make install | |
| - name: Run thrift version | |
| run: /usr/local/bin/thrift -version | |
| - name: Archive built thrift compiler (macOS) | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: thrift-compiler-${{ matrix.os }} | |
| path: compiler/cpp/thrift | |
| retention-days: 3 | |
| lib-php: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| php-version: [8.2, 8.3, 8.4, 8.5] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up PHP | |
| uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 | |
| with: | |
| php-version: ${{ matrix.php-version }} | |
| extensions: intl, xml, curl | |
| ini-values: "error_reporting=E_ALL" | |
| - name: Install Dependencies | |
| run: | | |
| rm -f ~/.composer/auth.json ~/.config/composer/auth.json | |
| composer install | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-php/with-php/' | sed 's/without-php_extension/with-php_extension/' ) | |
| # "make install" copies only the files lib/php/Makefile.am lists. | |
| - name: Check the PHP install lists | |
| run: make -C lib/php check-install-lists | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Build Thrift Classes | |
| run: | | |
| mkdir -p ./lib/php/test/Resources/packages/php | |
| mkdir -p ./lib/php/test/Resources/packages/phpi | |
| mkdir -p ./lib/php/test/Resources/packages/phpv | |
| mkdir -p ./lib/php/test/Resources/packages/phpvo | |
| mkdir -p ./lib/php/test/Resources/packages/phpjs | |
| mkdir -p ./lib/php/test/Resources/packages/phpcm | |
| mkdir -p ./lib/php/test/Resources/packages/phprec | |
| mkdir -p ./lib/php/test/Resources/packages/phprecoop | |
| mkdir -p ./lib/php/test/Resources/packages/phpreci | |
| compiler/cpp/thrift --gen php:nsglobal="Basic" -r --out ./lib/php/test/Resources/packages/php lib/php/test/Resources/ThriftTest.thrift | |
| compiler/cpp/thrift --gen php:inlined,nsglobal="BasicInline" -r --out ./lib/php/test/Resources/packages/phpi lib/php/test/Resources/ThriftTest.thrift | |
| compiler/cpp/thrift --gen php:validate,nsglobal="Validate" -r --out ./lib/php/test/Resources/packages/phpv lib/php/test/Resources/ThriftTest.thrift | |
| compiler/cpp/thrift --gen php:validate,oop,nsglobal="ValidateOop" -r --out ./lib/php/test/Resources/packages/phpvo lib/php/test/Resources/ThriftTest.thrift | |
| compiler/cpp/thrift --gen php:json,nsglobal="Json" -r --out ./lib/php/test/Resources/packages/phpjs lib/php/test/Resources/ThriftTest.thrift | |
| compiler/cpp/thrift --gen php:classmap,server,rest,nsglobal="Classmap" -r --out ./lib/php/test/Resources/packages/phpcm lib/php/test/Resources/ThriftTest.thrift | |
| compiler/cpp/thrift --gen php:nsglobal="PhpRec" -r --out ./lib/php/test/Resources/packages/phprec lib/php/test/Resources/RecursionDepth.thrift | |
| compiler/cpp/thrift --gen php:oop,nsglobal="PhpRecOop" -r --out ./lib/php/test/Resources/packages/phprecoop lib/php/test/Resources/RecursionDepth.thrift | |
| compiler/cpp/thrift --gen php:inlined,nsglobal="PhpRecInline" -r --out ./lib/php/test/Resources/packages/phpreci lib/php/test/Resources/RecursionDepth.thrift | |
| - name: Run Tests | |
| run: vendor/bin/phpunit -c lib/php/phpunit.xml | |
| - name: Build PHP cross test extension | |
| if: matrix.php-version == '8.3' | |
| run: make -C lib/php src/ext/thrift_protocol/modules/thrift_protocol.so | |
| - name: Run make precross for php test | |
| if: matrix.php-version == '8.3' | |
| run: make -C test/php precross | |
| - name: Upload php precross artifacts | |
| if: matrix.php-version == '8.3' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: php-precross | |
| if-no-files-found: error | |
| path: | | |
| lib/php/src/ext/thrift_protocol/modules/thrift_protocol.so | |
| test/php/gen-php/ | |
| test/php/gen-php-classmap/ | |
| retention-days: 3 | |
| lib-go: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| go: | |
| - '1.26' | |
| - '1.27' | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 | |
| with: | |
| go-version: ${{ matrix.go }} | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-go/with-go/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for go | |
| run: make -C lib/go | |
| - name: Run make check for lib/go | |
| run: make -C lib/go check | |
| - name: Run make check for test/go | |
| run: make -C test/go check | |
| - name: Run make precross for go test | |
| run: make -C test/go precross | |
| - name: Upload go precross artifacts | |
| if: matrix.go == '1.27' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: go-precross | |
| if-no-files-found: error | |
| path: | | |
| test/go/bin/* | |
| retention-days: 3 | |
| lib-java-kotlin: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| env: | |
| GRADLE_VERSION: "8.4" | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 | |
| with: | |
| distribution: temurin | |
| java-version: 17 | |
| cache: "gradle" | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| sudo apt-get install -y wget unzip ant maven | |
| - name: Setup gradle | |
| run: | | |
| wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip | |
| (echo "3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) | |
| unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip | |
| sudo mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle | |
| sudo ln -s /usr/local/gradle/bin/gradle /usr/local/bin | |
| gradle --version | |
| - name: Run spotlessCheck for Java | |
| run: | | |
| cd lib/java | |
| gradle spotlessCheck | |
| - name: Run ktfmtCheck for Kotlin | |
| run: | | |
| cd lib/kotlin | |
| gradle ktfmtCheck | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-java/with-java/' | sed 's/without-kotlin/with-kotlin/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for java | |
| run: make -C lib/java | |
| # this will invoke publishToMavenLocal and install locally | |
| - name: Run make install for java | |
| run: make -C lib/java install | |
| - name: Upload java libthrift artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: libthrift | |
| if-no-files-found: error | |
| path: ~/.m2/repository/org/apache/thrift | |
| - name: Run make check for java | |
| run: make -C lib/java check | |
| - name: Run make precross for java | |
| run: make -C lib/java precross | |
| - name: Upload java precross artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: java-precross | |
| if-no-files-found: error | |
| path: | | |
| lib/java/build/functionalTestJar/ | |
| lib/java/build/runnonblockingclient | |
| lib/java/build/runclient | |
| lib/java/build/runnonblockingserver | |
| lib/java/build/runserver | |
| lib/java/build/runservletserver | |
| retention-days: 3 | |
| - name: Run make for kotlin | |
| run: make -C lib/kotlin | |
| - name: Run make check for kotlin | |
| run: make -C lib/kotlin check | |
| - name: Run make precross for kotlin | |
| run: make -C lib/kotlin precross | |
| - name: Upload kotlin precross artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: kotlin-precross | |
| if-no-files-found: error | |
| path: | | |
| lib/kotlin/cross-test-client/build/install/TestClient/ | |
| lib/kotlin/cross-test-server/build/install/TestServer/ | |
| retention-days: 3 | |
| lib-javame: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 | |
| with: | |
| distribution: temurin | |
| java-version: 17 | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| # lib/javame has no build harness -- no Makefile.am, no configure.ac | |
| # entry -- so it is compiled here directly, together with the code its | |
| # tests generate. THttpClient.java is left out: it needs the | |
| # javax.microedition API, which no JDK provides and which is not | |
| # available under a license an ASF build can use. | |
| - name: Compile lib/javame and its tests | |
| working-directory: lib/javame | |
| run: | | |
| ../../compiler/cpp/thrift --gen javame -o . test/RecursionDepth.thrift | |
| javac -d "$RUNNER_TEMP/javame" \ | |
| $(find src -name '*.java' ! -name 'THttpClient.java') \ | |
| gen-javame/*.java test/*.java | |
| # Every test/Test*.java has a main that exits non-zero on a failed check. | |
| - name: Run the lib/javame tests | |
| working-directory: lib/javame | |
| run: | | |
| for test in test/Test*.java; do | |
| java -cp "$RUNNER_TEMP/javame" "$(basename "$test" .java)" | |
| done | |
| lib-netstd: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| defaults: | |
| run: | |
| shell: bash # required by net install script | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| sudo apt-get install -y --no-install-recommends curl openssl ca-certificates | |
| - name: Set up .NET SDK | |
| uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 | |
| with: | |
| dotnet-version: "10.0.x" | |
| - name: Show .NET SDKs | |
| run: dotnet --list-sdks | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for netstd | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-netstd/with-netstd/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for netstd | |
| run: make -C lib/netstd | |
| - name: Run make install for netstd | |
| run: sudo make -C lib/netstd install | |
| - name: Run make check for netstd | |
| run: make -C lib/netstd check | |
| - name: Run make check for test/netstd | |
| run: make -C test/netstd check | |
| - name: Run make precross for test/netstd | |
| run: make -C test/netstd precross | |
| - name: Upload netstd precross artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: netstd-precross | |
| if-no-files-found: error | |
| path: | | |
| test/netstd/Client/bin/Release/ | |
| test/netstd/Server/bin/Release/ | |
| retention-days: 3 | |
| # Builds the tutorial and runs its client against its server (smoketest.sh) | |
| - name: Run make check for tutorial/netstd | |
| timeout-minutes: 15 | |
| run: make -C tutorial/netstd check | |
| lib-netstd-codegen: | |
| needs: [compiler] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| dotnet-version: [8, 9, 10] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up .NET SDK ${{ matrix.dotnet-version }} | |
| uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 | |
| with: | |
| dotnet-version: "${{ matrix.dotnet-version }}.0.x" | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| echo "$GITHUB_WORKSPACE/compiler/cpp" >> "$GITHUB_PATH" | |
| compiler/cpp/thrift -version | |
| - name: Run netstd codegen tests | |
| shell: pwsh | |
| run: | | |
| lib/netstd/Tests/codegen/run-NetStd-Codegen-Tests.ps1 ` | |
| -TargetVersions @("net${{ matrix.dotnet-version }}") | |
| lib-haxe-codegen: | |
| needs: [compiler] | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Set up Haxe | |
| run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y haxe | |
| haxelib setup ~/haxelib | |
| haxe --version | |
| - name: Install Haxe dependencies | |
| run: | | |
| haxelib install uuid --quiet | |
| haxelib install crypto --quiet | |
| haxelib dev thrift ${{ github.workspace }}/lib/haxe | |
| haxelib path thrift | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| echo "$GITHUB_WORKSPACE/compiler/cpp" >> "$GITHUB_PATH" | |
| compiler/cpp/thrift -version | |
| - name: Run Haxe codegen tests | |
| shell: pwsh | |
| run: | | |
| lib/haxe/codegen/run-Haxe-Codegen-Tests.ps1 | |
| # The autotools `make check` path for the Haxe library is disabled | |
| # (--without-haxe) because it drives the cpp/php hxml targets; run the | |
| # library unit tests directly on the lightweight neko target instead, | |
| # reusing the toolchain (Haxe+neko, uuid, thrift compiler) set up above. | |
| # The harness throws and Sys.exit(1)s on a failed assertion, so a failing | |
| # test fails this step. | |
| # | |
| # Only the standalone "Normal" mode (StreamTest + RecursionLimitTest) is | |
| # run. Multiplex needs a client+server; "constants" (ConstantsTest) is | |
| # omitted for now because it constructs a TMemoryStream, which currently | |
| # fails on the neko target -- run it here once that is fixed. | |
| - name: Run Haxe library unit tests (neko) | |
| run: | | |
| cd lib/haxe/test | |
| rm -rf gen-haxe bin | |
| thrift --gen haxe -r ../../../test/ThriftTest.thrift | |
| thrift --gen haxe -r ../../../contrib/async-test/aggr.thrift | |
| thrift --gen haxe -r ../../../lib/rb/benchmark/Benchmark.thrift | |
| thrift --gen haxe -r ../../../test/Recursive.thrift | |
| thrift --gen haxe -r ../../../test/ConstantsDemo.thrift | |
| haxe --cwd . neko.hxml | |
| neko bin/Test.n | |
| lib-st: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| env: | |
| # The Pharo release line to test against. "stable" is deliberately not | |
| # used: it will move to Pharo 14 one day and turn this job red for | |
| # reasons that have nothing to do with Thrift. Verified against the | |
| # 13.1 snapshot this line currently serves. | |
| PHARO_RELEASE: "130" | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| # lib/st cannot be built the way the other bindings are: it is not in | |
| # configure.ac and not in a SUBDIRS, so there is no "make check" to hang | |
| # this on. It is a Squeak/Pharo file-in, and the tests are SUnit suites. | |
| - name: Install Pharo | |
| timeout-minutes: 10 | |
| run: | | |
| mkdir -p "$RUNNER_TEMP/pharo" | |
| cd "$RUNNER_TEMP/pharo" | |
| curl -sSL "https://get.pharo.org/64/${PHARO_RELEASE}+vm" | bash | |
| ./pharo Pharo.image eval "Smalltalk version" | |
| # The script does the asserting: Pharo prints a failed test and still | |
| # exits 0, so the run and pass counts are the only signal there is. | |
| - name: Run the lib/st tests | |
| run: | | |
| ./lib/st/test/run-tests.sh \ | |
| --thrift "$PWD/compiler/cpp/thrift" \ | |
| --pharo "$RUNNER_TEMP/pharo" | |
| lib-rust: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| env: | |
| TOOLCHAIN_VERSION: 1.85.1 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends curl $BUILD_DEPS | |
| - name: Setup cargo | |
| run: | | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| rustup update | |
| rustup install $TOOLCHAIN_VERSION | |
| rustup default $TOOLCHAIN_VERSION | |
| rustup --version | |
| cargo --version | |
| rustc --version | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-rs/with-rs/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for rust | |
| run: make -C lib/rs | |
| - name: Run make checks for rust | |
| run: | | |
| make -C lib/rs check | |
| make -C lib/rs check-rustls | |
| - name: Run make test for rust | |
| run: make -C lib/rs/test check | |
| - name: Run make precross for test rust | |
| run: make -C test/rs precross | |
| - name: Upload rust precross artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: rs-precross | |
| if-no-files-found: error | |
| path: | | |
| test/rs/bin/test_server | |
| test/rs/bin/test_client | |
| retention-days: 3 | |
| - name: Run make test_recursive for rust | |
| run: make -C lib/rs/test_recursive check | |
| lib-python: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| strategy: | |
| matrix: | |
| python-version: &python_versions ["3.10", "3.11", "3.12", "3.13", "3.14"] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| sudo apt-get install -y --no-install-recommends curl openssl ca-certificates | |
| - name: Set up Python | |
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Python setup | |
| run: | | |
| python -m pip install --upgrade pip setuptools wheel flake8 "tornado>=6.3.0" "twisted>=24.3.0" "zope.interface>=6.1" | |
| python --version | |
| pip --version | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-py3/with-py3/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for python | |
| run: make -C lib/py | |
| - name: Run make install for python | |
| run: sudo make -C lib/py install | |
| - name: Run make check for python libs | |
| run: make -C lib/py check | |
| - name: Run make check for python code | |
| run: make -C test/py check | |
| - name: Run make precross for python | |
| if: matrix.python-version == '3.12' | |
| run: make -C test/py precross | |
| - name: Upload python precross artifacts | |
| if: matrix.python-version == '3.12' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: py-precross | |
| if-no-files-found: error | |
| path: | | |
| lib/py/build/lib.* | |
| test/py/gen-py | |
| test/py/TestClient.py | |
| test/py/TestServer.py | |
| test/py/util.py | |
| retention-days: 3 | |
| lib-python-macos: | |
| needs: compiler-macos | |
| strategy: | |
| matrix: | |
| os: *macos_versions | |
| python-version: *python_versions | |
| fail-fast: false | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Install dependencies | |
| run: | | |
| brew install automake bison flex boost libevent openssl libtool pkg-config | |
| echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH | |
| - name: Set up Python | |
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Python setup | |
| run: | | |
| python -m pip install --upgrade pip setuptools wheel flake8 "tornado>=6.3.0" "twisted>=24.3.0" "zope.interface>=6.1" | |
| python --version | |
| pip --version | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-py3/with-py3/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler-${{ matrix.os }} | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for python | |
| run: make -C lib/py | |
| - name: Run make install for python | |
| run: | | |
| sudo make -C lib/py install PY_PREFIX="$(python -c 'import sys; print(sys.prefix)')" | |
| - name: Run make for python libs | |
| run: make -C lib/py | |
| - name: Run make check for python libs | |
| run: make -C lib/py check | |
| - name: Run make check for python code | |
| run: make -C test/py check | |
| lib-nodejs: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed -E 's/without-node([tj])s/with-node\1s/g') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run js tests | |
| run: make -C lib/nodejs check | |
| - name: Run ts tests | |
| run: make -C lib/nodets check | |
| - name: Run js precross | |
| run: make -C lib/nodejs precross | |
| - name: Run ts precross | |
| run: make -C lib/nodets precross | |
| - name: Upload nodejs precross artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: nodejs-precross | |
| if-no-files-found: error | |
| include-hidden-files: true | |
| path: | | |
| lib/nodejs/test/gen-nodejs | |
| lib/nodets/test/gen-nodejs | |
| lib/nodets/test-compiled | |
| retention-days: 3 | |
| lib-js: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| env: | |
| GRADLE_VERSION: "8.4" | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 | |
| with: | |
| distribution: temurin | |
| java-version: 17 | |
| cache: "gradle" | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| # ant fetches the browser test libraries, and lib/Makefile.am builds | |
| # lib/js inside the WITH_JAVA block for exactly that reason. | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| sudo apt-get install -y wget unzip ant | |
| - name: Setup gradle | |
| run: | | |
| wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip | |
| (echo "3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) | |
| unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip | |
| sudo mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle | |
| sudo ln -s /usr/local/gradle/bin/gradle /usr/local/bin | |
| gradle --version | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for js | |
| run: | | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-java/with-java/')) | |
| echo "$summary" | |
| # lib/js has no --with-js of its own; it is built inside the WITH_JAVA | |
| # block, and its check-local is guarded by HAVE_NPM. Insist on both, | |
| # so that a missing prerequisite cannot turn this job into a green | |
| # run that tests nothing. | |
| echo "$summary" | grep -qE "Building Java Library [.]+ : yes" | |
| command -v npm | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| # lib/js/test/build.xml stops unless lib/java/build/libs holds two jars: | |
| # the library, and its test classes, which gradle builds only as testJar. | |
| - name: Build the java library and its test jar | |
| run: | | |
| make -C lib/java | |
| gradle -p lib/java testJar -Prelease=true --console=plain | |
| # Generates the test code, starts the test servers and drives the QUnit | |
| # pages in headless Chrome. The ant half of the check skips its own | |
| # browser test when phantomjs is missing, so the grep is the guard: | |
| # grunt reports the QUnit totals, and a run that executed no test at | |
| # all would otherwise still exit 0. | |
| - name: Run make check for js | |
| shell: bash | |
| run: | | |
| set -o pipefail | |
| make -C lib/js check 2>&1 | tee /tmp/lib-js-check.log | |
| grep -aqE "[0-9]+ tests completed" /tmp/lib-js-check.log | |
| - name: Upload log files from a failed run | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: failure() | |
| with: | |
| name: lib-js-check-log | |
| path: /tmp/lib-js-check.log | |
| retention-days: 3 | |
| lib-ts: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| # ant fetches the browser test libraries, and lib/Makefile.am builds | |
| # lib/ts inside the WITH_JAVA block for exactly that reason. | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS ant | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for ts | |
| run: | | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-java/with-java/')) | |
| echo "$summary" | |
| # lib/ts has no --with-ts of its own; it is built inside the WITH_JAVA | |
| # block, and its check-local is guarded by HAVE_NPM. Insist on both, | |
| # so that a missing prerequisite cannot turn this job into a green | |
| # run that tests nothing. | |
| echo "$summary" | grep -qE "Building Java Library [.]+ : yes" | |
| command -v npm | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| # Generates the test code, compiles test/*.ts, bundles it and drives the | |
| # QUnit pages in headless Chrome. The grep is the guard: grunt reports | |
| # the QUnit totals, and a run that executed no test at all would | |
| # otherwise still exit 0. | |
| - name: Run make check for ts | |
| shell: bash | |
| run: | | |
| set -o pipefail | |
| make -C lib/ts check 2>&1 | tee /tmp/lib-ts-check.log | |
| grep -qE "[0-9]+ tests completed" /tmp/lib-ts-check.log | |
| - name: Upload log files from a failed run | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: failure() | |
| with: | |
| name: lib-ts-check-log | |
| path: /tmp/lib-ts-check.log | |
| retention-days: 3 | |
| lib-dart: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| # The floor lib/dart/pubspec.yaml declares, and the version | |
| # build/docker/ubuntu-*/Dockerfile pins. Keep LANGUAGES.md in step. | |
| sdk: ["3.2.0", "3.13.3"] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| # Has to run before configure, which looks for dart on PATH. | |
| - name: Set up Dart SDK | |
| uses: dart-lang/setup-dart@6afc89df92d6eb3834022f73cd65adc8cdfcb92d # v1.8.1 | |
| with: | |
| sdk: ${{ matrix.sdk }} | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for dart | |
| run: | | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-dart/with-dart/')) | |
| echo "$summary" | |
| # configure disables a binding it cannot find rather than failing, and | |
| # every step below would then pass without running a single test. A | |
| # green job that tests nothing is what this one exists to end, so | |
| # insist that Dart was actually found. | |
| echo "$summary" | grep -qE "Building Dart Library [.]+ : yes" | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for dart | |
| run: make -C lib/dart | |
| # dart pub get, then dart test over lib/dart/test. | |
| - name: Run make check for dart | |
| run: make -C lib/dart check | |
| # Generates the cross-test client's stubs and runs the recursion-depth | |
| # regression test from THRIFT-6056. | |
| - name: Run make check for test/dart | |
| run: make -C test/dart check | |
| lib-cpp: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends g++ $BUILD_DEPS locales | |
| sudo locale-gen en_US.UTF-8 | |
| sudo locale-gen de_DE.UTF-8 | |
| sudo update-locale | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed -E 's/without-cpp/with-cpp/g') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for cpp | |
| run: make -j$(nproc) -C lib/cpp | |
| - name: Run make check for lib/cpp | |
| run: make -j$(nproc) -C lib/cpp check | |
| - name: Run make check for test/cpp | |
| run: make -j$(nproc) -C test/cpp check | |
| - name: Run make precross for cpp test | |
| run: make -j$(nproc) -C test/cpp precross | |
| - name: Upload cpp precross artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: cpp-precross | |
| if-no-files-found: error | |
| include-hidden-files: true | |
| path: | | |
| test/cpp/TestClient | |
| test/cpp/TestServer | |
| test/cpp/.libs/TestClient | |
| test/cpp/.libs/TestServer | |
| lib/cpp/.libs/*.so | |
| retention-days: 3 | |
| - name: Upload log files from failed test runs | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: failure() | |
| with: | |
| name: lib-cpp-test-log | |
| path: lib/cpp/test/*.xml | |
| retention-days: 3 | |
| lib-c_glib: | |
| needs: compiler | |
| # Not ubuntu-24.04: with the GLib 2.80 there, testapplicationexception, | |
| # testfdtransport and testthriftfdreadcheck stop on GLib criticals | |
| # (THRIFT-5680). With the GLib 2.72 of ubuntu-22.04 they pass. | |
| runs-on: ubuntu-22.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends g++ $BUILD_DEPS libglib2.0-dev zlib1g-dev | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for c_glib | |
| run: | | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed -e 's/without-c_glib/with-c_glib/' -e 's/without-cpp/with-cpp/')) | |
| echo "$summary" | |
| # configure disables a binding it cannot find rather than failing, and | |
| # the steps below would then pass without running a single test. A | |
| # green job that tests nothing is worse than no job, so insist that | |
| # GLib was actually found. The C++ library is needed as well: the C++ | |
| # interop tests in lib/c_glib/test link it, and configure looks for | |
| # zlib, which the c_glib zlib transport links, only when C++ is | |
| # enabled. | |
| echo "$summary" | grep -qE "Building C [(]GLib[)] Library [.]+ : yes" | |
| echo "$summary" | grep -qE "Building C[+][+] Library [.]+ : yes" | |
| echo "$summary" | grep -qE "Build TZlibTransport [.]+ : yes" | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler-ubuntu-22.04 | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| # Only the two libraries the C++ interop tests link. | |
| - name: Run make for cpp | |
| run: make -j$(nproc) -C lib/cpp libthrift.la libthriftz.la | |
| # Also generates the code lib/c_glib/test compiles, which the check-am | |
| # below does not do by itself. | |
| - name: Run make for c_glib | |
| run: make -j$(nproc) -C lib/c_glib | |
| # testthrifttest links test/c_glib's thrift_test_handler.o. | |
| - name: Run make precross for c_glib test | |
| run: make -j$(nproc) -C test/c_glib precross | |
| # check-am, as plain check also enters lib/c_glib/test/fuzz, whose fuzz | |
| # targets have no main() unless clang builds them. | |
| - name: Run make check for c_glib | |
| run: make -C lib/c_glib/test check-am | |
| lib-d: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| env: | |
| # Keep in sync with build/docker/ubuntu-*/Dockerfile. | |
| D_VERSION: 2.087.0 | |
| DEIMOS_LIBEVENT_REF: v2.0.2+2.0.16 | |
| DEIMOS_OPENSSL_REF: v2.0.0+1.1.0h | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends g++ wget ca-certificates $BUILD_DEPS | |
| - name: Install dmd | |
| run: | | |
| wget -q "http://downloads.dlang.org/releases/2.x/$D_VERSION/dmd_$D_VERSION-0_amd64.deb" | |
| # apt rather than dpkg, so that the deb's libcurl4 dependency is resolved. | |
| sudo apt-get install -y --no-install-recommends "./dmd_$D_VERSION-0_amd64.deb" | |
| rm -f "dmd_$D_VERSION-0_amd64.deb" | |
| dmd --version | |
| # The deimos bindings are D headers for libevent and OpenSSL; the docker | |
| # images install them but this runner does not. lib/d now builds its | |
| # OpenSSL modules against the OpenSSL 3.x ubuntu-24.04 ships -- THRIFT-6185 | |
| # taught it to call SSL_get1_peer_certificate and the ERR_new/ERR_set_* | |
| # family in place of the SSL_get_peer_certificate and ERR_put_error that | |
| # 3.0 removed -- so installing the OpenSSL bindings here makes configure | |
| # report "Building D SSL tests ... yes" and covers the five | |
| # OpenSSL-dependent modules. | |
| - name: Install deimos libevent and OpenSSL bindings | |
| run: | | |
| sudo mkdir -p /usr/include/dmd/druntime/import/deimos /usr/include/dmd/druntime/import/C | |
| git clone -q -b "$DEIMOS_LIBEVENT_REF" https://github.com/D-Programming-Deimos/libevent.git deimos-libevent | |
| sudo mv deimos-libevent/deimos/* /usr/include/dmd/druntime/import/deimos/ | |
| sudo mv deimos-libevent/C/* /usr/include/dmd/druntime/import/C/ | |
| rm -rf deimos-libevent | |
| git clone -q -b "$DEIMOS_OPENSSL_REF" https://github.com/D-Programming-Deimos/openssl.git deimos-openssl | |
| sudo mv deimos-openssl/deimos/* /usr/include/dmd/druntime/import/deimos/ | |
| rm -rf deimos-openssl | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for d | |
| run: | | |
| # \b keeps --without-dart from matching before --without-d does. | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/--without-d\b/--with-d/')) | |
| echo "$summary" | |
| # configure disables a binding it cannot find rather than failing, and | |
| # the steps below would then pass without running a single test. A | |
| # green job that tests nothing is worse than no job, so insist that | |
| # dmd was actually found, and that the OpenSSL modules are in the build | |
| # rather than silently dropped for a missing dependency. | |
| echo "$summary" | grep -qE "Building D Library [.]+ : yes" | |
| echo "$summary" | grep -qE "Building D SSL tests [.]+ : yes" | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for d | |
| run: make -C lib/d | |
| # Builds and runs every module's unit tests in both debug and release | |
| # mode, then the lib/d/test client pool and transport tests. It takes | |
| # under 3 minutes; the limit makes a hung test fail the step instead of | |
| # holding the job until its 60 minute timeout. | |
| - name: Run make check for d | |
| timeout-minutes: 15 | |
| run: make -C lib/d check | |
| lib-ruby: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| continue-on-error: ${{ matrix.ruby-version == 'head' }} | |
| name: lib-ruby (${{ matrix.ruby-version }}) ${{ matrix.skip-build-ext && 'noext' || '' }} | |
| strategy: | |
| matrix: | |
| ruby-version: ["3.0", "3.1", "3.2", "3.3", "3.4", "4.0", "head"] | |
| skip-build-ext: [false] | |
| include: | |
| - ruby-version: "3.0" | |
| skip-build-ext: true | |
| fail-fast: false | |
| env: | |
| SKIP_BUILD_EXT: ${{ matrix.skip-build-ext && '1' || '' }} | |
| BUNDLER_VERSION: ${{ case(matrix.ruby-version == 'head', '0', '2.2.34') }} # Bundler version is managed via setup-ruby action, not Bundler itself | |
| BUNDLE_WITHOUT: ${{ case(matrix.ruby-version == 'head', 'thin_http_server', '') }} # thin pulls in eventmachine, which does not compile on Ruby 4.1+ | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Ruby | |
| uses: ruby/setup-ruby@762794c140bbeda0f1224786aa33b4b46783a6c1 # v1.326.0 | |
| with: | |
| ruby-version: ${{ matrix.ruby-version }} | |
| # Old bundler used the internal constant of Pathname, that was not private due to a typo. | |
| # https://github.com/ruby/rubygems/pull/9529 | |
| bundler: ${{ case(matrix.ruby-version == 'head', 'default', 'Gemfile.lock') }} | |
| bundler-cache: true | |
| working-directory: lib/rb | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure | |
| run: | | |
| ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-ruby/with-ruby/') | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for ruby | |
| run: make -C lib/rb | |
| - name: Run make check for lib/rb | |
| run: make -C lib/rb check | |
| - name: Run make check for test/rb | |
| run: make -C test/rb check | |
| - name: Run make precross for ruby test | |
| run: make -C test/rb precross | |
| - name: Upload ruby precross artifacts | |
| # has to match the version used in cross-test | |
| if: matrix.ruby-version == '4.0' && matrix.skip-build-ext == false | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: rb-precross | |
| if-no-files-found: error | |
| path: | | |
| test/rb/gen-rb/* | |
| lib/rb/ext/*.so | |
| retention-days: 3 | |
| lib-erl: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| # OTP and rebar3 are one axis, not two: rebar3 3.18.0 -- the version | |
| # build/docker/ubuntu-*/Dockerfile installs, next to OTP 25.3.2.9 -- | |
| # does not load on OTP 27 or later, and 3.27.0 does not load on OTP 25. | |
| # OTP 29 is left out because the eunit-only meck 0.9.2 dependency does | |
| # not compile there any more, deprecated 'catch' having become an | |
| # error; add it here once THRIFT-6186 is closed. | |
| include: | |
| - otp-version: "25.3" | |
| rebar3-version: "3.18.0" | |
| - otp-version: "26.2" | |
| rebar3-version: "3.27.0" | |
| - otp-version: "27.3" | |
| rebar3-version: "3.27.0" | |
| - otp-version: "28.5" | |
| rebar3-version: "3.27.0" | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS | |
| # Has to run before configure, which locates erl and erlc on PATH. | |
| - name: Set up Erlang/OTP | |
| uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 # v1.24.1 | |
| with: | |
| otp-version: ${{ matrix.otp-version }} | |
| rebar3-version: ${{ matrix.rebar3-version }} | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for erlang | |
| run: | | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-erlang/with-erlang/')) | |
| echo "$summary" | |
| # configure disables a binding it cannot find rather than failing, and | |
| # the steps below would then pass without running a single test. A | |
| # green job that tests nothing is worse than no job, so insist that | |
| # Erlang was actually found. | |
| echo "$summary" | grep -qE "Building Erlang Library [.]+ : yes" | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for erlang | |
| run: make -C lib/erl | |
| # Generates the test sources with the compiler above, then rebar3 eunit. | |
| - name: Run make check for erlang | |
| run: make -C lib/erl check | |
| lib-lua: | |
| needs: compiler | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| # The floor configure.ac requires, and the version | |
| # build/docker/ubuntu-{jammy,noble}/Dockerfile install. Keep | |
| # LANGUAGES.md in step. | |
| lua-version: ["5.3", "5.4"] | |
| fail-fast: false | |
| env: | |
| # Not LUA_VERSION, which configure sets itself from the interpreter it finds. | |
| MATRIX_LUA_VERSION: ${{ matrix.lua-version }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends $BUILD_DEPS "lua$MATRIX_LUA_VERSION" "liblua$MATRIX_LUA_VERSION-dev" | |
| - name: Run bootstrap | |
| run: ./bootstrap.sh | |
| - name: Run configure for lua | |
| run: | | |
| summary=$(./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed 's/without-lua/with-lua/')) | |
| echo "$summary" | |
| # configure disables a binding it cannot find rather than failing, and | |
| # the steps below would then pass without running a single test. A | |
| # green job that tests nothing is worse than no job, so insist that | |
| # Lua was actually found, and that it is the version this leg is for. | |
| echo "$summary" | grep -qE "Building Lua Library [.]+ : yes" | |
| echo "$summary" | grep -E "Using Lua version" | grep -qF "Lua $MATRIX_LUA_VERSION." | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: thrift-compiler | |
| path: compiler/cpp | |
| - name: Run thrift-compiler | |
| run: | | |
| chmod a+x compiler/cpp/thrift | |
| compiler/cpp/thrift -version | |
| - name: Run make for lua | |
| run: make -C lib/lua | |
| # Generates the types test_recursion_depth.lua needs, then runs the | |
| # scripts in lib/lua/test. Those preload pure-Lua stand-ins for the C | |
| # modules, so it is the cross test below that loads the ones built above. | |
| - name: Run make check for lua | |
| run: make -C lib/lua check | |
| - name: Run make precross for lua | |
| run: make -C test/lua precross | |
| # The Lua client against the Lua server, over each transport and protocol | |
| # test/tests.json lists for Lua. | |
| - name: Run cross test for lua | |
| run: python3 test/test.py --server lua --client lua | |
| - name: Upload log files from failed cross test runs | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: failure() | |
| with: | |
| name: lib-lua-cross-test-log_${{ matrix.lua-version }} | |
| path: test/log/ | |
| retention-days: 3 | |
| cross-test: | |
| needs: | |
| - lib-php | |
| - lib-java-kotlin | |
| - lib-rust | |
| - lib-go | |
| - lib-python | |
| - lib-cpp | |
| - lib-ruby | |
| - lib-nodejs | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| # kotlin cross test are failing -> see THRIFT-5879 | |
| server_lang: ['java', 'go', 'rs', 'cpp', 'py', 'rb', 'rb.thin', 'rb.puma', 'rb.falcon', 'php', 'nodejs', 'nodets'] | |
| # we always use comma join as many client langs as possible, to reduce the number of jobs | |
| client_lang: ['java,kotlin', 'go,rs,cpp,py,php,nodejs,nodets,rb'] | |
| fail-fast: false | |
| env: | |
| BUNDLE_WITH: falcon_http_server | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | |
| with: | |
| python-version: "3.12" | |
| - name: Install Python test dependencies | |
| run: | | |
| python -m pip install --upgrade pip setuptools | |
| python -m pip install "tornado>=6.3.0" "twisted>=24.3.0" "zope.interface>=6.1" | |
| - name: Set up PHP | |
| uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 | |
| with: | |
| php-version: "8.3" | |
| extensions: intl, xml, curl, sockets | |
| ini-values: "error_reporting=E_ALL" | |
| - name: Install PHP dependencies | |
| run: | | |
| rm -f ~/.composer/auth.json ~/.config/composer/auth.json | |
| composer install --no-progress --prefer-dist | |
| - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 | |
| with: | |
| distribution: temurin | |
| # here we intentionally use an older version so that we also verify Java 17 compiles to it | |
| java-version: 8 | |
| cache: "gradle" | |
| - uses: ruby/setup-ruby@762794c140bbeda0f1224786aa33b4b46783a6c1 # v1.326.0 | |
| with: | |
| ruby-version: "4.0" | |
| bundler-cache: true | |
| working-directory: test/rb | |
| - name: Configure apt retries and timeouts | |
| run: sudo cp .github/apt/99-ci-network /etc/apt/apt.conf.d/ | |
| - name: Install openssl and certificates (for SSL tests) | |
| run: | | |
| sudo apt-get update -yq | |
| sudo apt-get install -y --no-install-recommends \ | |
| openssl \ | |
| ca-certificates \ | |
| libboost-all-dev \ | |
| libevent-dev | |
| - name: Download java precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: java-precross | |
| path: lib/java/build | |
| - name: Download kotlin precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: kotlin-precross | |
| path: lib/kotlin | |
| - name: Download rust precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: rs-precross | |
| path: test/rs/bin | |
| - name: Download go precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: go-precross | |
| path: test/go/bin | |
| - name: Download cpp precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: cpp-precross | |
| path: . | |
| - name: Download python precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: py-precross | |
| path: . | |
| - name: Download ruby precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: rb-precross | |
| path: . | |
| - name: Download php precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: php-precross | |
| path: . | |
| - name: Prepare PHP cross test extensions | |
| run: | | |
| mkdir -p test/php/php_ext_dir | |
| ln -sf ../../../lib/php/src/ext/thrift_protocol/modules/thrift_protocol.so test/php/php_ext_dir/ | |
| ln -sf "$(php-config --extension-dir)/sockets.so" test/php/php_ext_dir/ | |
| - name: Download nodejs and nodets precross artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: nodejs-precross | |
| path: lib | |
| - name: Set back executable flags | |
| run: | | |
| chmod a+x lib/java/build/run* | |
| chmod a+x lib/kotlin/cross-test-client/build/install/TestClient/bin/* | |
| chmod a+x lib/kotlin/cross-test-server/build/install/TestServer/bin/* | |
| chmod a+x test/rs/bin/* | |
| chmod a+x test/go/bin/* | |
| chmod a+x test/cpp/* | |
| chmod a+x test/cpp/.libs/* | |
| chmod a+x lib/cpp/.libs/*.so | |
| chmod a+x test/py/*.py | |
| chmod a+x lib/rb/ext/*.so | |
| - name: Installs for nodets and nodejs | |
| run: | | |
| npm ci | |
| npm ci --prefix lib/nodejs/test | |
| - name: Create tmp domain socket folder | |
| run: mkdir /tmp/v0.16 | |
| - name: Run cross test | |
| env: | |
| THRIFT_CROSSTEST_CONCURRENCY: 4 | |
| run: | | |
| python test/test.py \ | |
| --retry-count 5 \ | |
| --skip-known-failures \ | |
| --server ${{ matrix.server_lang }} \ | |
| --client ${{ matrix.client_lang }} | |
| - name: Upload log files from failed cross test runs | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: failure() | |
| with: | |
| name: cross-test-log_${{ matrix.server_lang }}-${{ matrix.client_lang }} | |
| path: test/log/ | |
| retention-days: 3 |