From 6bcb4c8100d702e3f1dff37083d617977f10d788 Mon Sep 17 00:00:00 2001 From: Petros Paraskevopoulos <9729923+ParaskP7@users.noreply.github.com> Date: Wed, 22 Jan 2025 13:41:19 +0200 Subject: [PATCH] [Dependency Cache] Enable Dependency Cache on CI (#3463) --- .buildkite/commands/assemble-release-apk.sh | 15 ++++++++ .buildkite/commands/lint.sh | 2 ++ .buildkite/commands/prototype-build.sh | 2 ++ .buildkite/commands/restore-cache.sh | 4 +++ .buildkite/commands/run-instrumented-tests.sh | 15 ++++++++ .buildkite/commands/run-unit-tests.sh | 7 ++++ .buildkite/commands/save-cache.sh | 35 +++++++++++++++++++ .buildkite/pipeline.yml | 20 ++--------- .buildkite/schedules/dependency-cache.yml | 22 ++++++++++++ .buildkite/shared-pipeline-vars | 2 +- 10 files changed, 106 insertions(+), 18 deletions(-) create mode 100644 .buildkite/commands/assemble-release-apk.sh create mode 100755 .buildkite/commands/restore-cache.sh create mode 100644 .buildkite/commands/run-instrumented-tests.sh create mode 100755 .buildkite/commands/run-unit-tests.sh create mode 100755 .buildkite/commands/save-cache.sh create mode 100644 .buildkite/schedules/dependency-cache.yml diff --git a/.buildkite/commands/assemble-release-apk.sh b/.buildkite/commands/assemble-release-apk.sh new file mode 100644 index 00000000000..ee11d661c48 --- /dev/null +++ b/.buildkite/commands/assemble-release-apk.sh @@ -0,0 +1,15 @@ +#!/bin/bash -eu + +"$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" + +echo "--- :rubygems: Setting up Gems" + +install_gems + +echo "--- :closed_lock_with_key: Installing Secrets" + +bundle exec fastlane run configure_apply + +echo "--- ⚙️ Building release variant" + +./gradlew assembleRelease -PskipSentryProguardMappingUpload=true diff --git a/.buildkite/commands/lint.sh b/.buildkite/commands/lint.sh index 229a305f26a..413c8bef09b 100755 --- a/.buildkite/commands/lint.sh +++ b/.buildkite/commands/lint.sh @@ -1,5 +1,7 @@ #!/bin/bash -u +"$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" + echo "--- :rubygems: Setting up Gems" install_gems diff --git a/.buildkite/commands/prototype-build.sh b/.buildkite/commands/prototype-build.sh index dceeea803b9..2770879ec84 100755 --- a/.buildkite/commands/prototype-build.sh +++ b/.buildkite/commands/prototype-build.sh @@ -1,5 +1,7 @@ #!/bin/bash -eu +"$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" + echo "--- :rubygems: Setting up Gems" install_gems diff --git a/.buildkite/commands/restore-cache.sh b/.buildkite/commands/restore-cache.sh new file mode 100755 index 00000000000..e0807c3eff3 --- /dev/null +++ b/.buildkite/commands/restore-cache.sh @@ -0,0 +1,4 @@ +#!/bin/bash -e + +echo "--- 💾 Restore Cache" +restore_gradle_dependency_cache || true diff --git a/.buildkite/commands/run-instrumented-tests.sh b/.buildkite/commands/run-instrumented-tests.sh new file mode 100644 index 00000000000..3ce0be386e7 --- /dev/null +++ b/.buildkite/commands/run-instrumented-tests.sh @@ -0,0 +1,15 @@ +#!/bin/bash -eu + +"$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" + +echo "--- :rubygems: Setting up Gems" + +install_gems + +echo "--- :closed_lock_with_key: Installing Secrets" + +bundle exec fastlane run configure_apply + +echo "--- 🧪 Testing" + +bundle exec fastlane build_and_instrumented_test diff --git a/.buildkite/commands/run-unit-tests.sh b/.buildkite/commands/run-unit-tests.sh new file mode 100755 index 00000000000..947e1508a9a --- /dev/null +++ b/.buildkite/commands/run-unit-tests.sh @@ -0,0 +1,7 @@ +#!/bin/bash -eu + +"$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" + +echo "--- 🧪 Testing" + +./gradlew testDebugUnitTest diff --git a/.buildkite/commands/save-cache.sh b/.buildkite/commands/save-cache.sh new file mode 100755 index 00000000000..a01fa8e3746 --- /dev/null +++ b/.buildkite/commands/save-cache.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -euo pipefail + +echo "--- :rubygems: Setting up Gems" +install_gems + +echo "--- :closed_lock_with_key: Installing Secrets" +bundle exec fastlane run configure_apply + +# .buildkite/pipeline.yml -> ./gradlew assembleRelease +# .buildkite/commands/prototype-build.sh -> build_and_upload_prototype_build +# -> prototype_build_type = 'debugProd' +echo "--- 🛠 Download Mobile App Dependencies [Assemble Apps]" +./gradlew assembleDebug +echo "" + +# .buildkite/commands/lint.sh -> ./gradlew :app:lintRelease + ./gradlew :automotive:lintRelease :wear:lintRelease +echo "--- 🧹 Download Lint Dependencies [Lint Apps]" +./gradlew :app:lintDebug :automotive:lintDebug :wear:lintDebug +echo "" + +# .buildkite/pipeline.yml -> ./gradlew testDebugUnitTest +echo "--- 🧪 Download Unit Test Dependencies [Assemble Unit Tests]" +./gradlew assembleDebugUnitTest +echo "" + +# .buildkite/pipeline.yml -> build_and_instrumented_test +# -> gradle(tasks: %w[assembleDebug assembleDebugAndroidTest]) +echo "--- 🧪 Download Android Test Dependencies [Assemble Android Tests]" +./gradlew assembleDebugAndroidTest +echo "" + +echo "--- 💾 Save Cache" +save_gradle_dependency_cache diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 79a1af1ecd8..5265fdab283 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -32,9 +32,7 @@ steps: - "**/build/reports/lint-results*.*" - label: 'Unit tests' - command: | - echo "--- 🧪 Testing" - ./gradlew testDebugUnitTest + command: ".buildkite/commands/run-unit-tests.sh" plugins: [$CI_TOOLKIT] - label: 'Dependency diff' @@ -51,25 +49,13 @@ steps: plugins: [$CI_TOOLKIT] - label: "Instrumented tests" - command: | - echo "--- :rubygems: Setting up Gems" - install_gems - echo "--- :closed_lock_with_key: Installing Secrets" - bundle exec fastlane run configure_apply - echo "--- 🧪 Testing" - bundle exec fastlane build_and_instrumented_test + command: ".buildkite/commands/run-instrumented-tests.sh" plugins: [$CI_TOOLKIT] artifact_paths: - "**/build/instrumented-tests/**/*" - label: "Assemble release APK" - command: | - echo "--- :rubygems: Setting up Gems" - install_gems - echo "--- :closed_lock_with_key: Installing Secrets" - bundle exec fastlane run configure_apply - echo "--- ⚙️ Building release variant" - ./gradlew assembleRelease -PskipSentryProguardMappingUpload=true + command: ".buildkite/commands/assemble-release-apk.sh" plugins: [ $CI_TOOLKIT ] artifact_paths: - "**/build/outputs/apk/**/*" diff --git a/.buildkite/schedules/dependency-cache.yml b/.buildkite/schedules/dependency-cache.yml new file mode 100644 index 00000000000..1e61ab6a5f1 --- /dev/null +++ b/.buildkite/schedules/dependency-cache.yml @@ -0,0 +1,22 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json +--- + +agents: + queue: "android" + +steps: + - label: "💾 Download and Cache Dependencies" + command: .buildkite/commands/save-cache.sh + plugins: [$CI_TOOLKIT] + +notify: + - slack: + channels: + - "#android-core-notifs" + message: "The dependency cache has been updated." + if: build.state == "passed" + - slack: + channels: + - "#android-core-notifs" + message: "Failure to update the dependency cache." + if: build.state == "failed" diff --git a/.buildkite/shared-pipeline-vars b/.buildkite/shared-pipeline-vars index 707a5b0b575..0740bc5b33b 100644 --- a/.buildkite/shared-pipeline-vars +++ b/.buildkite/shared-pipeline-vars @@ -3,4 +3,4 @@ # This file is `source`'d before calling `buildkite-agent pipeline upload`, and can be used # to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. -export CI_TOOLKIT="automattic/a8c-ci-toolkit#3.7.1" +export CI_TOOLKIT="automattic/a8c-ci-toolkit#3.9.1"