-
Notifications
You must be signed in to change notification settings - Fork 122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
doc: Github release workflows #585
Comments
Hi. Thanks for the report. I think that we should start by using some "reference" command as part of towncrier's GHA YAML file. We currently have this towncrier/.github/workflows/ci.yml Lines 161 to 165 in 272993f
but this is called via nox... which makes it a bit harder to read. One idea is to create a separate composite job for GitHub Actions that can be used as an example for others. Regarding can you please add more details about why it's harder to use towncrier for bugfix releases ? Thanks |
Composite action or reusable workflow? The latter addresses how one can design the triggers, inputs, etc. But the former would still be nice to have as well in order to simplify the execution and export the variables. The action could also handle some of the tagging, but that needs to be discussed with an actual implementation and interface. For the reusable workflow though, everyone might have different usage, e.g. how to handle the release notes. I think for this case it will be better to document instead and discuss how one would use either workflows, what other tools one can integrate this with, etc. Design wise, I would say using
I need to get back in the headspace where I was when I wrote that.
But the more I think about it the more skeptical I am of |
I am not sure what are the problems that you want to solve using For CI, you usually want to use the We have the general usage documentation here. If someting is not clear, we might want to start by improving that documentation.
|
Sorry, I was intending to write up an example workflow, which would describe the issue more clearly. This is not about a CI workflow, but a CD workflow, i.e. how to create the tag and/or release using the contents of a .github/workflows/release.yamlname: 🚀 release
run-name: Release ${{ github.ref_name }}
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+"
jobs:
tests:
name: tests
uses: ./.github/workflows/step_test.yaml
build-wheel:
name: build-wheel
needs: [ tests ]
uses: ./.github/workflows/step_build-wheel.yaml
upload_pypi:
name: Upload to PyPI repository
needs: [ tests, build-wheel ]
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/project/spglib/
permissions:
id-token: write
steps:
- name: Get sdist
uses: actions/download-artifact@v4
with:
name: Packages
path: dist
- name: Get wheels
uses: actions/download-artifact@v4
with:
pattern: cibw-wheels-*
path: dist
merge-multiple: true
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
release:
needs: [ upload_pypi ]
name: Create release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: softprops/action-gh-release@v1
with:
name: Spglib ${{ github.ref_name }}
draft: true
prerelease: ${{ contains(github.ref, 'rc') }}
generate_release_notes: true Some example workflows would help figure out how to integrate with this release automation. The design questions to answer:
|
I don't think that You might want to check https://docs.openstack.org/reno/latest/ ... I have not used, but from what I remember, you don't need to commit anything. it alwasy keeps all the fragments and always re-generates the release notes
you manually generage the version number, commit the release notes and the push the tag. |
I understand, that's why I was showing the 2 workflows to also give the user ideas of how to adapt from 1 to another. The release workflow there is to show-case where a user might be coming from and what they would need to adapt. There could be 2 approaches here:
|
Feel free to send a PR with what you thing might be useful ... or wait for others to add more feedback to this issue. I am using a different release process, so I am not very familiar with the problem that is discusses here. |
I have a new reference more similar with |
I am not using |
The comment on the
The comment about With regards to the documentation, the first part is rather straightforward to document, or even create a reusable github action/workflow if you are willing to host it. On the user side it could look something like this: name: Prepare release
on:
push:
branches: [main]
jobs:
update-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Update CHANGELOG.md and push to release PR
run: |
pip install towncrier
towncrier build
git add -A
git commit -m "Release X.Y"
git push --force release/X.Y
gh pr create --title "Release X.Y" Designing the second part is the tricky bit name: Prepare release
on:
pull_request:
types: [enqueued, closed]
branches: [release/**]
jobs:
publish-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create and push tag
run: |
git tag vX.Y
git push vX.Y
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
name: vX.Y These are just some rough drafts of these which at least covers the main steps of the automation. Edit: I've found some other interesting GH actions that can help: |
It would be nice to document some Github workflow designs that the user can use. I have not included the example yamls, since I am not sure about the cli interface to run this, after studying it a bit, or if someone comments with some implementation I will update this post.
on.workflow_dispatch
Uses inputs to specify what version to tag (and on which commit/branch to checkout).
Steps:
Changelog.md
Pros:
Cons:
on.push.tag
(unless PAT is used)on.push.tag
Current release cycle is already configured
Steps:
Changelog.md
for next release cycle (tagging the date for old cycle)Pros:
Cons:
The text was updated successfully, but these errors were encountered: