mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 08:24:40 +01:00
refactor: use conventional commits
remove using news fragments
This commit is contained in:
parent
bbd652c06d
commit
6d225d60a2
6 changed files with 8 additions and 211 deletions
32
.github/workflows/check-news-item.yml
vendored
32
.github/workflows/check-news-item.yml
vendored
|
@ -1,32 +0,0 @@
|
|||
name: Check News Item
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
name: Check News item
|
||||
steps:
|
||||
|
||||
# note: the checkout will pull code from the base branch. This step should not pull code from the merge commit
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.9'
|
||||
cache: 'pip'
|
||||
cache-dependency-path: 'pyproject.toml'
|
||||
- run: pip install PyGithub
|
||||
- run: python .github/workflows/check-news.py
|
||||
env:
|
||||
PR_NUMBER: "${{ github.event.number }}"
|
||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
GITHUB_REPOSITORY: "${{ env.GITHUB_REPOSITORY }}"
|
64
.github/workflows/check-news.py
vendored
64
.github/workflows/check-news.py
vendored
|
@ -1,64 +0,0 @@
|
|||
"""Check if the PR has a news item.
|
||||
|
||||
Put a warning comment if it doesn't.
|
||||
"""
|
||||
import os
|
||||
from fnmatch import fnmatch
|
||||
|
||||
from github import Github, PullRequest
|
||||
|
||||
|
||||
def get_added_files(pr: PullRequest.PullRequest):
|
||||
print(pr, pr.number)
|
||||
for file in pr.get_files():
|
||||
if file.status == "added":
|
||||
yield file.filename
|
||||
|
||||
|
||||
def check_news_file(pr):
|
||||
return any(
|
||||
map(lambda file_name: fnmatch(file_name, "news/*.rst"), get_added_files(pr))
|
||||
)
|
||||
|
||||
|
||||
def get_pr_number():
|
||||
number = os.environ["PR_NUMBER"]
|
||||
if not number:
|
||||
raise Exception(f"Pull request number is not found `PR_NUMBER={number}")
|
||||
return int(number)
|
||||
|
||||
|
||||
def get_old_comment(pr: PullRequest.PullRequest):
|
||||
for comment in pr.get_issue_comments():
|
||||
if ("github-actions" in comment.user.login) and (
|
||||
"No news item is found" in comment.body
|
||||
):
|
||||
return comment
|
||||
|
||||
|
||||
def main():
|
||||
# using an access token
|
||||
gh = Github(os.environ["GITHUB_TOKEN"])
|
||||
repo = gh.get_repo(os.environ["GITHUB_REPOSITORY"])
|
||||
pr = repo.get_pull(get_pr_number())
|
||||
has_news_added = check_news_file(pr)
|
||||
old_comment = get_old_comment(pr)
|
||||
|
||||
if old_comment:
|
||||
print("Found an existing comment from bot")
|
||||
if has_news_added:
|
||||
print("Delete warning from bot, since news items is added.")
|
||||
old_comment.delete()
|
||||
elif not has_news_added:
|
||||
print("No news item found")
|
||||
|
||||
pr.create_issue_comment(
|
||||
"""\
|
||||
**Warning!** No news item is found for this PR.
|
||||
If this is an user facing change/feature/fix, please add a news item by copying the format from `news/TEMPLATE.rst`.
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -37,3 +37,8 @@ repos:
|
|||
- id: check-yaml
|
||||
- id: check-toml
|
||||
- id: check-added-large-files
|
||||
- repo: https://github.com/compilerla/conventional-pre-commit
|
||||
rev: v3.6.0
|
||||
hooks:
|
||||
- id: conventional-pre-commit
|
||||
stages: [commit-msg]
|
||||
|
|
|
@ -38,25 +38,9 @@ Finally, run the following commands. You should see the effects of your change
|
|||
|
||||
Changelog
|
||||
=========
|
||||
Pull requests will often have CHANGELOG entries associated with. However,
|
||||
to avoid excessive merge conflicts, please follow the following procedure:
|
||||
|
||||
1. Go into the ``news/`` directory,
|
||||
2. Copy the ``TEMPLATE.rst`` file to another file in the ``news/`` directory.
|
||||
We suggest using the branchname::
|
||||
|
||||
@ cp TEMPLATE.rst branch.rst
|
||||
|
||||
3. Add your entries as a bullet pointed lists in your ``branch.rst`` file in
|
||||
the appropriate category. It is OK to leave the ``None`` entries for later
|
||||
use.
|
||||
4. Commit your ``branch.rst``.
|
||||
|
||||
Feel free to update this file whenever you want! Please don't use someone
|
||||
else's file name. All of the files in this ``news/`` directory will be merged
|
||||
automatically at release time. The ``None`` entries will be automatically
|
||||
filtered out too!
|
||||
|
||||
We use conventional commits to generate the changelog.
|
||||
Please refer to the `conventional commits specification <https://www.conventionalcommits.org/en/v1.0.0/>`_
|
||||
for more information.
|
||||
|
||||
Style Guide
|
||||
===========
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
**Added:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Changed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Deprecated:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Removed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Fixed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Security:**
|
||||
|
||||
* <news item>
|
|
@ -1,73 +0,0 @@
|
|||
"""Testing that news entries are well formed."""
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
import pytest
|
||||
|
||||
NEWSDIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "news")
|
||||
|
||||
CATEGORIES = frozenset(
|
||||
["Added", "Changed", "Deprecated", "Removed", "Fixed", "Security"]
|
||||
)
|
||||
|
||||
single_grave_reg = re.compile(r"[^`]`[^`]+`[^`_]")
|
||||
|
||||
|
||||
def check_news_file(fname):
|
||||
import restructuredtext_lint
|
||||
|
||||
name = fname.name
|
||||
with open(fname.path) as f:
|
||||
content = f.read()
|
||||
errors = restructuredtext_lint.lint(content)
|
||||
|
||||
if errors:
|
||||
err_msgs = os.linesep.join(err.message for err in errors)
|
||||
pytest.fail(f"{fname}: Invalid ReST\n{err_msgs}")
|
||||
|
||||
form = ""
|
||||
for i, l in enumerate(content.splitlines()):
|
||||
# determine the form of line
|
||||
if l.startswith("**"):
|
||||
cat = l[2:].rsplit(":")[0]
|
||||
if cat not in CATEGORIES:
|
||||
pytest.fail(
|
||||
f"{name}:{i + 1}: {cat!r} not a proper category "
|
||||
f"must be one of {list(CATEGORIES)}"
|
||||
"",
|
||||
pytrace=True,
|
||||
)
|
||||
if l.endswith("None"):
|
||||
form += "3"
|
||||
else:
|
||||
form += "2"
|
||||
elif l.startswith("* <news item>"):
|
||||
form += "4"
|
||||
elif l.startswith("* ") or l.startswith("- ") or l.startswith(" "):
|
||||
form += "1"
|
||||
elif l.strip() == "":
|
||||
form += "0"
|
||||
else:
|
||||
pytest.fail(f"{name}:{i + 1}: invalid rst", pytrace=True)
|
||||
# The file should have:
|
||||
# empty lines around categories
|
||||
# at least one content line in a non null category
|
||||
reg = re.compile(r"^(3(0|$)|20(1|4)(1|0|4)*0|204$)+$")
|
||||
if not reg.match(form):
|
||||
print(form)
|
||||
pytest.fail(f"{name}: invalid rst", pytrace=True)
|
||||
|
||||
|
||||
@pytest.fixture(params=list(os.scandir(NEWSDIR)))
|
||||
def fname(request):
|
||||
if request.node.config.option.markexpr != "news":
|
||||
pytest.skip("Run news items check explicitly")
|
||||
return request.param
|
||||
|
||||
|
||||
@pytest.mark.news
|
||||
def test_news(fname):
|
||||
base, ext = os.path.splitext(fname.path)
|
||||
assert "rst" in ext
|
||||
check_news_file(fname)
|
Loading…
Add table
Reference in a new issue