diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..8d34bf0 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,16 @@ +# dependabot.yaml reference: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file +# +# Notes: +# - Status and logs from dependabot are provided at +# https://github.com/jupyterhub/jupyterhub-python-repo-template/network/updates. +# +version: 2 +updates: + # Maintain dependencies in our GitHub Workflows + - package-ecosystem: github-actions + directory: / + labels: [ci] + schedule: + interval: monthly + time: "05:00" + timezone: Etc/UTC 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/.travis.yml b/.travis.yml deleted file mode 100644 index 9d8edbd..0000000 --- a/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: python -python: -- 3.5 -script: -- true -deploy: - provider: pypi - user: nbrsessionproxy - password: - secure: JilUEN99KU/dZbBtStWLvJ7EdU6gud8/9C58ZhA2p8B7XgGF0GRG9/Sved9wxab1J5AL1GiweazxSn7WJVleBelNaKRmImVyukHcPIw5hS01+eE1KAWMcimPPB3Mp5JxfmupO2vaWJu5C2Lp5VM5MLuRHtxLTqYNW2qUNOmh0fpNrUIF+ATRKaDXaGE5o68FB/UZ9J91FoTK2GUcFFjmTwC4qz10udfHDMTE0YzsgyDBiX8RdeGdDzVLSP2kjdm0k/zORNhTPnzDhUX9wLAaZh5pRxYrS2Wy0C2u55CvcV/YxZiSOq9FY6Eblm8SJSOl+kaQw8sj20J7DFIwVKBpimTa/k2Byh8JrjeCO3wyZ/UfPycmRC73V5nxRBrDcOvr83j8SYhOcD6/6OwN+dnkoYJYak2YGs8EM6d78cuZ5CEl6k0nPsdr6nd3thefBrOGYZN9AehnF9fHFRwAHzKvObfJ0UxB/uyh8VIvSRqYHVxgyBj6U1erXrhkjqWTVcAAvv9mjLnSQG7YePtmaYj3qPreZ5mAj9QaTO8XE1e6oiv+5MDrTXfK7kKocXNijs30+SQBk9M/euuaxzFcXrCe98hKIKMqzzNrC9S/NTQ/13WdgxQL6At/7Tcsxep+rqDHL9T7lsJ6t1ydvXMk4AnZQaA77FZQvq2RCDPmyktYmxI= - on: - tags: true - repo: jupyterhub/nbrsessionproxy - distributions: sdist bdist_wheel 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"