CD #1
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
name: "CD" | |
on: | |
workflow_dispatch: | |
inputs: | |
release-type: | |
description: "Type of release?" | |
required: true | |
type: choice | |
options: | |
- patch | |
- minor | |
- major | |
jobs: | |
release: | |
name: "Release" | |
if: github.ref == 'refs/heads/master' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.7" | |
- name: "Install Poetry" | |
uses: snok/install-poetry@5e4414407e59f94f2148bcb253917dfc22dee7d9 # v1.3.0 | |
with: | |
virtualenvs-create: true | |
virtualenvs-in-project: true | |
- name: "Bump pyproject.toml version" | |
id: bump | |
run: | | |
poetry version ${{ github.event.inputs.release-type }} | |
echo "::set-output name=version::$(poetry version --short)" | |
- name: "Bump `git_vector.__version__`" | |
run: sed -i 's/^__version__ *=.*/__version__ = "${{ steps.bump.outputs.version }}"/' git_vector/__init__.py | |
- name: "Update the changelog" | |
# Find the first line that starts with `###` or `## [<number>` from the CHANGELOG and insert the new version header before it. | |
run: sed -i "0,/^\(###\|## *\[[0-9]\).*/{s//## [${{ steps.bump.outputs.version }}] - $(date -u '+%Y-%m-%d')\n\n&/}" CHANGELOG.md | |
- name: "Extract version's changelog for release notes" | |
# 1. Find the lines between the first `## [<number>` and the second `## [<number>`. | |
# 2. Remove all leading and trailing newlines from the output. | |
run: sed '1,/^## *\[[0-9]/d;/^## *\[[0-9]/Q' CHANGELOG.md | sed -e :a -e '/./,$!d;/^\n*$/{$d;N;};/\n$/ba' > release_notes.txt | |
- name: "Commit and tag the changes" | |
run: | | |
git config user.name 'github-actions' | |
git config user.email '41898282+github-actions[bot]@users.noreply.github.com' | |
git add pyproject.toml git_vector/__init__.py CHANGELOG.md | |
git commit --message='Release ${{ steps.bump.outputs.version }}' | |
git tag --annotate --message='' v${{ steps.bump.outputs.version }} | |
- name: "Build the wheel" | |
run: poetry build | |
- name: "Publish to PyPI" | |
run: poetry publish | |
env: | |
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }} | |
- name: "Push the changes" | |
run: git push --follow-tags | |
- name: "Create a GitHub release" | |
uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5 # v1 | |
with: | |
tag_name: v${{ steps.bump.outputs.version }} | |
name: v${{ steps.bump.outputs.version }} | |
body_path: release_notes.txt |