name: CI permissions: read-all on: # For manual tests. workflow_dispatch: push: tags: - "*" # new tag version, like `0.8.4` or else branches: - master - flatbuffers-64 pull_request: branches: - master jobs: build-linux: permissions: contents: write outputs: digests-gcc: ${{ steps.hash-gcc.outputs.hashes }} digests-clang: ${{ steps.hash-clang.outputs.hashes }} name: Build Linux runs-on: ubuntu-latest strategy: matrix: cxx: [g++-10, clang++-12] fail-fast: false steps: - uses: actions/checkout@v3 - name: cmake run: CXX=${{ matrix.cxx }} cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON -DFLATBUFFERS_STATIC_FLATC=ON . - name: build run: make -j - name: test run: ./flattests - name: make flatc executable run: | chmod +x flatc ./flatc --version # - name: flatc tests # run: | # yarn global add esbuild # python3 tests/flatc/main.py - name: upload build artifacts uses: actions/upload-artifact@v1 with: name: Linux flatc binary ${{ matrix.cxx }} path: flatc # Below if only for release. - name: Zip file if: startsWith(github.ref, 'refs/tags/') run: zip Linux.flatc.binary.${{ matrix.cxx }}.zip flatc - name: Release zip file uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: Linux.flatc.binary.${{ matrix.cxx }}.zip - name: Generate SLSA subjects - clang if: matrix.cxx == 'clang++-12' && startsWith(github.ref, 'refs/tags/') id: hash-clang run: echo "hashes=$(sha256sum Linux.flatc.binary.${{ matrix.cxx }}.zip | base64 -w0)" >> $GITHUB_OUTPUT - name: Generate SLSA subjects - gcc if: matrix.cxx == 'g++-10' && startsWith(github.ref, 'refs/tags/') id: hash-gcc run: echo "hashes=$(sha256sum Linux.flatc.binary.${{ matrix.cxx }}.zip | base64 -w0)" >> $GITHUB_OUTPUT build-linux-no-file-tests: name: Build Linux with -DFLATBUFFERS_NO_FILE_TESTS runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: cmake run: CXX=clang++-12 cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON -DFLATBUFFERS_CXX_FLAGS="-DFLATBUFFERS_NO_FILE_TESTS" . - name: build run: make -j build-linux-out-of-source: name: Build Linux with out-of-source build location runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: make build directory run: mkdir build - name: cmake working-directory: build run: > CXX=clang++-12 cmake .. -G "Unix Makefiles" -DFLATBUFFERS_STRICT_MODE=ON -DFLATBUFFERS_BUILD_CPP17=ON -DFLATBUFFERS_CPP_STD=17 - name: build working-directory: build run: make -j - name: test working-directory: build run: pwd && ./flattests - name: test C++17 working-directory: build run: ./flattests_cpp17 build-linux-cpp-std: name: Build Linux C++ runs-on: ubuntu-latest strategy: fail-fast: false matrix: std: [11, 14, 17, 20, 23] cxx: [g++-10, clang++-12] exclude: # GCC 10.3.0 doesn't support std 23 - cxx: g++-10 std: 23 steps: - uses: actions/checkout@v3 - name: cmake run: > CXX=${{ matrix.cxx }} cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON -DFLATBUFFERS_CPP_STD=${{ matrix.std }} -DFLATBUFFERS_BUILD_CPP17=${{ matrix.std >= 17 && 'On' || 'Off'}} - name: build run: make -j - name: test run: ./flattests - name: test C++17 if: matrix.std >= 17 run: ./flattests_cpp17 build-windows-cpp-std: name: Build Windows C++ runs-on: windows-2019 strategy: matrix: std: [11, 14, 17, 20, 23] fail-fast: false steps: - uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - name: cmake run: > cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON -DFLATBUFFERS_CPP_STD=${{ matrix.std }} -DFLATBUFFERS_BUILD_CPP17=${{ matrix.std >= 17 && 'On' || 'Off'}} - name: build run: msbuild.exe FlatBuffers.sln /p:Configuration=Release /p:Platform=x64 - name: test run: Release\flattests.exe - name: test C++17 if: matrix.std >= 17 run: Release\flattests_cpp17.exe build-windows: permissions: contents: write outputs: digests: ${{ steps.hash.outputs.hashes }} name: Build Windows 2019 runs-on: windows-2019 steps: - uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - name: cmake run: cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_CPP17=ON -DFLATBUFFERS_STRICT_MODE=ON . - name: build run: msbuild.exe FlatBuffers.sln /p:Configuration=Release /p:Platform=x64 - name: test run: Release\flattests.exe # - name: flatc tests # run: python3 tests/flatc/main.py --flatc Release\flatc.exe - name: upload build artifacts uses: actions/upload-artifact@v1 with: name: Windows flatc binary path: Release\flatc.exe # Below if only for release. - name: Zip file if: startsWith(github.ref, 'refs/tags/') run: move Release/flatc.exe . && Compress-Archive flatc.exe Windows.flatc.binary.zip - name: Release binary uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: Windows.flatc.binary.zip - name: Generate SLSA subjects if: startsWith(github.ref, 'refs/tags/') id: hash shell: bash run: echo "hashes=$(sha256sum Windows.flatc.binary.zip | base64 -w0)" >> $GITHUB_OUTPUT build-windows-2017: name: Build Windows 2017 runs-on: windows-2019 steps: - uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - name: cmake run: cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON . - name: build tool version 15 (VS 2017) run: msbuild.exe FlatBuffers.sln /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=15.0 - name: test run: Release\flattests.exe build-windows-2015: name: Build Windows 2015 runs-on: windows-2019 steps: - uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - name: cmake run: cmake -G "Visual Studio 14 2015" -A x64 -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON . - name: build tool version 14 (VS 2015) run: msbuild.exe FlatBuffers.sln /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=14.0 - name: test run: Release\flattests.exe build-dotnet-windows: name: Build .NET Windows runs-on: windows-2019 strategy: matrix: configuration: [ '', '-p:UnsafeByteBuffer=true', # Fails two tests currently. #'-p:EnableSpanT=true,UnsafeByteBuffer=true' ] steps: - uses: actions/checkout@v3 - name: Setup .NET Core SDK uses: actions/setup-dotnet@v3 with: dotnet-version: '3.1.x' - name: Build run: | cd tests\FlatBuffers.Test dotnet new sln --force --name FlatBuffers.Core.Test dotnet sln FlatBuffers.Core.Test.sln add FlatBuffers.Core.Test.csproj dotnet build -c Release ${{matrix.configuration}} -o out FlatBuffers.Core.Test.sln - name: Run run: | cd tests\FlatBuffers.Test out\FlatBuffers.Core.Test.exe build-mac-intel: permissions: contents: write outputs: digests: ${{ steps.hash.outputs.hashes }} name: Build Mac (for Intel) runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: cmake run: cmake -G "Xcode" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON . - name: build run: xcodebuild -toolchain clang -configuration Release -target flattests - name: check that the binary is x86_64 run: | info=$(file Release/flatc) echo $info echo $info | grep "Mach-O 64-bit executable x86_64" - name: test run: Release/flattests - name: make flatc executable run: | chmod +x Release/flatc Release/flatc --version # - name: flatc tests # run: python3 tests/flatc/main.py --flatc Release/flatc - name: upload build artifacts uses: actions/upload-artifact@v1 with: name: Mac flatc binary path: Release/flatc # Below if only for release. - name: Zip file if: startsWith(github.ref, 'refs/tags/') run: mv Release/flatc . && zip MacIntel.flatc.binary.zip flatc - name: Release binary uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: MacIntel.flatc.binary.zip - name: Generate SLSA subjects if: startsWith(github.ref, 'refs/tags/') id: hash run: echo "hashes=$(shasum -a 256 MacIntel.flatc.binary.zip | base64)" >> $GITHUB_OUTPUT build-mac-universal: permissions: contents: write outputs: digests: ${{ steps.hash.outputs.hashes }} name: Build Mac (universal build) runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: cmake run: cmake -G "Xcode" -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON . - name: build run: xcodebuild -toolchain clang -configuration Release -target flattests - name: check that the binary is "universal" run: | info=$(file Release/flatc) echo $info echo $info | grep "Mach-O universal binary with 2 architectures" - name: test run: Release/flattests - name: make flatc executable run: | chmod +x Release/flatc Release/flatc --version - name: upload build artifacts uses: actions/upload-artifact@v1 with: name: Mac flatc binary path: Release/flatc # Below if only for release. - name: Zip file if: startsWith(github.ref, 'refs/tags/') run: mv Release/flatc . && zip Mac.flatc.binary.zip flatc - name: Release binary uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: Mac.flatc.binary.zip - name: Generate SLSA subjects if: startsWith(github.ref, 'refs/tags/') id: hash run: echo "hashes=$(shasum -a 256 Mac.flatc.binary.zip | base64)" >> $GITHUB_OUTPUT build-android: name: Build Android (on Linux) runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: set up Java uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '11' - name: set up flatc run: | cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . make -j echo "${PWD}" >> $GITHUB_PATH - name: build working-directory: android run: gradle clean build build-generator: name: Check Generated Code runs-on: ubuntu-latest strategy: matrix: cxx: [g++-10, clang++-12] steps: - uses: actions/checkout@v3 - name: cmake run: CXX=${{ matrix.cxx }} cmake -G "Unix Makefiles" -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON . && make -j - name: Generate run: scripts/check_generate_code.py - name: Generate gRPC run: scripts/check-grpc-generated-code.py build-generator-windows: name: Check Generated Code on Windows runs-on: windows-2019 steps: - uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - name: cmake run: cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_CPP17=ON -DFLATBUFFERS_STRICT_MODE=ON . - name: build run: msbuild.exe FlatBuffers.sln /p:Configuration=Release /p:Platform=x64 - name: Generate run: python3 scripts/check_generate_code.py --flatc Release\flatc.exe - name: Generate gRPC run: python3 scripts/check-grpc-generated-code.py --flatc Release\flatc.exe build-benchmarks: name: Build Benchmarks (on Linux) runs-on: ubuntu-latest strategy: matrix: cxx: [g++-10] steps: - uses: actions/checkout@v3 - name: cmake run: CXX=${{ matrix.cxx }} cmake -G "Unix Makefiles" -DFLATBUFFERS_CXX_FLAGS="-Wno-unused-parameter -fno-aligned-new" -DFLATBUFFERS_BUILD_BENCHMARKS=ON -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_STRICT_MODE=ON . && make -j - name: Run benchmarks run: ./flatbenchmark --benchmark_repetitions=5 --benchmark_display_aggregates_only=true --benchmark_out_format=console --benchmark_out=benchmarks/results_${{matrix.cxx}} - name: Upload benchmarks results uses: actions/upload-artifact@v1 with: name: Linux flatbenchmark results ${{matrix.cxx}} path: benchmarks/results_${{matrix.cxx}} build-java: name: Build Java runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: test working-directory: java run: mvn test build-kotlin-macos: name: Build Kotlin MacOS runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1.0.5 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '11' - name: Build working-directory: kotlin run: ./gradlew clean iosX64Test macosX64Test build-kotlin-linux: name: Build Kotlin Linux runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '11' - uses: gradle/wrapper-validation-action@v1.0.5 - name: Build working-directory: kotlin # we are using docker's version of gradle # so no need for wrapper validation or user # gradlew run: gradle jvmMainClasses jvmTest jsTest jsBrowserTest build-rust-linux: name: Build Rust Linux runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: test working-directory: tests run: bash RustTest.sh build-rust-windows: name: Build Rust Windows runs-on: windows-2019 steps: - uses: actions/checkout@v3 - name: test working-directory: tests run: ./RustTest.bat build-python: name: Build Python runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: flatc # FIXME: make test script not rely on flatc run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . && make -j - name: test working-directory: tests run: bash PythonTest.sh build-go: name: Build Go runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: flatc # FIXME: make test script not rely on flatc run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . && make -j - name: test working-directory: tests run: bash GoTest.sh build-php: name: Build PHP runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: flatc # FIXME: make test script not rely on flatc run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . && make -j - name: test working-directory: tests run: | php phpTest.php sh phpUnionVectorTest.sh build-swift: name: Build Swift runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: test working-directory: tests/swift/tests run: | swift build --build-tests swift test build-swift-wasm: name: Build Swift Wasm runs-on: ubuntu-latest container: image: ghcr.io/swiftwasm/carton:0.15.3 steps: - uses: actions/checkout@v3 - name: Setup Wasmer uses: wasmerio/setup-wasmer@v2 - name: Test working-directory: tests/swift/Wasm.tests run: carton test build-ts: name: Build TS runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: flatc # FIXME: make test script not rely on flatc run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF . && make -j - name: deps run: yarn - name: compile run: yarn compile - name: test working-directory: tests/ts run: | yarn global add esbuild python3 TypeScriptTest.py build-dart: name: Build Dart runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dart-lang/setup-dart@v1 with: sdk: stable - name: flatc # FIXME: make test script not rely on flatc run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . && make -j - name: test working-directory: tests run: bash DartTest.sh build-nim: name: Build Nim runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: flatc # FIXME: make test script not rely on flatc run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF . && make -j - uses: jiro4989/setup-nim-action@v1 - name: install library working-directory: nim run: nimble -y develop - name: test working-directory: tests/nim run: python3 testnim.py release-digests: if: startsWith(github.ref, 'refs/tags/') needs: [build-linux, build-windows, build-mac-intel, build-mac-universal] outputs: digests: ${{ steps.hash.outputs.digests }} runs-on: ubuntu-latest steps: - name: Merge results id: hash env: LINUXGCC_DIGESTS: "${{ needs.build-linux.outputs.digests-gcc }}" LINUXCLANG_DIGESTS: "${{ needs.build-linux.outputs.digests-clang }}" MAC_DIGESTS: "${{ needs.build-mac-universal.outputs.digests }}" MACINTEL_DIGESTS: "${{ needs.build-mac-intel.outputs.digests }}" WINDOWS_DIGESTS: "${{ needs.build-windows.outputs.digests }}" run: | set -euo pipefail echo "$LINUXGCC_DIGESTS" | base64 -d > checksums.txt echo "$LINUXCLANG_DIGESTS" | base64 -d >> checksums.txt echo "$MAC_DIGESTS" | base64 -d >> checksums.txt echo "$MACINTEL_DIGESTS" | base64 -d >> checksums.txt echo "$WINDOWS_DIGESTS" | base64 -d >> checksums.txt echo "digests=$(cat checksums.txt | base64 -w0)" >> $GITHUB_OUTPUT provenance: if: startsWith(github.ref, 'refs/tags/') needs: [release-digests] permissions: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.1 with: base64-subjects: "${{ needs.release-digests.outputs.digests }}" upload-assets: true # Optional: Upload to a new release compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163