125 lines
4 KiB
Markdown
125 lines
4 KiB
Markdown
## Create a new release with Github Actions
|
|
|
|
### Automatic bumping of version
|
|
|
|
To execute `cz bump` in your CI, and push the new commit and
|
|
the new tag, back to your master branch, we have to:
|
|
|
|
1. Create a personal access token. [Follow the instructions here](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line#creating-a-token). And copy the generated key
|
|
2. Create a secret called `PERSONAL_ACCESS_TOKEN`, with the copied key, by going to your
|
|
project repository and then `Settings > Secrets > Add new secret`.
|
|
3. In your repository create a new file `.github/workflows/bumpversion.yml`
|
|
with the following content.
|
|
|
|
!!! warning
|
|
If you use `GITHUB_TOKEN` instead of `PERSONAL_ACCESS_TOKEN`, the job won't trigger another workflow. It's like using `[skip ci]` in other CI's.
|
|
|
|
```yaml
|
|
name: Bump version
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
bump-version:
|
|
if: "!startsWith(github.event.head_commit.message, 'bump:')"
|
|
runs-on: ubuntu-latest
|
|
name: "Bump version and create changelog with commitizen"
|
|
steps:
|
|
- name: Check out
|
|
uses: actions/checkout@v3
|
|
with:
|
|
token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}"
|
|
fetch-depth: 0
|
|
- name: Create bump and changelog
|
|
uses: commitizen-tools/commitizen-action@master
|
|
with:
|
|
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
|
```
|
|
|
|
Push to master and that's it.
|
|
|
|
### Creating a github release
|
|
|
|
You can modify the previous action.
|
|
|
|
Add the variable `changelog_increment_filename` in the `commitizen-action`, specifying
|
|
where to output the content of the changelog for the newly created version.
|
|
|
|
And then add a step using a github action to create the release: `softprops/action-gh-release`
|
|
|
|
The commitizen action creates an env variable called `REVISION`, containing the
|
|
newely created version.
|
|
|
|
```yaml
|
|
- name: Create bump and changelog
|
|
uses: commitizen-tools/commitizen-action@master
|
|
with:
|
|
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
|
changelog_increment_filename: body.md
|
|
- name: Release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
body_path: "body.md"
|
|
tag_name: ${{ env.REVISION }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
```
|
|
|
|
### Publishing a python package
|
|
|
|
Once the new tag is created, triggering an automatic publish command would be desired.
|
|
|
|
In order to do so, the credential needs to be added with the information of our PyPI account.
|
|
|
|
Instead of using username and password, we suggest using [api token](https://pypi.org/help/#apitoken) generated from PyPI.
|
|
|
|
After generate api token, use the token as the PyPI password and `__token__` as the username.
|
|
|
|
Go to `Settings > Secrets > Add new secret` and add the secret: `PYPI_PASSWORD`.
|
|
|
|
Create a file in `.github/workflows/pythonpublish.yaml` with the following content:
|
|
|
|
```yaml
|
|
name: Upload Python Package
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*" # Will trigger for every tag, alternative: 'v*'
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.x"
|
|
- name: Install Poetry
|
|
uses: snok/install-poetry@v1
|
|
with:
|
|
version: latest
|
|
virtualenvs-in-project: true
|
|
virtualenvs-create: true
|
|
- name: Install dependencies
|
|
run: |
|
|
poetry --version
|
|
poetry install
|
|
- name: Build and publish
|
|
env:
|
|
PYPI_USERNAME: __token__
|
|
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
|
run: |
|
|
./scripts/publish
|
|
```
|
|
|
|
Notice that we are using poetry, and we are calling a bash script in `./scripts/publish`. You should configure the action, and the publish with your tools (twine, poetry, etc.). Check [commitizen example](https://github.com/commitizen-tools/commitizen/blob/master/scripts/publish)
|
|
You can also use [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) to publish your package.
|
|
|
|
Push the changes and that's it.
|