Skip to content

Commit

Permalink
Merge #2805
Browse files Browse the repository at this point in the history
2805: check changelog using nox r=messense a=davidhewitt

I wanted to get the green tick when the `CI-skip-changelog` label was applied 😝 

... and I didn't think it hurt to use the same tech we use for the rest of the pipeline.

Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
  • Loading branch information
bors[bot] and davidhewitt authored Dec 17, 2022
2 parents 7180a0b + 9e04398 commit 0c686c0
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 28 deletions.
26 changes: 3 additions & 23 deletions .github/workflows/changelog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,8 @@ jobs:
check:
name: Check changelog entry
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.labels.*.name, 'CI-skip-changelog') && !startsWith(github.event.pull_request.title, 'release:') }}
steps:
- uses: actions/checkout@v3
- uses: actions/github-script@v6
id: check
with:
script: |
const fs = require('node:fs')
const path = require('node:path')
let found = false
const changeTypes = ['packaging', 'added', 'changed', 'removed', 'fixed']
for (changeType of changeTypes) {
const filename = path.join('newsfragments', `${context.issue.number}.${changeType}.md`)
if (fs.existsSync(filename)) {
found = true
break
}
}
if (!found) {
const errorMsg = '📝 Changelog entry not found, please add one (or more) to `newsfragments` directory. For more information see https://github.com/PyO3/pyo3/blob/main/Contributing.md#documenting-changes'
core.error(errorMsg)
process.exit(1)
}
- uses: actions/setup-python@v4
- run: pip install nox
- run: nox -s check-changelog
57 changes: 52 additions & 5 deletions noxfile.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
import os
import re
import subprocess
Expand All @@ -13,6 +14,9 @@
nox.options.sessions = ["test", "clippy", "fmt"]


PYO3_DIR = Path(__file__).parent


@nox.session(venv_backend="none")
def test(session: nox.Session) -> None:
test_rust(session)
Expand Down Expand Up @@ -159,9 +163,8 @@ def contributors(session: nox.Session) -> None:

class EmscriptenInfo:
def __init__(self):
rootdir = Path(__file__).parent
self.emscripten_dir = rootdir / "emscripten"
self.builddir = rootdir / ".nox/emscripten"
self.emscripten_dir = PYO3_DIR / "emscripten"
self.builddir = PYO3_DIR / ".nox/emscripten"
self.builddir.mkdir(exist_ok=True, parents=True)

self.pyversion = sys.version.split()[0]
Expand Down Expand Up @@ -305,8 +308,48 @@ def address_sanitizer(session: nox.Session):
)


@nox.session(name="check-changelog")
def check_changelog(session: nox.Session):
event_path = os.environ.get("GITHUB_EVENT_PATH")
if event_path is None:
session.error("Can only check changelog on github actions")

with open(event_path) as event_file:
event = json.load(event_file)

if event["pull_request"]["title"].startswith("release:"):
session.skip("PR title starts with release")

for label in event["pull_request"]["labels"]:
if label["name"] == "CI-skip-changelog":
session.skip("CI-skip-changelog label applied")

issue_number = event["pull_request"]["number"]

newsfragments = PYO3_DIR / "newsfragments"

fragments = tuple(
filter(
Path.exists,
(
newsfragments / f"{issue_number}.{change_type}.md"
for change_type in ("packaging", "added", "changed", "removed", "fixed")
),
)
)

if not fragments:
session.error(
"Changelog entry not found, please add one (or more) to `newsfragments` directory. For more information see https://github.com/PyO3/pyo3/blob/main/Contributing.md#documenting-changes"
)

print("Found newsfragments:")
for fragment in fragments:
print(fragment.name)


def _get_rust_target() -> str:
output = subprocess.check_output(["rustc", "-vV"], text=True)
output = _get_output("rustc", "-vV")

for line in output.splitlines():
if line.startswith(_HOST_LINE_START):
Expand All @@ -318,7 +361,7 @@ def _get_rust_target() -> str:

def _get_coverage_env() -> Dict[str, str]:
env = {}
output = subprocess.check_output(["cargo", "llvm-cov", "show-env"], text=True)
output = _get_output("cargo", "llvm-cov", "show-env")

for line in output.strip().splitlines():
(key, value) = line.split("=", maxsplit=1)
Expand Down Expand Up @@ -363,3 +406,7 @@ def _run_cargo_test(

def _run_cargo_publish(session: nox.Session, *, package: str) -> None:
_run(session, "cargo", "publish", f"--package={package}", external=True)


def _get_output(*args: str) -> str:
return subprocess.run(args, capture_output=True, text=True, check=True).stdout

0 comments on commit 0c686c0

Please sign in to comment.