From c3b327d57bd3769e585375cce5c6ca1337cffc0b Mon Sep 17 00:00:00 2001 From: Gold856 <117957790+Gold856@users.noreply.github.com> Date: Fri, 4 Jul 2025 00:15:18 -0400 Subject: [PATCH] [ci] Add Bazel caching (#8006) --- .bazelrc | 33 +++++++++++-------- .../setup-artifactory-bazel/action.yml | 29 ++++++++++++++++ .github/actions/setup-build-buddy/action.yml | 27 --------------- .../wpilib-generic-gradle-cache_unused.aql | 3 +- .github/workflows/bazel.yml | 22 +++++++------ 5 files changed, 62 insertions(+), 52 deletions(-) create mode 100644 .github/actions/setup-artifactory-bazel/action.yml delete mode 100644 .github/actions/setup-build-buddy/action.yml diff --git a/.bazelrc b/.bazelrc index 753c0d0b82..14df04a23e 100644 --- a/.bazelrc +++ b/.bazelrc @@ -30,28 +30,33 @@ build:build_cpp --test_tag_filters=+allwpilib-build-cpp --build_tag_filters=+all build:no_example --test_tag_filters=-wpi-example --build_tag_filters=-wpi-example test:no_example --test_tag_filters=-wpi-example --build_tag_filters=-wpi-example +# Artifactory Cache Setup +build:base_remote --remote_timeout=3600 + +# Additional suggestions from buildbuddy for speed +build:base_remote --experimental_remote_cache_compression +build:base_remote --experimental_remote_cache_compression_threshold=100 +build:base_remote --noslim_profile +build:base_remote --experimental_profile_include_target_label +build:base_remote --experimental_profile_include_primary_output +build:base_remote --nolegacy_important_outputs + +common:base_remote_readonly --noremote_upload_local_results +build:artifactory_readonly --config=base_remote_readonly +build:artifactory_readonly --remote_cache=https://frcmaven.wpi.edu/artifactory/wpilib-generic-cache-bazel-local + # Build Buddy Cache Setup build:build_buddy --bes_results_url=https://app.buildbuddy.io/invocation/ build:build_buddy --bes_backend=grpcs://remote.buildbuddy.io build:build_buddy --remote_cache=grpcs://remote.buildbuddy.io -build:build_buddy --remote_timeout=3600 - -# Additional suggestions from buildbuddy for speed -build:build_buddy --experimental_remote_cache_compression -build:build_buddy --experimental_remote_cache_compression_threshold=100 -build:build_buddy --noslim_profile -build:build_buddy --experimental_profile_include_target_label -build:build_buddy --experimental_profile_include_primary_output -build:build_buddy --nolegacy_important_outputs - -common:build_buddy_readonly --noremote_upload_local_results +build:build_buddy --config=base_remote # This config should be used locally. It downloads more than the CI version -build:remote_user --config=build_buddy -build:remote_user --config=build_buddy_readonly +build:remote_user --config=base_remote +build:remote_user --config=artifactory_readonly build:remote_user --remote_download_toplevel -build:ci --config=build_buddy +build:ci --config=base_remote build:ci --remote_download_minimal build --build_metadata=REPO_URL=https://github.com/wpilibsuite/allwpilib.git diff --git a/.github/actions/setup-artifactory-bazel/action.yml b/.github/actions/setup-artifactory-bazel/action.yml new file mode 100644 index 0000000000..cab0e682f9 --- /dev/null +++ b/.github/actions/setup-artifactory-bazel/action.yml @@ -0,0 +1,29 @@ +name: "Setup Artifactory Bazel caching" +description: "Sets up the Artifactory Bazel cache to be readonly / writing based on the presence of environment variables" + +inputs: + username: + description: "Artifactory API username" + token: + description: "Artifactory API token" + +runs: + using: "composite" + steps: + - name: Setup without key + env: + API_KEY: ${{ inputs.token }} + if: ${{ env.API_KEY == '' }} + shell: bash + run: | + echo "No API key secret detected, will setup readonly cache" + echo "build:ci --config=artifactory_readonly" > bazel_auth.rc + + - name: Set with key + env: + API_KEY: ${{ inputs.token }} + if: ${{ env.API_KEY != '' }} + shell: bash + run: | + echo "API Key detected!" + echo "build:base_remote --remote_cache=https://${{ inputs.username }}:${{ inputs.token }}@frcmaven.wpi.edu/artifactory/wpilib-generic-cache-bazel-local" > bazel_auth.rc diff --git a/.github/actions/setup-build-buddy/action.yml b/.github/actions/setup-build-buddy/action.yml deleted file mode 100644 index 423398a053..0000000000 --- a/.github/actions/setup-build-buddy/action.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: 'Setup BuildBuddy acache' -description: 'Sets up the build buddy cache to be readonly / writing based on the presence of environment variables' - -inputs: - token: - description: 'Build Buddy API token' - -runs: - using: "composite" - steps: - - name: Setup without key - env: - API_KEY: ${{ inputs.token }} - if: ${{ env.API_KEY == '' }} - shell: bash - run: | - echo "No API key secret detected, will setup readonly cache" - echo "build:ci --config=build_buddy_readonly" > bazel_auth.rc - - - name: Set with key - env: - API_KEY: ${{ inputs.token }} - if: ${{ env.API_KEY != '' }} - shell: bash - run: | - echo "API Key detected!" - echo "build:build_buddy --remote_header=x-buildbuddy-api-key=${{ env.API_KEY }}" > bazel_auth.rc diff --git a/.github/workflows/aql/wpilib-generic-gradle-cache_unused.aql b/.github/workflows/aql/wpilib-generic-gradle-cache_unused.aql index 242fcaf693..21cc781aef 100644 --- a/.github/workflows/aql/wpilib-generic-gradle-cache_unused.aql +++ b/.github/workflows/aql/wpilib-generic-gradle-cache_unused.aql @@ -5,7 +5,8 @@ "items.find": { "$or":[ { "repo": "wpilib-generic-gradlecache" }, - { "repo": "wpilib-generic-cache-cmake" } + { "repo": "wpilib-generic-cache-cmake" }, + { "repo": "wpilib-generic-cache-bazel" } ], "$or":[ { diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 3b93739f3a..4982f8c8ef 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -26,10 +26,11 @@ jobs: java-version: 17 architecture: x64 - - id: Setup_build_buddy - uses: ./.github/actions/setup-build-buddy + - name: Setup Artifactory + uses: ./.github/actions/setup-artifactory-bazel with: - token: ${{ secrets.BUILDBUDDY_API_KEY }} + username: ${{ secrets.ARTIFACTORY_USERNAME }} + token: ${{ secrets.ARTIFACTORY_PASSWORD }} - name: bazel ${{ matrix.action }} run: bazel --output_user_root=C:\\bazelroot ${{ matrix.action }} -k ... --config=ci ${{ matrix.config }} --verbose_failures @@ -42,10 +43,11 @@ jobs: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - id: Setup_build_buddy - uses: ./.github/actions/setup-build-buddy + - name: Setup Artifactory + uses: ./.github/actions/setup-artifactory-bazel with: - token: ${{ secrets.BUILDBUDDY_API_KEY }} + username: ${{ secrets.ARTIFACTORY_USERNAME }} + token: ${{ secrets.ARTIFACTORY_PASSWORD }} - name: bazel test (release) run: bazel test -k ... --config=ci -c opt --config=macos --nojava_header_compilation --verbose_failures @@ -63,12 +65,12 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: bazelbuild/setup-bazelisk@v3 - - id: Setup_build_buddy - uses: ./.github/actions/setup-build-buddy + - name: Setup Artifactory + uses: ./.github/actions/setup-artifactory-bazel with: - token: ${{ secrets.BUILDBUDDY_API_KEY }} + username: ${{ secrets.ARTIFACTORY_USERNAME }} + token: ${{ secrets.ARTIFACTORY_PASSWORD }} - name: bazel ${{ matrix.action }} (release) run: bazel ${{ matrix.action }} ... --config=ci -c opt ${{ matrix.config }} -k --verbose_failures