Becuase
* We added a second deploy to a test tag as part of debugging dockerhub
deploy issues
* The deploy issues are resolved now and it is safe to remove this
duplicate deploy
This commit
* Removes duplicate deploy
fixes#10297
Because
- Currently token `GH_USER` on CI has limited scope associated with it,
and we want to fetch resources from private repo. We have added new
token `GH_EXTERNAL_CONFIG_TOKEN` with the required scope
This commit
- Update external config job to use new token value
Fixes#10273
Because
* In the Dockerfile for application services we call apt-get upgrade
* We were implicitly using the debian:bullseye build dated 20240130
* Calling apt-get upgrade would silently pass becuase no packages had
been updated
* On Feb 12 some package updated and so the call to apt-get upgrade
produced a prompt to continue
* We had not included the -y flag to accept that prompt
* This caused Docker to abort the build with a spectacularly unhelpful
stack trace
This commit
* Locks the application services Dockerfile to a specific tag of
debian:bullseye
* Adds the -y flag to apt-get upgrade
* Forces all tests to run on changes to `application-services/`
fixes#10270
Because:
- we have standardized on using a single version of application-services
across all Experimenter, Cirrus, and integration tests; and
- we do not want to manually manage updating this version
This commit:
- adds a CI task to open a new PR for new application-services
nightlies.
Fixes https://github.com/mozilla/experimenter/issues/9688
Because
- The sdk integration test image was stuck on application-services
v97.5.1 due to build system changes, which prevented landing any new
targeting using new targeting attributes from v98 onwards.
- The current system of periodically pushing a integration test image
and pulling that pre-built image in tests lead to headaches and
issues.
- I discovered several oddities in the current
integration-test-nimbus-rust setup (specifying a webdriver driver,
sudo commands that never ran because sudo was not installed).
- The new application services has a very different NimbusClient
interface from the one currently used in tests.
This commit
- Adds a `experimenter:megazords` container, which is responsible for
downloading a tagged nightly of the Cirrus and Nimbus-Experimenter
megazords.
- Adds a new `experimenter:integration-tests` container, which takes the
place of the old "nimbus-rust-image" container. This container is very
barebones, and only includes the application services megazord (copied
from the other container) and tox.
- Removes the old `Dockerfile-rust-image` and its publishing steps from
CI.
- Configures our integration tests to build the image on the fly instead
of pulling a pre-built image from a registry.
- Cleans up a few things in the `test_mobile_targeting.py` suite and
updates the code to match the new interfaces.
- Updates the `integration_test_nimbus_rust` task to run tox with `-vv`,
which includes the output of any commands issued.
Fixes#9820
Because
* Building Cirrus can be time consuming
* Cirrus is not necessary for many integration tests or local workflows
* We can add a flag to enable/disable cirrus to speed up the integration
tests or local workflows that don't involve Cirrus
This commit
* Adds a flag to enable/disable Cirrus in the Makefile
* Sets the flag automatically for all Cirrus make commands
* Sets the flag for Cirrus integration tests
fixes#9910
Because
- fetching feature manifests can fail (see #9804 for an example);
- the fetch command does not hard fail when an individual fetch fails;
and
- we are generating a summary of all the fetches
This commit
- updates the fetch command to hard fail if there are fetch failures and
no
successes (i.e., in the case where it would not open or update a PR);
- adds a flag to the fetch command to write the summary to a file; and
- opens and updates PRs with a summary of the fetches in the PR
description
Fixes#9815
Because:
- should-pr.py is written in Python 3; and
- the default Python on Ubuntu 20.04 is Python 2.7
This commit:
- explicitly runs should-pr.py with Python 3 in CI.
Fixes#9825
Because
* We run many integration tests against many applications for coverage
* As we add more applications, we don't want to disrupt the existing
tests
* Some integration tests were specifying applications by excluding other
applications becuase IOS and FOCUS_IOS would both match the same string
IOS
* This was resulting in some test runs running against multiple
applications which is slowing down CI and PRs
This commit
* Renames applications to have unique names
* Updates all the config references to use those names
Fixes#9718
Because
- we only want to merge PRs that have feature configuration changes
this commit
- adds a script to check if there are only `.ref-cache` changes;
- updates the `update_external_configs` CI job to call that script and;
- only push to the `external-config` branch and open PRs if that script
reports changes.
Fixes#9806
Because
- we want to keep track of features on individual product versions
This commit
- fetches features from releases going back 5 versions in FML apps; and
- does not do an initial import for the FML apps because it is a very
large change (see #9751).
Fixes#9685
Because
* We have seen failures while pulling from dockerhub tags
* This may be caused by the tag being corrupted after being in use for
so long
* Let's try pushing to a new tag to see if we see the same failures
This commit
* Pushes to a new experimenter tag in dockerhub
fixes#9752
Because:
- #9712 broke integration tests on fork PRs by referencing
$DOCKERHUB_REPO, which is not available in fork PRs
this commit:
- hardcodes the dockerhub repo (mozilla/experimenter) for pulling the
image, which will allow fork PRs to run integration tests.
Fixes#9716
Because:
- #9694 broke integration tests;
This commit
- reverts #9694; and
- adds an explicit pull of our integration test image in our CI
workflow.
Fixes#9707
Because
- we don't want to manually build application-services megazords
ourselves for each container; and
- application-services publishes megazord artifacts on Taskcluster
This commit
- adds a new as-builder docker container to download cirrus and nimbus
megazords with the appropriate binaries for the platform as Python
packages;
- updates the cirrus and experimenter containers to copy the megazords
from the as-builder container;
- updates cirrus and experimenter to refer to the new megazord packages;
- updates cirrus to be based on Debian Bullseye so it can use the
generated binaries; and
- updates the Dockerfile-rust-image container to be built on top of
as-builder in CI.
Becuase
* We were evaluating Docker Hydrobuild as part of its beta program
* We did not find that it improved CI times
This commit
* Removes Docker Hydrobuild from CI
Co-authored-by: Yashika Khurana <yashikakhuranayashika@gmail.com>
Because
- We have a demo app that can test the integration end to end, it has
the frontend and backend.
- We could stand up the experimenter, launch the experiment or rollout,
and push to RS, Cirrus can sync to RS and then the frontend can send a
request to the backend and then backend can reach out to Cirrus and can
ask for the feature config
- When the backend receives the response, can send the response back to
the frontend
This commit
- Tests end-to-end integration between the experimenter, RS, Cirrus, and
Demo app
- Test both the experiment and rollout end to end
fixes#9387
Because
* As we add a wider variety of elements to the Nimbus project including
binary packages it becomes increasingly important to have a consistent
environment for each of our modules
* Using Docker allows us to control the environment each module runs in
and use a consistent base layer
* Dockerizing the schemas package will allow us to use identical Python,
Node, and Rust environments as the other modules in Nimbus
This commit
* Wraps the schemas module in a Dockerfile that is consistent with the
other modules in Nimbus
Because
* We've been seeing consistent intermittent failures with pulling images
from dockerhub
* An alternative is to use the Google Container Registry instead of
Dockerhub
* If we have better luck with Google Container Registry then we can use
that and deprecate Dockerhub
This commit
* Pushes to Google Container Registry in addition to Dockerhub
Because
* We enabled the experimental Docker Hydrobuild remote builder for our
CI jobs
* Hydrobuild experienced an outage that prevented our CI jobs from
running
* We disabled Hydrobuild until it could be rectified by the Docker team
* Fixes have been deployed and it should now be safe to re enable
This commit
* Re enables Docker Hydrobuild in CI
Because
* When we disabled hydrobuild we also disabled logging into docker
* Logging into docker is necessary at the deploy step
This commit
* Logs into docker if possible but disables hydrobuild
Because
* We disabled Hydrobuild in #9535
* We must also disable the multiplatform builds in the deploy step if
Hydrobuild is unavailable
This commit
* Disables multiplatform builds in the deploy steps of Experimenter and
Cirrus
Because
* Docker Hydrobuild has stopped functioning and is blocking our CI tasks
This commit
* Disables Docker Hydrobuild until it is functioning and we can re
enable it
Because
* We recently moved the FML parsing into the Experimenter container as
part of fetching external configs
* The Experimenter container requires an environment file to start
This commit
* Uses the .env.sample file as part of the fetch_external_configs circle
task
Because
* We now include binary assets that must target both amd64 and arm64
* We must verify that these are available and functioning in CI
This commit
* Adds an arm64 instance for cirrus and experimenter check to verify
that our containers will build and run on both platforms
* Disables path checks for changes in the root project dir or .circleci
folder or on main branch so that we run all tests if anything project
wide changes
* Removes now redundant branch/main copies of experimenter since path
checks will be disabled on main
Because
* We have many tasks in Circle that depend on a Docker account
* The docker account depends on which module is being tested ie
Experimenter, Cirrus
* We should explicitly parameterize the Docker setup step with the
credentials needed for that module
This commit
* Parameterizes the setup_docker step in circle
* Uses the appropriate credentials for each of Experimenter and Cirrus
in each circle task
Because
* The docker login step for deploying cirrus was removed in a previous
pr
* This login step is necessary becuase cirrus uses different credentials
than experimenter to deploy to dockerhub
This commit
* Restores the docker login command to the cirrus deploy step
Because
* Docker Hydrobuild requires access to environment secrets
* PRs from forks will not have access to environment secrets
This commit
* Disables hydrobuild for PRs that do not have access to secrets
* Re enables Circle docker layer caching
---------
Co-authored-by: Mike Williams <102263964+mikewilli@users.noreply.github.com>
Because
* We now have access to Docker Hydrobuild
* This allows us to use a shared cloud builder for our docker images so
we can share a build cache between CI and local dev
This commit
* Updates the makefile to explicitly use docker buildx
* Updates the circle config to install the latest docker client and
setup a cloud builder
Because
- we want to use the population sizing schemas for graphql and UI
This commit
- sets up generation of typescript schemas from the pydantic schemas
- sets up publishing the typescript schemas to npm
Because
- Enrollment metrics are necessary for experiment analysis
This commit
- Defines the method by which the Cirrus container records enrollment
metrics
---------
Co-authored-by: yashikakhurana <yashikakhuranayashika@gmail.com>
Because
* We recently renamed some commands in the circle config for consistency
* We accidentally broke the make command for checking the schemas
* It was missed because they didn't run becuase they failed the path
check
This commit
* Fixes the make check schemas command in the circle config
Because
* Now that the cirrus container is ready for use we need to deploy it to
dockerhub
This commit
* Adds a circle step to build and deploy the cirrus container to
dockerhub
Co-authored-by: yashikakhurana <yashikakhuranayashika@gmail.com>
Because
- twine isn't installed until poetry installs dependencies
- `poetry build` doesn't install dependencies
This commit
- adds the `schemas_install` to the deploy's prereqs
Because
- the circle config was assuming package directory
- the circle working dir was not set
- the circle image could not find the package to build/deploy
This commit
- uses make commands that drop into the correct directory before
building and deploying
Because
* We recently refactored the circleci config to update the path checks
* In the course of doing so we removed the command to actually run the
experimenter unit tests. Whoops!
This commit
* Restores the make check command to the experimenter unit tests in
circle
Becuase
* The experimenter repo now hosts many projects
* Not all tests will be related to changes in all of those folders
* We can conditionally check which tests to run based on the paths of
changes in a PR
This commit
* Updates all of the file path checks on all of the circleci tasks so we
don't run unnecessary tests in PRs
Because
- We want to have a better data contract between Jetstream and
Experimenter
This commit
- Creates schemas for the data products that Jetstream produces
- Adds a general python package structure with basic schema tests
Because
* We run make check on each branch but also on main before deploys
* This last check is to make sure that main is still in a healthy state
before it is deployed
* We added path filters to prevent certain circle tasks from running
depending on which files were changed
* This path filter was preventing make check from running on main
This commit
* Splits the check job into two, one for branches that includes the path
check, and one for main that excludes it
Because
* We've been seeing intermittent failures in the enrollment integration
tests
* It may be caused by parallel tests colliding when they reset the ping
server cache
This commit
* Disables parallel runs for the enrollment integration tests
Because:
* Diagnosing errors on CI can be hard without seeing what the page looks
like
This Commit:
* Adds HTML reporting which will include screenshots for debugging
errors.
Because
* We only need to run the targeting tests for changes in the experiments
or targeting apps
* We were checking those file paths in the release and beta circle runs
but not nightly
This commit
* Adds the correct file path checks to the nightly targeting run