Improve GitHub release workflow
This changes the existing script to just generate the release notes and delegate the actual publishing to the `softprops/action-gh-release@v1` action. This allows us to delete the custom code, which failed recently in https://github.com/pytest-dev/pytest/actions/runs/7370258570/job/20056477756.
This commit is contained in:
parent
12b9bd5801
commit
5aa289e478
|
@ -82,9 +82,14 @@ jobs:
|
|||
python -m pip install --upgrade pip
|
||||
pip install --upgrade tox
|
||||
|
||||
- name: Publish GitHub release notes
|
||||
env:
|
||||
GH_RELEASE_NOTES_TOKEN: ${{ github.token }}
|
||||
- name: Generate release notes
|
||||
run: |
|
||||
sudo apt-get install pandoc
|
||||
tox -e publish-gh-release-notes
|
||||
tox -e generate-gh-release-notes -- ${{ github.event.inputs.version }} scripts/latest-release-notes.md
|
||||
|
||||
- name: Publish GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
body_path: scripts/latest-release-notes.md
|
||||
files: dist/*
|
||||
tag_name: ${{ github.event.inputs.version }}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
latest-release-notes.md
|
|
@ -1,3 +1,4 @@
|
|||
# mypy:disallow-untyped-defs
|
||||
"""
|
||||
Script used to publish GitHub release notes extracted from CHANGELOG.rst.
|
||||
|
||||
|
@ -19,27 +20,18 @@ The script also requires ``pandoc`` to be previously installed in the system.
|
|||
|
||||
Requires Python3.6+.
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import github3
|
||||
import pypandoc
|
||||
|
||||
|
||||
def publish_github_release(slug, token, tag_name, body):
|
||||
github = github3.login(token=token)
|
||||
owner, repo = slug.split("/")
|
||||
repo = github.repository(owner, repo)
|
||||
return repo.create_release(tag_name=tag_name, body=body)
|
||||
|
||||
|
||||
def parse_changelog(tag_name):
|
||||
p = Path(__file__).parent.parent / "doc/en/changelog.rst"
|
||||
changelog_lines = p.read_text(encoding="UTF-8").splitlines()
|
||||
|
||||
title_regex = re.compile(r"pytest (\d\.\d+\.\d+) \(\d{4}-\d{2}-\d{2}\)")
|
||||
title_regex = re.compile(r"pytest (\d\.\d+\.\d+\w*) \(\d{4}-\d{2}-\d{2}\)")
|
||||
consuming_version = False
|
||||
version_lines = []
|
||||
for line in changelog_lines:
|
||||
|
@ -64,36 +56,17 @@ def convert_rst_to_md(text):
|
|||
|
||||
|
||||
def main(argv):
|
||||
if len(argv) > 1:
|
||||
tag_name = argv[1]
|
||||
else:
|
||||
tag_name = os.environ.get("GITHUB_REF")
|
||||
if not tag_name:
|
||||
print("tag_name not given and $GITHUB_REF not set", file=sys.stderr)
|
||||
return 1
|
||||
if tag_name.startswith("refs/tags/"):
|
||||
tag_name = tag_name[len("refs/tags/") :]
|
||||
if len(argv) != 3:
|
||||
print("Usage: generate-gh-release-notes VERSION FILE")
|
||||
return 2
|
||||
|
||||
token = os.environ.get("GH_RELEASE_NOTES_TOKEN")
|
||||
if not token:
|
||||
print("GH_RELEASE_NOTES_TOKEN not set", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
slug = os.environ.get("GITHUB_REPOSITORY")
|
||||
if not slug:
|
||||
print("GITHUB_REPOSITORY not set", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
rst_body = parse_changelog(tag_name)
|
||||
version, filename = argv[1:3]
|
||||
print(f"Generating GitHub release notes for version {version}")
|
||||
rst_body = parse_changelog(version)
|
||||
md_body = convert_rst_to_md(rst_body)
|
||||
if not publish_github_release(slug, token, tag_name, md_body):
|
||||
print("Could not publish release notes:", file=sys.stderr)
|
||||
print(md_body, file=sys.stderr)
|
||||
return 5
|
||||
|
||||
Path(filename).write_text(md_body, encoding="UTF-8")
|
||||
print()
|
||||
print(f"Release notes for {tag_name} published successfully:")
|
||||
print(f"https://github.com/{slug}/releases/tag/{tag_name}")
|
||||
print(f"Done: {filename}")
|
||||
print()
|
||||
return 0
|
||||
|
11
tox.ini
11
tox.ini
|
@ -177,18 +177,13 @@ passenv = {[testenv:release]passenv}
|
|||
deps = {[testenv:release]deps}
|
||||
commands = python scripts/prepare-release-pr.py {posargs}
|
||||
|
||||
[testenv:publish-gh-release-notes]
|
||||
description = create GitHub release after deployment
|
||||
[testenv:generate-gh-release-notes]
|
||||
description = generate release notes that can be published as GitHub Release
|
||||
basepython = python3
|
||||
usedevelop = True
|
||||
passenv =
|
||||
GH_RELEASE_NOTES_TOKEN
|
||||
GITHUB_REF
|
||||
GITHUB_REPOSITORY
|
||||
deps =
|
||||
github3.py
|
||||
pypandoc
|
||||
commands = python scripts/publish-gh-release-notes.py {posargs}
|
||||
commands = python scripts/generate-gh-release-notes.py {posargs}
|
||||
|
||||
[flake8]
|
||||
max-line-length = 120
|
||||
|
|
Loading…
Reference in New Issue