Skip to content

Latest commit

 

History

History
94 lines (70 loc) · 4.93 KB

convert_repo_from_repo.md

File metadata and controls

94 lines (70 loc) · 4.93 KB

Convert a Repo to Use Releaser from Repo

Follow the steps below to convert a repository to use Jupyter Releaser for releases, where maintainers make releases from the repository itself.

Prerequisites

See checklist below for details:

  • Markdown changelog
  • Bump version configuration (if using Python), for example hatch
  • Access token with access to target GitHub repo to run GitHub Actions.
  • Access token for the PyPI registry
  • If needed, access token for npm.

Checklist for Adoption

  • Add access token for the PyPI registry stored as PYPI_TOKEN. Note For security reasons, it is recommended that you scope the access to a single repository.
  • If needed, add access token for npm, saved as NPM_TOKEN.
  • Ensure that only trusted users with 2FA have admin access to the repository, since they will be able to trigger releases.
  • Switch to Markdown Changelog
    • We recommend MyST, especially if some of your docs are in reStructuredText.
    • Can use pandoc -s changelog.rst -o changelog.md and some hand edits as needed.
    • Note that directives can still be used
  • Add HTML start and end comment markers to Changelog file - see example in CHANGELOG.md (view in raw mode)
  • We recommend using hatch for your build system and for version handling.
    • If previously providing version_info like version_info = (1, 7, 0, '.dev', '0'), use a pattern like the one below in your version file:
import re
from typing import List

# Version string must appear intact for hatch versioning
__version__ = "6.16.0"

# Build up version_info tuple for backwards compatibility
pattern = r"(?P<major>\d+).(?P<minor>\d+).(?P<patch>\d+)(?P<rest>.*)"
match = re.match(pattern, __version__)
assert match is not None
parts: List[object] = [int(match[part]) for part in ["major", "minor", "patch"]]
if match["rest"]:
    parts.append(match["rest"])
version_info = tuple(parts)
  • Add a GitHub Actions CI step to run the check_release action. For example:
- name: Check Release
  if: ${{ matrix.python-version == '3.9' }}
  uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v1
  with:
    token: ${{ secrets.GITHUB_TOKEN }}

Note The check release action needs contents: write permission.

  • If you would like the release assets to be uploaded as artifacts, add the following step after the check_release action:
- name: Upload Distributions
  uses: actions/upload-artifact@v2
  with:
    name: dist-${{ github.run_number }}
    path: .jupyter_releaser_checkout/dist
  • Add a workflow that uses the enforce-label action from jupyterlab/maintainer-tools to ensure that all PRs have on of the triage labels used to categorize the changelog.

  • Update or add RELEASE.md that describes the onboarding and release process, e.g.

  • Copy prep-release.yml and publish-release.yml from this repository and remove the "target" input, since the target will be your own repo.

  • Optionally add configuration to the repository if non-standard options or hooks are needed.

  • If desired, add check_release job, changelog, and hatch support to other active release branches

Initial Release Workflow

  • Try out the Prep Release and Publish Release process against a fork of the target repo first so you don't accidentally push tags and GitHub releases to the source repository. Set the TWINE_REPOSITORY_URL environment variable to https://test.pypi.org/legacy/ in the "Finalize Release" action part of the workflow

  • Try the Publish Release process using a prerelease version on the main repository before publishing a final version.

Backport Branches

  • Create backport branches the usual way, e.g. git checkout -b 3.0.x v3.0.1; git push origin 3.0.x
  • When running the Publish Release Workflow, an automatic PR is generated for the default branch in the target repo, positioned in the appropriate place in the changelog.