name: Bazel on: [pull_request, push] concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} cancel-in-progress: true jobs: build: strategy: fail-fast: false matrix: include: - { name: "Linux System Core", classifier: "linuxsystemcore", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "build" } - { name: "Linux System Core Debug", classifier: "linuxsystemcoredebug", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "build" } - { name: "Linux System Core Static", classifier: "linuxsystemcorestatic", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "build" } - { name: "Linux System Core Static Debug", classifier: "linuxsystemcorestaticdebug", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "build" } - { name: "Linux x86-64", classifier: "linuxx86-64,headers,sources", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "test" } - { name: "Linux x86-64 Debug", classifier: "linuxx86-64debug", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "test" } - { name: "Linux x86-64 Static", classifier: "linuxx86-64static", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "test" } - { name: "Linux x86-64 Static Debug", classifier: "linuxx86-64staticdebug", os: ubuntu-24.04, container: "wpilib/systemcore-cross-ubuntu:2027-24.04", action: "test" } - { name: "macOS", classifier: "osxuniversal,osxuniversaldebug,headers,sources,osxuniversalstatic,osxuniversalstaticdebug,linuxsystemcore,linuxsystemcoredebug,linuxsystemcorestatic,linuxsystemcorestaticdebug", os: macOS-15, action: "test" } - { name: "Windows x86-64", classifier: "windowsx86-64,windowsx86-64debug,headers,sources", os: windows-2022, action: "test" } - { name: "Windows x86-64 Static", classifier: "windowsx86-64static,windowsx86-64staticdebug", os: windows-2022, action: "test" } - { name: "Windows ARM64", classifier: "windowsarm64,windowsarm64debug", os: windows-2022, action: "build" } - { name: "Windows ARM64 Static", classifier: "windowsarm64static,windowsarm64staticdebug", os: windows-2022, action: "build" } - { name: "Windows System Core", classifier: "linuxsystemcore,linuxsystemcoredebug", os: windows-2022, action: "build" } - { name: "Windows System Core Static", classifier: "linuxsystemcorestatic,linuxsystemcorestaticdebug", os: windows-2022, action: "build" } name: "${{ matrix.action == 'test' && 'Test' || 'Build' }} ${{ matrix.name }}" runs-on: ${{ matrix.os }} container: ${{ matrix.container }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - id: Setup_bazel_remote uses: ./.github/actions/setup-bazel-remote with: username: ${{ secrets.BAZEL_CACHE_USERNAME }} password: ${{ secrets.BAZEL_CACHE_PASSWORD }} - if: matrix.os == 'ubuntu-24.04' uses: bazel-contrib/setup-bazel@0.15.0 with: bazelisk-cache: true repository-cache: true bazelisk-version: 1.x - name: bazel ${{ matrix.action }} run: | if [[ "${{ matrix.os }}" == "windows-2022" ]]; then bazel --output_user_root=C:\\bazelroot ${{ matrix.action }} ... --config=ci -c opt --repo_env=WPI_PUBLISH_CLASSIFIER_FILTER='${{ matrix.classifier }}' elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then bazel ${{ matrix.action }} ... --config=ci -c opt --nojava_header_compilation --repo_env=WPI_PUBLISH_CLASSIFIER_FILTER='${{ matrix.classifier }}' else bazel ${{ matrix.action }} ... --config=ci -c opt --repo_env=WPI_PUBLISH_CLASSIFIER_FILTER='${{ matrix.classifier }}' fi shell: bash - name: Free Space if: always() shell: bash run: | if [[ "${{ matrix.os }}" == "windows-2022" ]]; then fsutil volume diskfree C: else df -h / fi buildifier: name: "buildifier" runs-on: ubuntu-24.04 steps: - name: Set up Go 1.15.x uses: actions/setup-go@v5 with: cache: false go-version: 1.15.x id: go - name: Install Buildifier run: | cd $(mktemp -d) GO111MODULE=on go get github.com/bazelbuild/buildtools/buildifier@6.0.0 - uses: actions/checkout@v4 with: { fetch-depth: 0 } - name: Run buildifier run: buildifier -warnings all --lint=fix -r . - name: Check Output run: git --no-pager diff --exit-code HEAD - name: Generate diff run: git diff HEAD > bazel-lint-fixes.patch if: ${{ failure() }} - uses: actions/upload-artifact@v4 with: name: ${{ matrix.platform }}-bazel-lint-fixes path: bazel-lint-fixes.patch if: ${{ failure() }} robotpy_pregeneration: name: "Robotpy Pregeneration" runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - id: Setup_build_buddy uses: ./.github/actions/setup-build-buddy with: token: ${{ secrets.BUILDBUDDY_API_KEY }} # You should ensure the headers are correct before trying to pregen files - name: Test Scan Headers run: bazel test //... -k --test_tag_filters=robotpy_scan_headers --build_tests_only shell: bash - name: Run yaml file generation run: bazel run //:write_robotpy_update_yaml_files - name: Run build file generation run: bazel run //:write_robotpy_generated_pybind_files - name: Check Output run: git --no-pager diff --exit-code HEAD - name: Generate diff run: git diff HEAD > robotpy-pregeneration.patch if: ${{ failure() }} - uses: actions/upload-artifact@v4 with: name: ${{ matrix.platform }}-robotpy-pregeneration-fixes path: robotpy-pregeneration-fixes.patch if: ${{ failure() }}