# CI Notes
## Goals:
* [DONE] Release Pulpcore once a week (at least).
* For literally "no changes" we don't need to.
* Only bump the new version if there are features.
* [DONE] Have plugins in a state that they can release at any time.
* Don't integrate with source versions.
* [LOW PRIO]Update CI workflow can also run the black (formatting) version from dev_requirements.txt.
* This could be turned into a reusable workflow.
* Nice to have, does not save a lot of work.
* Make the CI runnable as a local user.
* Max 3 commands.
* `*-compose up`
* `make test`
* using the pulp-minimal images with a plugin specific build step in compose
* Pull request and Nightly CI should only differ by which tests are run. No publishing of docs (or anything) on nightly.
* linting should not be on nightly
* [DONE] Release pipeline should not need to run tests before publishing packages.
* The main branch is constantly ready to release.
* [MID PRIO] Clean nightly published Clients from PyPI and rubygems.
## What is the CI supposed to do?
1. Check commit message and requirements files (ready to ship)
2. Lint the code
3. Build a Pulp container (with pulpcore or plugin from source and additional plugins from pypi)
4. Start a Pulp with that container
- In several different scenario (storage; rerouted).
5. Build bindings for all pulp components in that container
6. Install test dependencies and bindings
7. Run functional tests from multiple components
8. Run unittests, ideally in only one runner/scenario
## Ideas:
* Use docker/podman-compose to spin up the stack.
* Separate files for different scenarios.
* Separate compose files and separate settings files that provide storage configs.
* Can we reuse the container images across workflows/jobs?
* Add `extras_require` with "ci", "test", "lint" keys to plugins.
* `pulp_file[ci]` would depend on `pulp-certguard` for example.
* `pulp_file[test]` would depend on `pytest`, `pulp-certguard-client` and `pulp_file-client`.
* This needs to be installed later because the client must be built. (Does it?)
* How can we ensure that the client matching the server plugin version is installed? (The old bindings issue)
* Can we switch all tests to use pulp-glue?
* Are we ready to use the cli for easy ci workflow decisions?
* Is plugin ??? installed?
* How do we know what tests to run when we do not have additional_repos anymore?
# pulp-oci-images
Add a service container to the compose that will
* run migrations
* sets admin password
* add signing services
* Uses the same pulp-minimal image
Remove all the extra stuff from the pulp-api commands
Remove the wait for stuff from pulp-content and pulp-worker commands
Allow the command of the container to pass on additional parameters to the application entry point