version: 2.1 orbs: gh: circleci/github-cli@2.2 gcp-cli: circleci/gcp-cli@3.1.1 android: circleci/android@2.5.0 macos: circleci/macos@2.5.1 commands: check_file_paths: description: "Check file paths" parameters: paths: type: string default: "" steps: - run: name: Check file paths command: | # Check if CIRCLE_BRANCH is "main" and skip the check if [ "$CIRCLE_BRANCH" == "main" ]; then echo "On main branch. Skipping path checks." exit 0 fi diff_output=$(git diff --name-only main HEAD) echo "Changed files:" echo "$diff_output" if echo "$diff_output" | grep -E '<< parameters.paths >>|^[^/]+$|^.circleci/|application-services/' then echo "Changes detected in << parameters.paths >> or .circleci or root directory. Running tests and linting." else echo "No changes in << parameters.paths >> or .circleci or root directory. Skipping tests and linting." circleci-agent step halt fi docker_login: description: "Login to Docker" parameters: username: type: string password: type: string steps: - run: | echo "<< parameters.password >>" | docker login --username << parameters.username >> --password-stdin jobs: check_experimenter_x86_64: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run tests and linting command: | cp .env.sample .env make check check_experimenter_aarch64: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: arm.large working_directory: ~/experimenter steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run tests and linting command: | cp .env.sample .env make check check_cirrus_x86_64: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/cirrus steps: - checkout - check_file_paths: paths: "cirrus/" - run: name: Run Cirrus tests and linting command: | make cirrus_check check_cirrus_aarch64: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: arm.large working_directory: ~/cirrus steps: - checkout - check_file_paths: paths: "cirrus/" - run: name: Run Cirrus tests and linting command: | make cirrus_check check_schemas: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - checkout - check_file_paths: paths: "schemas/" - run: name: Run Schemas tests and linting command: | make schemas_check integration_nimbus_desktop_release_targeting: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -k FIREFOX_DESKTOP -m run_targeting -n 4 --reruns 1 MOZ_REMOTE_SETTINGS_DEVTOOLS: 1 # allows us to override and set the remote settings URL steps: - checkout - check_file_paths: paths: "experimenter/experimenter/targeting|experimenter/experimenter/experiments|experimenter/tests" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_desktop_beta_targeting: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-beta PYTEST_ARGS: -k FIREFOX_DESKTOP -m run_targeting -n 4 --reruns 1 FIREFOX_BETA: 1 MOZ_REMOTE_SETTINGS_DEVTOOLS: 1 # allows us to override and set the remote settings URL steps: - checkout - check_file_paths: paths: "experimenter/tests/firefox-desktop-beta-build.env" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_desktop_nightly_targeting: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -k FIREFOX_DESKTOP -m run_targeting -n 2 --reruns 1 UPDATE_FIREFOX_VERSION: true steps: - checkout - check_file_paths: paths: "experimenter/experimenter/targeting|experimenter/experimenter/experiments|experimenter/tests" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_remote_settings_launch: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -m remote_settings_launch --reruns 1 steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_remote_settings_all: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: medium working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -k FIREFOX_DESKTOP -m remote_settings_all --reruns 1 steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_desktop_enrollment: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: xlarge working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -k FIREFOX_DESKTOP -m desktop_enrollment --reruns 1 UPDATE_FIREFOX_VERSION: true steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" no_output_timeout: 30m - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_desktop_ui: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -m nimbus_ui -n 2 --reruns 1 steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_sdk_targeting: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: medium working_directory: ~/experimenter steps: - checkout - check_file_paths: paths: "experimenter/experimenter/targeting|experimenter/experimenter/experiments|experimenter/tests" - run: name: Run rust integration tests command: | cp .env.integration-tests .env make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus_rust - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_nimbus_cirrus: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release PYTEST_ARGS: -k DEMO_APP -m cirrus_enrollment --reruns 1 steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run integration tests command: | cp .env.integration-tests .env export CIRRUS=1 make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="$PYTEST_ARGS" - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_legacy: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: large working_directory: ~/experimenter environment: FIREFOX_VERSION: nimbus-firefox-release steps: - checkout - check_file_paths: paths: "experimenter/" - run: name: Run integration tests command: | cp .env.sample .env make refresh up_prod_detached integration_test_legacy - store_artifacts: path: ~/experimenter/experimenter/tests/integration/test-reports/report.htm integration_test_android_fenix: executor: name: android/android-machine resource-class: xlarge tag: default environment: PYTEST_ARGS: --reruns 1 steps: - checkout - check_file_paths: paths: "experimenter/tests/firefox-fenix-build.env" - attach_workspace: at: /tmp/experimenter - android/accept-licenses - android/create-avd: avd-name: myavd install: true system-image: system-images;android-34;google_apis;x86_64 - android/start-emulator: avd-name: myavd post-emulator-launch-assemble-command: adb devices - run: name: Install APKs command: | adb install /tmp/experimenter/tests/integration/nimbus/android/app-fenix-debug-androidTest.apk adb install /tmp/experimenter/tests/integration/nimbus/android/app-fenix-x86_64-debug.apk - run: name: Download test files and run command: | curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/mozilla/application-services/main/install-nimbus-cli.sh | bash pip install poetry make integration_test_nimbus_fenix PYTEST_ARGS="$PYTEST_ARGS" - android/save-gradle-cache: cache-prefix: v1a - store_artifacts: path: /home/circleci/project/test-reports/report.htm integration_test_ios_fennec: macos: xcode: 15.3.0 steps: - checkout - check_file_paths: paths: "experimenter/tests/firefox-fenix-build.env" - macos/preboot-simulator: version: "17.4" platform: "iOS" device: "iPhone 15" - attach_workspace: at: /tmp/experimenter - run: name: Clone Firefox iOS Repo command: git clone https://github.com/mozilla-mobile/firefox-ios.git - run: name: Install nimbus-cli command: curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/mozilla/application-services/main/install-nimbus-cli.sh | bash - run: name: Setup and build Firefox app command: | cd firefox-ios sh ./bootstrap.sh cd firefox-ios pip3 install virtualenv poetry xcodebuild build-for-testing -project Client.xcodeproj -scheme Fennec -configuration Fennec -sdk iphonesimulator -quiet -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.4' - run: name: Run Tests command: | cd firefox-ios/firefox-ios/firefox-ios-tests/Tests/ExperimentIntegrationTests export SIMULATOR_UDID=$(python get_specific_device_udid.py) cp -f ~/project/experimenter/tests/integration/nimbus/ios/test_ios_integration.py ./ poetry install poetry run pytest -k test_ios_integration.py --feature ios_enrollment - store_artifacts: path: ~/project/firefox-ios/firefox-ios/firefox-ios-tests/Tests/ExperimentIntegrationTests/results/index.html create_fenix_fennec_recipes: working_directory: ~/experimenter machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - checkout - run: name: Create experiment on experimenter command: | cp .env.integration-tests .env export CIRRUS=1 make refresh SKIP_DUMMY=1 PYTEST_SENTRY_DSN=$PYTEST_SENTRY_DSN CIRCLECI=$CIRCLECI up_prod_detached integration_test_nimbus PYTEST_ARGS="-k test_create_mobile_experiment_for_integration_test" - persist_to_workspace: root: experimenter paths: - tests/integration/ios_recipe.json - tests/integration/fenix_recipe.json deploy_experimenter: working_directory: ~/experimenter machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - checkout - docker_login: username: $DOCKER_USER password: $DOCKER_PASS - run: name: Deploy to Dockerhub command: | ./scripts/store_git_info.sh make build_prod docker tag experimenter:deploy ${DOCKERHUB_REPO}:latest docker push ${DOCKERHUB_REPO}:latest GIT_SHA=$(git rev-parse --short HEAD) docker tag experimenter:deploy ${DOCKERHUB_REPO}:${GIT_SHA} docker push ${DOCKERHUB_REPO}:${GIT_SHA} - gcp-cli/setup - run: name: Deploy to Google Container Registry command: | echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=- gcloud --quiet config set project ${GOOGLE_PROJECT_ID} gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE} gcloud auth configure-docker DOCKER_IMAGE="gcr.io/${GOOGLE_PROJECT_ID}/experimenter" docker tag experimenter:deploy ${DOCKER_IMAGE}:latest docker push "${DOCKER_IMAGE}:latest" GIT_SHA=$(git rev-parse --short HEAD) docker tag experimenter:deploy ${DOCKERHUB_REPO}:${GIT_SHA} docker push ${DOCKERHUB_REPO}:${GIT_SHA} - run: name: Prepare environment variables for OIDC authentication command: | echo 'export GOOGLE_PROJECT_ID="moz-fx-experimenter-prod-6cd5"' >> "$BASH_ENV" echo "export OIDC_WIP_ID=$GCPV2_WORKLOAD_IDENTITY_POOL_ID" >> "$BASH_ENV" echo "export OIDC_WIP_PROVIDER_ID=$GCPV2_CIRCLECI_WORKLOAD_IDENTITY_PROVIDER" >> "$BASH_ENV" echo "export GOOGLE_PROJECT_NUMBER=$GCPV2_WORKLOAD_IDENTITY_POOL_PROJECT_NUMBER" >> "$BASH_ENV" echo "export OIDC_SERVICE_ACCOUNT_EMAIL=$GCP_SERVICE_ACCOUNT_EMAIL" >> "$BASH_ENV" - gcp-cli/setup: use_oidc: true - run: name: Deploy to Google Artifact Registry command: | gcloud auth configure-docker us-docker.pkg.dev --quiet DOCKER_IMAGE="us-docker.pkg.dev/moz-fx-experimenter-prod-6cd5/experimenter-prod/experimenter" docker tag experimenter:deploy ${DOCKER_IMAGE}:latest docker push "${DOCKER_IMAGE}:latest" GIT_SHA=$(git rev-parse --short HEAD) docker tag experimenter:deploy ${DOCKER_IMAGE}:${GIT_SHA} docker push ${DOCKER_IMAGE}:${GIT_SHA} deploy_cirrus: working_directory: ~/cirrus machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - checkout - docker_login: username: $DOCKERHUB_CIRRUS_USER password: $DOCKERHUB_CIRRUS_PASS - run: name: Deploy to latest command: | make cirrus_build docker tag cirrus:deploy ${DOCKERHUB_CIRRUS_REPO}:latest docker push ${DOCKERHUB_CIRRUS_REPO}:latest deploy_schemas: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - checkout - run: name: Check for package version change in last commit before proceeding. command: | if git diff main HEAD~1 schemas/pyproject.toml | grep 'version' then echo "Found changes to package version dir, proceeding with deployment." else echo "No changes in package version. Skipping mozilla-nimbus-schemas deployment." circleci-agent step halt fi - run: name: Create the distribution files command: | make schemas_dist - run: name: Upload to PyPI command: | # Relies on the TWINE_USERNAME and TWINE_PASSWORD environment variables configured at: # https://app.circleci.com/settings/project/github/mozilla/experimenter/environment-variables # For more on twine, see: # https://twine.readthedocs.io/en/latest/ make schemas_deploy_pypi SCHEMAS_ENV="-e TWINE_USERNAME=${TWINE_USERNAME} -e TWINE_PASSWORD=${TWINE_PASSWORD}" - run: name: NPM Authentication command: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc - run: name: Upload to NPM command: | # Relies on the NPM_TOKEN environment variable configured at: # https://app.circleci.com/settings/project/github/mozilla/experimenter/environment-variables make schemas_deploy_npm SCHEMAS_ENV="-e NPM_TOKEN=${NPM_TOKEN}" update_external_configs: working_directory: ~/experimenter machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - add_ssh_keys: fingerprints: - "32:8e:72:0b:9a:a1:1c:b8:7e:90:e1:53:a3:73:68:47" # for git pushes from circleci, since relies on ssh - checkout - gh/setup: token: GH_EXTERNAL_CONFIG_TOKEN # for gh commands from circleci, since relies on user token, since por que no los dos? - run: name: Setup Git command: | git config --local user.name "dataops-ci-bot" git config --local user.email "dataops+ci-bot@mozilla.com" gh config set git_protocol https - run: name: Check for External Config Update command: | git checkout main git pull origin main cp .env.sample .env touch ./experimenter/fetch-summary.txt env GITHUB_BEARER_TOKEN="${GH_EXTERNAL_CONFIG_TOKEN}" make fetch_external_resources FETCH_ARGS="--summary fetch-summary.txt" mv ./experimenter/fetch-summary.txt /tmp/pr-body.txt echo -e "\nCircle CI Task: ${CIRCLE_BUILD_URL}" >> /tmp/pr-body.txt if python3 ./experimenter/bin/should-pr.py then git checkout -B external-config git add . git commit -m 'chore(nimbus): Update External Configs' if (($((git diff external-config origin/external-config || git diff HEAD~1) | wc -c) > 0)) then git push origin external-config -f gh pr create -t "chore(nimbus): Update External Configs" -F /tmp/pr-body.txt --base main --head external-config --repo mozilla/experimenter || \ gh pr edit external-config -F /tmp/pr-body.txt else echo "Changes already committed, skipping" fi else echo "No config changes, skipping" fi update_application_services: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - add_ssh_keys: fingerprints: - "32:8e:72:0b:9a:a1:1c:b8:7e:90:e1:53:a3:73:68:47" # for git pushes from circleci, since relies on ssh - checkout - gh/setup: token: GH_TOKEN # for gh commands from circleci, since relies on user token, since por que no los dos? - run: name: Setup Git command: | git config --local user.name "dataops-ci-bot" git config --local user.email "dataops+ci-bot@mozilla.com" gh config set git_protocol https - run: name: Check for Application Services update command: | git checkout main git pull origin main make update_application_services if (($(git status --porcelain | wc -c) > 0)); then git checkout -B update-application-services git add . git commit -m "chore(nimbus): Update application-services" if (($((git diff update-application-services origin/update-application-services || git diff HEAD~1) | wc -c) > 0)); then git push origin update-application-services -f gh pr create -t "chore(nimbus): Update application-services" -b "" --base main --head update-application-services --repo mozilla/experimenter || echo "PR already exists, skipping" else echo "Changes already committed, skipping" fi else echo "No config changes, skipping" fi check_external_firefox_integrations: machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true working_directory: ~/experimenter steps: - add_ssh_keys: fingerprints: - "32:8e:72:0b:9a:a1:1c:b8:7e:90:e1:53:a3:73:68:47" # for git pushes from circleci, since relies on ssh - checkout - gh/setup: token: GH_TOKEN # for gh commands from circleci, since relies on user token, since por que no los dos? - run: name: Setup Git command: | git config --local user.name "dataops-ci-bot" git config --local user.email "dataops+ci-bot@mozilla.com" gh config set git_protocol https - run: name: Check for external Update command: | ./scripts/external_integration_updater_script.sh build_firefox_versions: working_directory: ~/experimenter machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true steps: - checkout - docker_login: username: $DOCKER_USER password: $DOCKER_PASS - run: name: Build and upload images command: | # Clone last working version to ensure compatibility with aarch64 apple silicon machines git clone --branch selenium-grid-0.27.0 --depth 1 git@github.com:SeleniumHQ/docker-selenium.git cd docker-selenium BUILD_ARGS="--build-arg FIREFOX_VERSION=latest" VERSION="firefox" BUILD_DATE="release" make standalone_firefox BUILD_ARGS="--build-arg FIREFOX_VERSION=devedition-latest" VERSION="firefox" BUILD_DATE="beta" make standalone_firefox docker tag selenium/standalone-firefox:firefox-release ${DOCKERHUB_REPO}:nimbus-firefox-release docker tag selenium/standalone-firefox:firefox-beta ${DOCKERHUB_REPO}:nimbus-firefox-beta docker push ${DOCKERHUB_REPO}:nimbus-firefox-beta docker push ${DOCKERHUB_REPO}:nimbus-firefox-release build_firefox_fenix: working_directory: ~/experimenter machine: image: ubuntu-2004:2023.10.1 docker_layer_caching: true resource_class: xlarge steps: - checkout - check_file_paths: paths: "experimenter/tests/firefox-fenix-build.env" - docker_login: username: $DOCKER_USER password: $DOCKER_PASS - run: name: Build and upload images command: | cd experimenter/tests/integration/nimbus/android docker build -t fenix-builder -f moz-central.test-container.Dockerfile . docker run -d --name fenix-builder fenix-builder docker cp fenix-builder:mozilla-central/mobile/android/fenix/app-fenix-debug-androidTest.apk ./ docker cp fenix-builder:mozilla-central/mobile/android/fenix/app-fenix-x86_64-debug.apk ./ no_output_timeout: 60m - persist_to_workspace: root: experimenter paths: - tests/integration/nimbus/android/app-fenix-debug-androidTest.apk - tests/integration/nimbus/android/app-fenix-x86_64-debug.apk workflows: build_firefox: triggers: - schedule: cron: "0 0 * * *" filters: branches: only: - main jobs: - build_firefox_versions update_configs: triggers: - schedule: cron: "0 * * * *" filters: branches: only: - main jobs: - update_external_configs - update_application_services check_firefox_integrations: triggers: - schedule: cron: "0 12 * * *" filters: branches: only: - main jobs: - check_external_firefox_integrations build: jobs: - check_experimenter_x86_64: name: Check Experimenter x86_64 - check_experimenter_aarch64: name: Check Experimenter aarch64 - check_cirrus_x86_64: name: Check Cirrus x86_64 - check_cirrus_aarch64: name: Check Cirrus aarch64 - check_schemas: name: Check Schemas filters: branches: ignore: - main - create_fenix_fennec_recipes: name: Create fenix and fennec recipes filters: branches: only: - check_external_firefox_integrations - integration_nimbus_desktop_release_targeting: name: Test Desktop Targeting (Release Firefox) filters: branches: ignore: - main - integration_nimbus_desktop_beta_targeting: name: Test Desktop Targeting (Beta Firefox) filters: branches: ignore: - main - integration_nimbus_desktop_nightly_targeting: name: Test Desktop Targeting (Nightly Firefox) filters: branches: ignore: - main - integration_nimbus_desktop_ui: name: Test Desktop Nimbus UI (Release Firefox) filters: branches: ignore: - main - integration_nimbus_remote_settings_launch: name: Test Remote Settings Launch (All Applications) filters: branches: ignore: - main - integration_nimbus_remote_settings_all: name: Test Remote Settings All Workflows (Release Firefox Desktop) filters: branches: ignore: - main - integration_nimbus_desktop_enrollment: name: Test Desktop Enrollment (Release Firefox) filters: branches: ignore: - main - integration_nimbus_sdk_targeting: name: Test SDK Targeting (Release Firefox) filters: branches: ignore: - main - integration_nimbus_cirrus: name: Test Demo app with Cirrus filters: branches: ignore: - main - integration_legacy: name: Test Legacy Desktop (Release Firefox) filters: branches: ignore: - main - integration_test_android_fenix: name: Test Firefox for Android (Fenix) requires: - Create fenix and fennec recipes - Build Fenix APKs filters: branches: only: - check_external_firefox_integrations - integration_test_ios_fennec: name: Test Firefox for iOS (Fennec) requires: - Create fenix and fennec recipes filters: branches: only: - check_external_firefox_integrations - deploy_experimenter: name: Deploy Experimenter context: - gcpv2-workload-identity filters: branches: only: main requires: - Check Experimenter x86_64 - Check Experimenter aarch64 - deploy_cirrus: name: Deploy Cirrus filters: branches: only: main requires: - Check Cirrus x86_64 - Check Cirrus aarch64 - deploy_schemas: name: Deploy Schemas filters: branches: only: main - build_firefox_fenix: name: Build Fenix APKs filters: branches: only: - check_external_firefox_integrations