Task #7868
closedStory #8093: [EPIC] Release automation
[RELEASING] Build all artifacts before publishing any
100%
Description
In the past it became a problem, that some artifacts (bindings) failed to build after the main python package landed on pypi.
In order to avoid such situations, we should generate and collect all packages and bindings for a Release before stating to publish any.
Updated by daviddavis almost 2 years ago
I believe this is the task we need to work on next in terms of improving our release automation.
Background¶
Currently, at a high level, our workflow is this:
- Release person tags the release and pushes to the repo
- Release person triggers a release
- The release workflow runs the tests
- If the tests all pass, the release workflow builds the artifacts and then publishes them.
The artifacts include the pypi package, the bindings (ruby and python), and the docs.
New Workflow¶
I'd propose we create the following workflow:
- Release person triggers a release
- The release automation creates the tag and artifacts (note: this step does not push/publish the tag or artifacts)
- The release automation runs the tests against these artifacts
- If the tests pass, the release automation pushes the tag and the artifacts
I believe step 2 should also check for a pre-existing tag and use it if it already exists. This would allow the workflow to be idempotent. The scripts that publish the artifacts in step 4 are already idempotent.
I think this change to our workflow will help us to move toward the unified release pipeline where we can also test against the installer, etc as well.
Updated by mdepaulo@redhat.com almost 2 years ago
- Groomed changed from No to Yes
- Sprint set to Sprint 96
Updated by dkliban@redhat.com almost 2 years ago
- Status changed from NEW to ASSIGNED
- Assignee set to dkliban@redhat.com
Updated by pulpbot almost 2 years ago
- Status changed from ASSIGNED to POST
Added by dkliban@redhat.com almost 2 years ago
Updated by dkliban@redhat.com almost 2 years ago
- Status changed from POST to MODIFIED
- % Done changed from 0 to 100
Applied in changeset plugin_template|eb08e95aac1757504b804c39a5135111207a05ac.
Updated by daviddavis almost 2 years ago
- Status changed from MODIFIED to CLOSED - CURRENTRELEASE
Adds a new release GitHub Actions workflow
The new release workflow has 3 stages:
Build artifacts - build the plugin Python packages or downloads them from PyPI.
Test - build a container from the package in the previous stage. Build the Python and Ruby clients. Build docs. Run unit and function tests using filesystem and S3 storage.
Publish - publish all packages to PyPI if they are not present there. Publish Ruby client to RubyGems.org if it's not there. Publish docs. Push tag to GitHub.
fixes: #7868 https://pulp.plan.io/issues/7868