Move dependencies needed in CI on prod images to separate requirements file. #22898
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes: mozilla/addons#15191
Fixes: mozilla/addons#15066
Description
This PR solves several problems. In a nutshell the changes here enable independent control of the following features when running addons-server:
With these changes, a user can decide if they want to use a local or pulled image, and separately decide which set of dependencies should be installed and whether to mount their local source files to the container.
These changes, in combination, enable several important workflows, for example:
Additionally this PR:
This PR adds a lot of CI testing to ensure this feature set is maintained for the long term. By running the container in a variety of different setups we can validate the expected behavior of a given environment and ensure any code changes don't break these requirements in the future.
Context
Some examples of how you could use make up with these changes.
This image pulls the latest tag (literally production image) and then installs the CI dependencies in the ./deps mount, allowing us to run pytest and linting on a production image (that doesn't have these dependencies natively)
This pulls a specific digest (say from a PR CI) and let's the user run a development version that will install all the dev dependencies for debuging and additionally mount local source files enabling modifications to the source code to debug an issue in CI.
This is the default action of make up and will build the image locally to the development target. The development stage includes almost nothing but the base os level dependencies and environment variables needed to build the rest of the image. This makes the build lightning fast (around 1 second)
Make up will then install the dependencies from a cached bind mount (also really fast) and will include locales and assets on demand (more fast, more good)
Running this should be relatively fast as it removes most of the time intensive tasks from the docker build and let's the containers do as much work asynchronously as possible.
Testing
TODO:
Verify make up fails when web doesn't start.
web
andworker
items in theProcfile
web
is unhealthyVerify site-static files are available in "prod" mode only
make up DOCKER_TARGET=development
/data/olympia/site-static
to be emptyVerify CI dependencies available only with flag set
make up INSTALL_CI_DEPS=True
./scripts/check_pip_packages.sh ci
First create an env in prod mode
Expect no ci or dev dependencies.
now run:
Now expect production and ci deps to be installed
FInally install dev deps
You can trigger these deps to be installed automatically if you set the argument on make up
This will install prod and ci deps in the container.
Checklist
#ISSUENUM
at the top of your PR to an existing open issue in the mozilla/addons repository.