Python Release Pipeline #35
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# WARNING: DO NOT EDIT! | |
# | |
# This file was generated by plugin_template, and is managed by it. Please use | |
# './plugin-template --github pulp_python' to update this file. | |
# | |
# For more info visit https://github.com/pulp/plugin_template | |
--- | |
name: Python Release Pipeline | |
on: | |
workflow_dispatch: | |
inputs: | |
release: | |
description: "Release tag (e.g. 3.2.1)" | |
before_script: | |
description: | | |
Bash code to run before bindings and docs are built. This should only be used when re-running | |
a workflow to correct some aspect of the docs. e.g.: git checkout origin/3.14 CHANGES.rst | |
required: false | |
env: | |
RELEASE_WORKFLOW: true | |
jobs: | |
build-artifacts: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.8" | |
- name: Install python dependencies | |
run: | | |
echo ::group::PYDEPS | |
pip install packaging~=21.3 bump2version gitpython towncrier==19.9.0 wheel requests | |
echo ::endgroup:: | |
- name: Configure Git with pulpbot name and email | |
run: | | |
git config --global user.name 'pulpbot' | |
git config --global user.email '[email protected]' | |
- name: Setting secrets | |
run: python3 .github/workflows/scripts/secrets.py "$SECRETS_CONTEXT" | |
env: | |
SECRETS_CONTEXT: ${{ toJson(secrets) }} | |
- name: Create the release commit, tag it, create a post-release commit, and build plugin package | |
run: python .github/workflows/scripts/release.py ${{ github.event.inputs.release }} | |
- name: 'Tar files' | |
run: tar -cvf pulp_python.tar . | |
- name: 'Upload Artifact' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pulp_python.tar | |
path: pulp_python.tar | |
build-bindings-docs: | |
needs: build-artifacts | |
runs-on: ubuntu-latest | |
# Install scripts expect TEST to be set, 'docs' is most appropriate even though we don't run tests | |
env: | |
TEST: docs | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: pulp_python.tar | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.8" | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "2.6" | |
- name: Untar repository | |
run: | | |
tar -xf pulp_python.tar | |
# update to the branch's latest ci files rather than the ones from the release tag. this is | |
# helpful when there was a problem with the ci files during the release which needs to be | |
# fixed after the release tag has been created | |
- name: Update ci files | |
run: | | |
git checkout "origin/${GITHUB_REF##*/}" -- .ci | |
git checkout "origin/${GITHUB_REF##*/}" -- .github | |
- name: Install httpie | |
run: | | |
echo ::group::HTTPIE | |
pip install httpie | |
echo ::endgroup:: | |
echo "HTTPIE_CONFIG_DIR=$GITHUB_WORKSPACE/.ci/assets/httpie/" >> $GITHUB_ENV | |
# Building the bindings and docs requires accessing the OpenAPI specs endpoint, so we need to | |
# setup the Pulp instance. | |
- name: Before Install | |
run: .github/workflows/scripts/before_install.sh | |
shell: bash | |
env: | |
PY_COLORS: '1' | |
ANSIBLE_FORCE_COLOR: '1' | |
GITHUB_PULL_REQUEST: ${{ github.event.number }} | |
GITHUB_PULL_REQUEST_BODY: ${{ github.event.pull_request.body }} | |
GITHUB_BRANCH: ${{ github.head_ref }} | |
GITHUB_REPO_SLUG: ${{ github.repository }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GITHUB_CONTEXT: ${{ github.event.pull_request.commits_url }} | |
- name: Install | |
run: | | |
export PLUGIN_VERSION=${{ github.event.inputs.release }} | |
.github/workflows/scripts/install.sh | |
env: | |
PY_COLORS: '1' | |
ANSIBLE_FORCE_COLOR: '1' | |
GITHUB_PULL_REQUEST: ${{ github.event.number }} | |
GITHUB_PULL_REQUEST_BODY: ${{ github.event.pull_request.body }} | |
GITHUB_BRANCH: ${{ github.head_ref }} | |
GITHUB_REPO_SLUG: ${{ github.repository }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GITHUB_CONTEXT: ${{ github.event.pull_request.commits_url }} | |
shell: bash | |
- name: Additional before_script | |
run: ${{ github.event.inputs.before_script }} | |
shell: bash | |
- name: Install Python client | |
run: .github/workflows/scripts/install_python_client.sh | |
shell: bash | |
- name: Install Ruby client | |
run: .github/workflows/scripts/install_ruby_client.sh | |
shell: bash | |
- name: Upload python client packages | |
uses: actions/upload-artifact@v3 | |
with: | |
name: python-client.tar | |
path: python-client.tar | |
- name: Upload python client docs | |
uses: actions/upload-artifact@v3 | |
with: | |
name: python-client-docs.tar | |
path: python-client-docs.tar | |
- name: Upload ruby client packages | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ruby-client.tar | |
path: ruby-client.tar | |
- name: Build docs | |
run: | | |
export DJANGO_SETTINGS_MODULE=pulpcore.app.settings | |
export PULP_SETTINGS=$PWD/.ci/ansible/settings/settings.py | |
make -C docs/ PULP_URL="https://pulp" diagrams html | |
tar -cvf docs/docs.tar docs/_build | |
- name: Upload built docs | |
uses: actions/upload-artifact@v3 | |
with: | |
name: docs.tar | |
path: docs/docs.tar | |
- name: Logs | |
if: always() | |
run: | | |
echo "Need to debug? Please check: https://github.com/marketplace/actions/debugging-with-tmate" | |
http --timeout 30 --check-status --pretty format --print hb "https://pulp${PULP_API_ROOT}api/v3/status/" || true | |
docker images || true | |
docker ps -a || true | |
docker logs pulp || true | |
docker exec pulp ls -latr /etc/yum.repos.d/ || true | |
docker exec pulp cat /etc/yum.repos.d/* || true | |
docker exec pulp bash -c "pip3 list && pip3 install pipdeptree && pipdeptree" | |
publish: | |
runs-on: ubuntu-latest | |
needs: build-bindings-docs | |
env: | |
TEST: publish | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: pulp_python.tar | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.8" | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "2.6" | |
- name: Configure Git with pulpbot name and email | |
run: | | |
git config --global user.name 'pulpbot' | |
git config --global user.email '[email protected]' | |
- name: Untar repository | |
run: | | |
tar -xf pulp_python.tar | |
# update to the branch's latest ci files rather than the ones from the release tag. this is | |
# helpful when there was a problem with the ci files during the release which needs to be | |
# fixed after the release tag has been created | |
- name: Update ci files | |
run: | | |
git checkout "origin/${GITHUB_REF##*/}" -- .ci | |
git checkout "origin/${GITHUB_REF##*/}" -- .github | |
- name: Setting secrets | |
run: python3 .github/workflows/scripts/secrets.py "$SECRETS_CONTEXT" | |
env: | |
SECRETS_CONTEXT: ${{ toJson(secrets) }} | |
- name: Install python dependencies | |
run: | | |
echo ::group::PYDEPS | |
pip install gitpython requests packaging~=21.3 tweepy | |
echo ::endgroup:: | |
- name: Push branch and tag to GitHub | |
run: bash .github/workflows/scripts/push_branch_and_tag_to_github.sh ${{ github.event.inputs.release }} | |
- name: Download built docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: docs.tar | |
- name: Download Python client docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: python-client-docs.tar | |
- name: Publish docs to pulpproject.org | |
run: | | |
tar -xvf docs.tar | |
.github/workflows/scripts/publish_docs.sh tag ${{ github.event.inputs.release }} | |
- name: Deploy plugin to pypi | |
run: bash .github/workflows/scripts/publish_plugin_pypi.sh ${{ github.event.inputs.release }} | |
- name: Download Python client | |
uses: actions/download-artifact@v3 | |
with: | |
name: python-client.tar | |
- name: Untar python client packages | |
run: tar -xvf python-client.tar | |
- name: Publish client to pypi | |
run: bash .github/workflows/scripts/publish_client_pypi.sh | |
- name: Download Ruby client | |
uses: actions/download-artifact@v3 | |
with: | |
name: ruby-client.tar | |
- name: Untar Ruby client packages | |
run: tar -xvf ruby-client.tar | |
- name: Publish client to rubygems | |
run: bash .github/workflows/scripts/publish_client_gem.sh | |
- name: Update GitHub | |
continue-on-error: true | |
run: | | |
set -euv | |
export COMMIT_MSG=$(git log --format=%B --no-merges -1) | |
export GH_ISSUES=$(echo $COMMIT_MSG | grep -o "GH Issues: .*" | awk '{print $3}') | |
pip install pygithub | |
echo "GH Issues $GH_ISSUES" | |
python .ci/scripts/update_github.py | |
- name: Create release on GitHub | |
run: bash .github/workflows/scripts/create_release_from_tag.sh ${{ github.event.inputs.release }} |