feat(dart): add bfloat16 and bfloat16_array support #8603
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
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| name: Fory CI | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - "releases/**" | |
| - "deploy/**" | |
| - "test*" | |
| tags: | |
| - v* | |
| pull_request: | |
| paths-ignore: | |
| - "**/*.md" | |
| - "LICENSE" | |
| - ".vscode/**" | |
| - ".gitignore" | |
| - "licenses/**" | |
| - "DISCLAIMER" | |
| - "NOTICE" | |
| types: ["opened", "reopened", "synchronize"] | |
| jobs: | |
| compiler: | |
| name: Compiler CI | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| cache: "pip" | |
| - name: Install python dependencies | |
| run: pip install pytest | |
| - name: Run compiler CI | |
| run: | | |
| cd compiler | |
| pytest -q fory_compiler/tests | |
| java: | |
| name: Java CI | |
| runs-on: ubuntu-latest | |
| env: | |
| MY_VAR: "PATH" | |
| strategy: | |
| matrix: | |
| java-version: ["8", "11", "17", "21", "25"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK ${{ matrix.java-version }} | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: ${{ matrix.java-version }} | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Python3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| cache: 'pip' | |
| - name: Run CI with Maven | |
| run: python ./ci/run_ci.py java --version ${{ matrix.java-version }} | |
| - name: Upload Test Report | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: test-reports-${{ matrix.java-version }} | |
| path: | | |
| **/target/surefire-reports/** | |
| **/hs_err*.log | |
| openj9: | |
| name: Openj9 Java CI | |
| runs-on: ubuntu-latest | |
| env: | |
| MY_VAR: "PATH" | |
| strategy: | |
| matrix: | |
| # String in openj9 1.8 share byte array by offset, fory doesn't allow it. | |
| java-version: ["21"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK ${{ matrix.java-version }} | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: ${{ matrix.java-version }} | |
| distribution: "adopt-openj9" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Python3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| cache: 'pip' | |
| - name: Run CI with Maven | |
| run: python ./ci/run_ci.py java --version ${{ matrix.java-version }} | |
| java21_windows: | |
| name: Windows Java 21 CI | |
| runs-on: windows-2022 | |
| env: | |
| MY_VAR: "PATH" | |
| strategy: | |
| matrix: | |
| java-version: ["21"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK ${{ matrix.java-version }} | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: ${{ matrix.java-version }} | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| - name: Run CI with Maven | |
| shell: bash | |
| run: python ./ci/run_ci.py java --version windows_java21 | |
| csharp: | |
| name: C# CI | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up .NET 8 | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: "8.0.x" | |
| cache: true | |
| cache-dependency-path: | | |
| csharp/**/*.csproj | |
| csharp/Fory.sln | |
| - name: Restore C# dependencies | |
| run: | | |
| cd csharp | |
| dotnet restore Fory.sln | |
| - name: Build C# solution | |
| run: | | |
| cd csharp | |
| dotnet build Fory.sln -c Release --no-restore | |
| - name: Run C# tests | |
| run: | | |
| cd csharp | |
| dotnet test tests/Fory.Tests/Fory.Tests.csproj -c Release --no-build | |
| - name: Verify C# format | |
| run: | | |
| cd csharp | |
| dotnet format Fory.sln --verify-no-changes \ | |
| --exclude src/Fory.Generator/AnalyzerReleases.Shipped.md \ | |
| --exclude src/Fory.Generator/AnalyzerReleases.Unshipped.md | |
| csharp_xlang: | |
| name: C# Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| - name: Set up .NET 8 | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: "8.0.x" | |
| cache: true | |
| cache-dependency-path: | | |
| csharp/**/*.csproj | |
| csharp/Fory.sln | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Restore and build C# xlang peer | |
| run: | | |
| cd csharp | |
| dotnet restore tests/Fory.XlangPeer/Fory.XlangPeer.csproj | |
| dotnet build tests/Fory.XlangPeer/Fory.XlangPeer.csproj -c Debug --no-restore | |
| - name: Run C# Xlang Test | |
| env: | |
| FORY_CSHARP_JAVA_CI: "1" | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.CSharpXlangTest | |
| - name: Run C# IDL Tests | |
| run: ./integration_tests/idl_tests/run_csharp_tests.sh | |
| swift: | |
| name: Swift CI | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Run Swift unit tests | |
| run: | | |
| cd swift | |
| swift test | |
| - name: Run SwiftLint check | |
| run: | | |
| if ! command -v swiftlint >/dev/null; then | |
| brew install swiftlint | |
| fi | |
| cd swift | |
| swiftlint lint --config .swiftlint.yml | |
| swift_xlang: | |
| name: Swift Xlang Test | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Cache Swift package dependencies and build artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.swiftpm | |
| ~/Library/Caches/org.swift.swiftpm | |
| swift/.build | |
| key: ${{ runner.os }}-${{ runner.arch }}-swiftpm-${{ hashFiles('swift/Package.resolved', 'swift/Package.swift', 'swift/Sources/**') }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ runner.arch }}-swiftpm- | |
| - name: Prebuild Swift xlang peer for cache reuse | |
| run: | | |
| cd swift | |
| swift build -c release --disable-automatic-resolution --product ForyXlangTests | |
| - name: Run Swift Xlang Test | |
| env: | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| FORY_SWIFT_JAVA_CI: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.SwiftXlangTest | |
| - name: Generate Swift IDL test code | |
| run: python ./integration_tests/idl_tests/generate_idl.py --lang swift | |
| - name: Cache Swift IDL package build artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| integration_tests/idl_tests/swift/idl_package/.build | |
| integration_tests/idl_tests/swift/idl_package/.swiftpm | |
| key: ${{ runner.os }}-${{ runner.arch }}-swift-idl-package-${{ hashFiles('integration_tests/idl_tests/swift/idl_package/Package.swift', 'integration_tests/idl_tests/swift/idl_package/Package.resolved', 'swift/Package.swift', 'swift/Package.resolved', 'swift/Sources/ForyMacro/**') }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ runner.arch }}-swift-idl-package- | |
| - name: Prebuild Swift IDL package | |
| run: | | |
| cd integration_tests/idl_tests/swift/idl_package | |
| swift build --disable-automatic-resolution --build-tests | |
| - name: Run Swift IDL package tests | |
| env: | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd integration_tests/idl_tests/swift/idl_package | |
| swift test --disable-automatic-resolution --skip-build | |
| - name: Run Java IDL tests against Swift peer | |
| env: | |
| IDL_PEER_LANG: "swift" | |
| run: ./integration_tests/idl_tests/run_java_tests.sh | |
| graalvm: | |
| name: GraalVM CI | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| java-version: ["17", "21", "25"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: graalvm/setup-graalvm@f744c72a42b1995d7b0cbc314bde4bace7ac1fe1 # 1.5.0 | |
| with: | |
| java-version: ${{ matrix.java-version }} | |
| distribution: "graalvm" | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| native-image-job-reports: "true" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Python3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| - name: Build native image and run | |
| shell: bash | |
| run: python ./ci/run_ci.py java --version graalvm | |
| kotlin: | |
| name: Kotlin CI | |
| runs-on: ubuntu-latest | |
| env: | |
| MY_VAR: "PATH" | |
| strategy: | |
| matrix: | |
| java-version: ["8", "11", "17", "21"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK ${{ matrix.java-version }} | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: ${{ matrix.java-version }} | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Python 3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| - name: Install fory java | |
| run: python ./ci/run_ci.py java --install-jdks --install-fory | |
| - name: Run Kotlin CI | |
| run: python ./ci/run_ci.py kotlin | |
| scala: | |
| name: Scala CI | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK11 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 11 | |
| distribution: "temurin" | |
| cache: sbt | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - uses: sbt/setup-sbt@1cad58d595b729a71ca2254cdf5b43dd6f42d4bb # v1.1.18 | |
| - name: Install fory java | |
| run: cd java && mvn -T10 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true && cd - | |
| - name: Test | |
| run: | | |
| cd scala && sbt +test && cd - | |
| integration_tests: | |
| name: Integration Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK11 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 11 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Python 3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| - name: Run CI | |
| run: python ./ci/run_ci.py java --version integration_tests | |
| javascript: | |
| name: JavaScript CI | |
| strategy: | |
| matrix: | |
| node-version: [18, 24] | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache-dependency-path: javascript/package-lock.json | |
| cache: "npm" | |
| - name: Upgrade npm | |
| run: npm install -g npm@8 | |
| # node-gyp needs to use python and relies on the distutils module. | |
| # The distutils module has been removed starting from python 3.12 | |
| # (see https://docs.python.org/3.10/library/distutils.html). Some | |
| # OS (such as macos-latest) uses python3.12 by default, so python 3.8 | |
| # is used here to avoid this problem. On Windows, use 3.11 to avoid | |
| # the slower 3.8 download on hosted runners. | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ runner.os == 'Windows' && '3.11' || '3.8' }} | |
| - name: Run CI with NodeJS | |
| run: python ./ci/run_ci.py javascript | |
| javascript_xlang: | |
| name: JavaScript Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Use Node.js 20.x | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20.x | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Cache npm local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.npm | |
| key: ${{ runner.os }}-npm-${{ hashFiles('javascript/package-lock.json') }} | |
| restore-keys: | | |
| ${{ runner.os }}-npm- | |
| - name: Install JavaScript dependencies | |
| run: | | |
| cd javascript | |
| npm install | |
| - name: Run JavaScript Xlang Test | |
| env: | |
| FORY_JAVASCRIPT_JAVA_CI: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn --no-transfer-progress test -Dtest=org.apache.fory.xlang.JavaScriptXlangTest -DforkCount=0 | |
| rust: | |
| name: Rust CI | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-14, macos-latest] # macos-14: arm64 | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| - name: Set up Java 11 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 11 | |
| distribution: temurin | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Cache Cargo dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: rust | |
| - name: Run Rust CI | |
| run: python ./ci/run_ci.py rust | |
| rust_xlang: | |
| name: Rust Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Cache Cargo dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: rust | |
| - name: Run Rust Xlang Test | |
| env: | |
| FORY_RUST_JAVA_CI: "1" | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.RustXlangTest | |
| - name: Run Rust IDL Tests | |
| run: ./integration_tests/idl_tests/run_rust_tests.sh | |
| cpp: | |
| name: C++ CI | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-2022] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| cache: 'pip' | |
| - name: Set up Bazel | |
| uses: bazel-contrib/setup-bazel@083175551ceeceebc757ebee2127fde78840ca77 # 0.18.0 | |
| with: | |
| bazelisk-cache: true | |
| bazelisk-version: '1.x' | |
| - name: Cache Bazel repository cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/bazel/_bazel_*/*/external | |
| ~/Library/Caches/bazel/_bazel_*/*/external | |
| C:\users\runneradmin\_bazel_runneradmin\*/external | |
| key: bazel-repo-${{ runner.os }}-${{ runner.arch }}-py311-${{ hashFiles('WORKSPACE', '.bazelrc', 'bazel/**') }} | |
| restore-keys: | | |
| bazel-repo-${{ runner.os }}-${{ runner.arch }}-py311- | |
| - name: Cache Bazel build outputs | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/bazel | |
| ~/Library/Caches/bazel | |
| C:\users\runneradmin\_bazel_runneradmin | |
| key: bazel-build-cpp-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('cpp/**', 'BUILD', 'WORKSPACE') }} | |
| - name: Run C++ CI with Bazel | |
| run: python ./ci/run_ci.py cpp | |
| - name: Upload Bazel Test Logs | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: bazel-test-logs-${{ matrix.os }} | |
| path: | | |
| bazel-out/*/testlogs/**/*.log | |
| bazel-out/*/testlogs/**/*.xml | |
| if-no-files-found: ignore | |
| cpp_sanitizers: | |
| name: C++ Sanitizer (${{ matrix.sanitizer }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| sanitizer: [asan, ubsan] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| cache: 'pip' | |
| - name: Set up Bazel | |
| uses: bazel-contrib/setup-bazel@083175551ceeceebc757ebee2127fde78840ca77 # 0.18.0 | |
| with: | |
| bazelisk-cache: true | |
| bazelisk-version: '1.x' | |
| - name: Cache Bazel repository cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/bazel/_bazel_*/*/external | |
| key: bazel-repo-sanitizer-${{ runner.os }}-${{ runner.arch }}-py311-${{ hashFiles('WORKSPACE', '.bazelrc', 'bazel/**') }} | |
| restore-keys: | | |
| bazel-repo-sanitizer-${{ runner.os }}-${{ runner.arch }}-py311- | |
| - name: Cache Bazel build outputs | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/bazel | |
| key: bazel-build-cpp-sanitizer-${{ runner.os }}-${{ runner.arch }}-${{ matrix.sanitizer }}-${{ hashFiles('cpp/**', 'BUILD', 'WORKSPACE', '.bazelrc') }} | |
| - name: Install Bazel and C++ deps | |
| run: python ./ci/run_ci.py cpp --install-deps-only | |
| - name: Run C++ ${{ matrix.sanitizer }} tests | |
| run: | | |
| ARCH="$(uname -m)" | |
| BAZEL_CONFIGS="--config=${{ matrix.sanitizer }}" | |
| if [[ "${ARCH}" == "x86_64" || "${ARCH}" == "amd64" ]]; then | |
| BAZEL_CONFIGS="--config=x86_64 ${BAZEL_CONFIGS}" | |
| fi | |
| bazel test --cache_test_results=no ${BAZEL_CONFIGS} $(bazel query //cpp/...) | |
| - name: Upload Bazel Test Logs (${{ matrix.sanitizer }}) | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: bazel-test-logs-${{ matrix.sanitizer }} | |
| path: | | |
| bazel-out/*/testlogs/**/*.log | |
| bazel-out/*/testlogs/**/*.xml | |
| if-no-files-found: ignore | |
| cpp_xlang: | |
| name: C++ Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| cache: 'pip' | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Set up Bazel | |
| uses: bazel-contrib/setup-bazel@083175551ceeceebc757ebee2127fde78840ca77 # 0.18.0 | |
| with: | |
| bazelisk-cache: true | |
| bazelisk-version: '1.x' | |
| - name: Run CPP Xlang Test | |
| env: | |
| FORY_CPP_JAVA_CI: "1" | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.CPPXlangTest | |
| - name: Run C++ IDL Tests | |
| run: ./integration_tests/idl_tests/run_cpp_tests.sh | |
| cpp_examples: | |
| name: C++ Examples | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Set up Bazel | |
| uses: bazel-contrib/setup-bazel@083175551ceeceebc757ebee2127fde78840ca77 # 0.18.0 | |
| with: | |
| bazelisk-cache: true | |
| bazelisk-version: '1.x' | |
| - name: Build and run C++ hello_world example (CMake) | |
| run: | | |
| cd examples/cpp/hello_world | |
| ./run.sh | |
| - name: Build and run C++ hello_row example (CMake) | |
| run: | | |
| cd examples/cpp/hello_row | |
| ./run.sh | |
| - name: Build and run C++ hello_world example (Bazel) | |
| run: | | |
| cd examples/cpp/hello_world | |
| ./run_bazel.sh | |
| - name: Build and run C++ hello_row example (Bazel) | |
| run: | | |
| cd examples/cpp/hello_row | |
| ./run_bazel.sh | |
| python: | |
| name: Python CI | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| python-version: ['3.8', '3.12', '3.13'] | |
| os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-2022] | |
| # windows-2022 runners don't have Python 3.8 preinstalled, and pinned 3.13.3 | |
| # forces a download/reinstall; use cached 3.11/3.12/3.13 on Windows instead. | |
| exclude: | |
| - os: windows-2022 | |
| python-version: '3.8' | |
| include: | |
| - os: windows-2022 | |
| python-version: '3.11' | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: Set up Bazel | |
| uses: bazel-contrib/setup-bazel@083175551ceeceebc757ebee2127fde78840ca77 # 0.18.0 | |
| with: | |
| bazelisk-cache: true | |
| bazelisk-version: '1.x' | |
| - name: Clean Bazel cache (Windows) | |
| if: runner.os == 'Windows' | |
| shell: bash | |
| run: | | |
| echo "Cleaning Bazel cache to ensure fresh build..." | |
| bazel clean --expunge || true | |
| - name: Run Python CI | |
| shell: bash | |
| run: python ./ci/run_ci.py python | |
| - name: Run Python CI (ENABLE_FORY_CYTHON_SERIALIZATION=1) | |
| shell: bash | |
| env: | |
| ENABLE_FORY_CYTHON_SERIALIZATION: "1" | |
| run: python ./ci/run_ci.py python | |
| python_xlang: | |
| name: Python Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| cache: 'pip' | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Install pyfory | |
| run: bash ci/run_ci.sh install_pyfory | |
| - name: Run Python Xlang Test | |
| env: | |
| FORY_PYTHON_JAVA_CI: "1" | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.PythonXlangTest | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.PyCrossLanguageTest | |
| cd ../fory-format | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.format.CrossLanguageTest | |
| - name: Run Python IDL Tests | |
| run: ./integration_tests/idl_tests/run_python_tests.sh | |
| go: | |
| name: Golang CI | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Go 1.23 | |
| uses: actions/setup-go@v4 | |
| with: | |
| go-version: "1.23" | |
| - name: Display Go version | |
| run: go version | |
| - name: Set up Python3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| cache: 'pip' | |
| - name: Set up Bazel | |
| uses: bazel-contrib/setup-bazel@083175551ceeceebc757ebee2127fde78840ca77 # 0.18.0 | |
| with: | |
| bazelisk-cache: true | |
| bazelisk-version: '1.x' | |
| - name: Install python dependencies | |
| run: pip install pyarrow cython wheel pytest setuptools -U | |
| - name: Install pyfory for xlang tests | |
| run: pip install -e python/ | |
| - name: Run Golang CI | |
| run: python ./ci/run_ci.py go | |
| go_xlang: | |
| name: Go Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.21' | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.11 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Run Go Xlang Test | |
| env: | |
| FORY_GO_JAVA_CI: "1" | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.GoXlangTest | |
| - name: Run Go IDL Tests | |
| run: ./integration_tests/idl_tests/run_go_tests.sh | |
| dart_xlang: | |
| name: Dart Xlang Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "temurin" | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven- | |
| - name: Install Dart SDK | |
| run: | | |
| DART_VERSION=3.6.1 | |
| wget -q https://storage.googleapis.com/dart-archive/channels/stable/release/${DART_VERSION}/sdk/dartsdk-linux-x64-release.zip | |
| unzip -q dartsdk-linux-x64-release.zip | |
| echo "$PWD/dart-sdk/bin" >> $GITHUB_PATH | |
| - name: Display Dart version | |
| run: dart --version | |
| - name: Get Dart dependencies | |
| run: | | |
| cd dart | |
| dart pub get | |
| - name: Generate Dart code | |
| run: | | |
| cd dart/packages/fory-test | |
| dart run build_runner build --delete-conflicting-outputs | |
| - name: Run Dart Xlang Test | |
| env: | |
| FORY_DART_JAVA_CI: "1" | |
| ENABLE_FORY_DEBUG_OUTPUT: "1" | |
| run: | | |
| cd java | |
| mvn -T16 --no-transfer-progress clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true | |
| cd fory-core | |
| mvn -T16 --no-transfer-progress test -Dtest=org.apache.fory.xlang.DartXlangTest | |
| dart: | |
| name: Dart CI | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install Dart SDK | |
| run: | | |
| # Download and install Dart SDK | |
| DART_VERSION=3.6.1 | |
| wget -q https://storage.googleapis.com/dart-archive/channels/stable/release/${DART_VERSION}/sdk/dartsdk-linux-x64-release.zip | |
| unzip -q dartsdk-linux-x64-release.zip | |
| export PATH="$PATH:$PWD/dart-sdk/bin" | |
| echo "$PWD/dart-sdk/bin" >> $GITHUB_PATH | |
| - name: Display Dart version | |
| run: dart --version | |
| - name: Get dependencies | |
| run: | | |
| cd dart | |
| dart pub get | |
| - name: Generate code | |
| run: | | |
| cd dart/packages/fory-test | |
| dart run build_runner build --delete-conflicting-outputs | |
| - name: Run tests | |
| run: | | |
| cd dart/packages/fory-test | |
| dart test | |
| - name: Run code analysis | |
| run: | | |
| cd dart/packages/fory-test | |
| dart analyze | |
| - name: Analyze code | |
| run: | | |
| cd dart | |
| dart analyze | |
| lint: | |
| name: Code Style Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up JDK ${{ matrix.java-version }} | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| distribution: "oracle" | |
| - name: Check License Header | |
| uses: korandoru/hawkeye@v3 | |
| - name: Set up Python 3.8 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.8 | |
| - name: Set up .NET 8 | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: "8.0.x" | |
| - name: Use Node.js 20.x | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20.x | |
| - name: Check code style | |
| run: python ./ci/run_ci.py format | |
| validate_fory_site_build: | |
| name: Validate Fory Site Build | |
| runs-on: ubuntu-latest | |
| if: github.repository == 'apache/fory' && (github.event_name != 'pull_request' || !github.event.pull_request.draft) | |
| steps: | |
| - name: Checkout fory | |
| uses: actions/checkout@v5 | |
| with: | |
| path: fory | |
| - name: Checkout fory-site | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: apache/fory-site | |
| ref: main | |
| path: fory-site | |
| - name: Set up Node.js 20.x | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20.x | |
| cache: npm | |
| cache-dependency-path: fory-site/package-lock.json | |
| - name: Sync files and validate site build | |
| run: | | |
| python3 fory/ci/validate_fory_site_sync.py fory fory-site |