This repository contains the manifests and scripts to automate the packaging of SWH applications into (fairly) reproducible Python virtual environments, and then onto container images.
To move away from our legacy Debian-based packaging and deployment workflow, we are using Python virtual environments to generate (fairly) reproducible deployment environments, that would be consistent between:
- docker-based local environments
- "bare VM/Metal" deployments (on Debian systems still managed by puppet)
- elastic deployments based on k8s
- CI environments used for testing packages
We want the input for generating these environments to be declarative (for
instance, "I want an environment with swh.provenance
"), and the resulting
environments to be:
- frozen (using a consistent, known set of package versions)
- kept up to date automatically (for our swh packages, as well as the external dependencies)
- tested before publication (at least to a minimal extent, e.g. ensuring that the tests of the declared input modules are successful before tagging an application as ready to deploy)
Each standalone application is generated from an input requirements.txt
file. Out of this, a virtualenv is generated and frozen into a
requirements-frozen.txt
file, which is then used to build container images
(when associated with a Dockerfile
and an entry point script).
The frozen requirements file can also be used to deploy virtual environments directly, e.g. on an existing VM or bare metal server.