diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..9bad8eb --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,54 @@ +# This is a GitHub workflow defining a set of jobs with a set of steps. +# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions +# +name: Release + +# Always tests wheel building, but only publish to PyPI on pushed tags. +on: + pull_request: + paths-ignore: + - "**.md" + - ".github/workflows/*.yaml" + - "!.github/workflows/release.yaml" + push: + paths-ignore: + - "**.md" + - ".github/workflows/*.yaml" + - "!.github/workflows/release.yaml" + branches-ignore: + - "dependabot/**" + - "pre-commit-ci-update-config" + tags: ["**"] + workflow_dispatch: + +jobs: + build-release: + runs-on: ubuntu-24.04 + permissions: + # id-token=write is required for pypa/gh-action-pypi-publish, and the PyPI + # project needs to be configured to trust this workflow. + # + # ref: https://github.com/jupyterhub/team-compass/issues/648 + # + id-token: write + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: install build package + run: | + pip install --upgrade pip + pip install build + pip freeze + + - name: build release + run: | + python -m build --sdist --wheel . + ls -l dist + + - name: publish to pypi + uses: pypa/gh-action-pypi-publish@release/v1 + if: startsWith(github.ref, 'refs/tags/') diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..b225f13 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,61 @@ +# How to make a release + +`jupyterhub-python-repo-template` is a package available on [PyPI] and +[conda-forge]. + +These are the instructions on how to make a release. + +## Pre-requisites + +- Push rights to this GitHub repository + +## Steps to make a release + +1. Create a PR updating `CHANGELOG.md` with [github-activity] and continue when + its merged. For details about this, see the [team-compass documentation] + about it. + + [team-compass documentation]: https://jupyterhub-team-compass.readthedocs.io/en/latest/practices/releases.html + +2. Checkout main and make sure it is up to date. + + ```shell + git checkout main + git fetch origin main + git reset --hard origin/main + ``` + +3. Update the version, make commits, and push a git tag with `tbump`. + + ```shell + pip install tbump + ``` + + `tbump` will ask for confirmation before doing anything. + + ```shell + # Example versions to set: 1.0.0, 1.0.0b1 + VERSION= + tbump ${VERSION} + ``` + + Following this, the [CI system] will build and publish a release. + +4. Reset the version back to dev, e.g. `1.0.1.dev` after releasing `1.0.0`. + + ```shell + # Example version to set: 1.0.1.dev + NEXT_VERSION= + tbump --no-tag ${NEXT_VERSION}.dev + ``` + +5. Following the release to PyPI, an automated PR should arrive within 24 hours + to [conda-forge/jupyterhub-python-repo-template-feedstock] with instructions + on releasing to conda-forge. You are welcome to volunteer doing this, but + aren't required as part of making this release to PyPI. + +[github-activity]: https://github.com/executablebooks/github-activity +[pypi]: https://pypi.org/project/jupyterhub-python-repo-template/ +[conda-forge]: https://anaconda.org/conda-forge/jupyterhub-python-repo-template +[conda-forge/jupyterhub-python-repo-template-feedstock]: https://github.com/conda-forge/jupyterhub-python-repo-template-feedstock +[ci system]: https://github.com/jupyterhub/jupyterhub-python-repo-template/actions/workflows/release.yaml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..ba999a0 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,27 @@ +# tbump is used to simplify and standardize the release process when updating +# the version, making a git commit and tag, and pushing changes. +# +# ref: https://github.com/your-tools/tbump#readme +# +[tool.tbump] +github_url = "https://github.com/jupyterhub/jupyter-rsession-proxy" + +[tool.tbump.version] +current = "2.2.1" +regex = ''' + (?P\d+) + \. + (?P\d+) + \. + (?P\d+) + (?P
((a|b|rc)\d+)|)
+    \.?
+    (?P(?<=\.)dev\d*|)
+'''
+
+[tool.tbump.git]
+message_template = "Bump to v{new_version}"
+tag_template = "v{new_version}"
+
+[[tool.tbump.file]]
+src = "setup.py"