From 507955283eb108446d8446219874d7164994440a Mon Sep 17 00:00:00 2001 From: pulpbot Date: Mon, 25 Nov 2024 15:36:25 +0000 Subject: [PATCH] Update CI files --- .bumpversion.cfg | 21 -------- .ci/scripts/check_release.py | 79 +++++++++++++++++++--------- .ci/scripts/check_requirements.py | 5 +- .github/template_gitref | 2 +- .github/workflows/scripts/install.sh | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/update_ci.yml | 44 ++++++++-------- pyproject.toml | 35 ++++++++++++ 8 files changed, 115 insertions(+), 75 deletions(-) delete mode 100644 .bumpversion.cfg diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index 0e2870831..000000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,21 +0,0 @@ -[bumpversion] -current_version = 3.28.0.dev -commit = False -tag = False -parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\.(?P[a-z]+))? -serialize = - {major}.{minor}.{patch}.{release} - {major}.{minor}.{patch} - -[bumpversion:part:release] -optional_value = prod -first_value = dev -values = - dev - prod - -[bumpversion:file:./pulp_rpm/app/__init__.py] - -[bumpversion:file:./pyproject.toml] -search = version = "{current_version}" -replace = version = "{new_version}" diff --git a/.ci/scripts/check_release.py b/.ci/scripts/check_release.py index 0847711ae..da45be6a8 100755 --- a/.ci/scripts/check_release.py +++ b/.ci/scripts/check_release.py @@ -1,28 +1,21 @@ #!/usr/bin/env python -# WARNING: DO NOT EDIT! -# -# This file was generated by plugin_template, and is managed by it. Please use -# './plugin-template --github pulp_rpm' to update this file. -# -# For more info visit https://github.com/pulp/plugin_template - import argparse import re import os +import tomllib import yaml +from pathlib import Path from tempfile import TemporaryDirectory from packaging.version import Version from git import Repo -UPSTREAM_REMOTE = "https://github.com/pulp/pulp_rpm.git" -DEFAULT_BRANCH = "main" RELEASE_BRANCH_REGEX = r"^([0-9]+)\.([0-9]+)$" Y_CHANGELOG_EXTS = [".feature", ".removal", ".deprecation"] Z_CHANGELOG_EXTS = [".bugfix", ".doc", ".misc"] -def main(): +def options(): """Check which branches need a release.""" parser = argparse.ArgumentParser() parser.add_argument( @@ -32,17 +25,60 @@ def main(): "'supported'. Defaults to 'supported', see `supported_release_branches` in " "`plugin_template.yml`.", ) - opts = parser.parse_args() + return parser.parse_args() + + +def template_config(): + # Assume this script lies in .ci/scripts + path = Path(__file__).absolute().parent.parent.parent / "template_config.yml" + return yaml.safe_load(path.read_text()) + +def current_version(repo, commitish): + try: + pyproject_toml = tomllib.loads(repo.git.show(f"{commitish}:pyproject.toml")) + try: + current_version = pyproject_toml["project"]["version"] + except Exception: + current_version = pyproject_toml["tool"]["bumpversion"]["current_version"] + except Exception: + current_version = repo.git.grep( + "current_version", commitish, "--", ".bumpversion.cfg" + ).split("=")[-1] + return Version(current_version) + + +def check_pyproject_dependencies(repo, from_commit, to_commit): + try: + old_pyproject = tomllib.load(repo.show("{from_commit}:pyproject.toml")) + old_dependencies = set(old_pyproject["project"]["dependencies"]) + new_pyproject = tomllib.load(repo.show("{to_commit}:pyproject.toml")) + new_dependencies = set(new_pyproject["project"]["dependencies"]) + if old_dependencies != new_dependencies: + return ["dependencies"] + else: + return [] + except Exception as e: + print(f"WARNING: Comparing the dependencies in pyproject.toml failed. ({e})") + # Gathering more details failed. + return ["pyproject.toml changed somehow (PLEASE check if dependencies are affected)."] + + +def main(options, template_config): with TemporaryDirectory() as d: # Clone from upstream to ensure we have updated branches & main + GITHUB_ORG = template_config["github_org"] + PLUGIN_NAME = template_config["plugin_name"] + UPSTREAM_REMOTE = f"https://github.com/{GITHUB_ORG}/{PLUGIN_NAME}.git" + DEFAULT_BRANCH = template_config["plugin_default_branch"] + repo = Repo.clone_from(UPSTREAM_REMOTE, d, filter="blob:none") heads = [h.split("/")[-1] for h in repo.git.ls_remote("--heads").split("\n")] available_branches = [h for h in heads if re.search(RELEASE_BRANCH_REGEX, h)] available_branches.sort(key=lambda ver: Version(ver)) available_branches.append(DEFAULT_BRANCH) - branches = opts.branches + branches = options.branches if branches == "supported": with open(f"{d}/template_config.yml", mode="r") as f: tc = yaml.safe_load(f) @@ -90,9 +126,7 @@ def main(): f"{last_tag}", f"origin/{branch}", "--name-only", "--", "pyproject.toml" ) if pyproject_diff: - reasons.append( - "pyproject.toml changed (PLEASE check if dependencies are affected." - ) + reasons.extend(check_pyproject_dependencies(repo, last_tag, f"origin/{branch}")) if reasons: curr_version = Version(last_tag) @@ -113,15 +147,10 @@ def main(): for change in changes.split("\n"): _, ext = os.path.splitext(change) if ext in Y_CHANGELOG_EXTS: - # We don't put Y release bumps in the commit message, check file instead - # The 'current_version' is always the next version to release - next_version = repo.git.grep( - "current_version", DEFAULT_BRANCH, "--", ".bumpversion.cfg" - ).split("=")[-1] - next_version = Version(next_version) - print( - f"A new Y-release is needed! New Version: {next_version.base_version}" - ) + # We don't put Y release bumps in the commit message, check file instead. + # The 'current_version' is always the dev of the next version to release. + next_version = current_version(repo, DEFAULT_BRANCH).base_version + print(f"A new Y-release is needed! New Version: {next_version}") releases.append(next_version) break @@ -130,4 +159,4 @@ def main(): if __name__ == "__main__": - main() + main(options(), template_config()) diff --git a/.ci/scripts/check_requirements.py b/.ci/scripts/check_requirements.py index 0edfaccc0..c3d0e118c 100755 --- a/.ci/scripts/check_requirements.py +++ b/.ci/scripts/check_requirements.py @@ -62,10 +62,7 @@ def main(): else: if check_prereleases and req.specifier.prereleases: # Do not even think about begging for more exceptions! - if ( - not req.name.startswith("opentelemetry") - and req.name != "pulp-rpm-client" - ): + if req.name != "pulp-rpm-client": errors.append(f"{filename}:{nr}: Prerelease versions found in {line}.") ops = [spec.operator for spec in req.specifier] if "~=" in ops: diff --git a/.github/template_gitref b/.github/template_gitref index 6f3b6024b..483b6b6b3 100644 --- a/.github/template_gitref +++ b/.github/template_gitref @@ -1 +1 @@ -2021.08.26-394-gd21e6ea +2021.08.26-401-g1346b63 diff --git a/.github/workflows/scripts/install.sh b/.github/workflows/scripts/install.sh index 64b69c39f..91ebff826 100755 --- a/.github/workflows/scripts/install.sh +++ b/.github/workflows/scripts/install.sh @@ -15,7 +15,7 @@ set -euv source .github/workflows/scripts/utils.sh -PLUGIN_VERSION="$(sed -n -e 's/^\s*current_version\s*=\s*//p' .bumpversion.cfg | python -c 'from packaging.version import Version; print(Version(input()))')" +PLUGIN_VERSION="$(bump-my-version show current_version | tail -n -1 | python -c 'from packaging.version import Version; print(Version(input()))')" PLUGIN_SOURCE="./pulp_rpm/dist/pulp_rpm-${PLUGIN_VERSION}-py3-none-any.whl" export PULP_API_ROOT="/pulp/" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4de0bf31b..1c87be590 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -71,7 +71,7 @@ jobs: - name: "Install python dependencies" run: | echo ::group::PYDEPS - pip install towncrier twine wheel httpie docker netaddr boto3 'ansible~=10.3.0' mkdocs jq jsonpatch + pip install towncrier twine wheel httpie docker netaddr boto3 'ansible~=10.3.0' mkdocs jq jsonpatch bump-my-version echo "HTTPIE_CONFIG_DIR=$GITHUB_WORKSPACE/pulp_rpm/.ci/assets/httpie/" >> $GITHUB_ENV echo ::endgroup:: diff --git a/.github/workflows/update_ci.yml b/.github/workflows/update_ci.yml index ac7f138ad..30cbd4420 100644 --- a/.github/workflows/update_ci.yml +++ b/.github/workflows/update_ci.yml @@ -65,28 +65,6 @@ jobs: branch: "update-ci/main" base: "main" delete-branch: true - - uses: "actions/checkout@v4" - with: - fetch-depth: 0 - path: "pulp_rpm" - ref: "3.27" - - - name: "Run update" - working-directory: "pulp_rpm" - run: | - ../plugin_template/scripts/update_ci.sh --release - - - name: "Create Pull Request for CI files" - uses: "peter-evans/create-pull-request@v6" - with: - token: "${{ secrets.RELEASE_TOKEN }}" - path: "pulp_rpm" - committer: "pulpbot " - author: "pulpbot " - title: "Update CI files for branch 3.27" - branch: "update-ci/3.27" - base: "3.27" - delete-branch: true - uses: "actions/checkout@v4" with: fetch-depth: 0 @@ -197,4 +175,26 @@ jobs: branch: "update-ci/3.26" base: "3.26" delete-branch: true + - uses: "actions/checkout@v4" + with: + fetch-depth: 0 + path: "pulp_rpm" + ref: "3.27" + + - name: "Run update" + working-directory: "pulp_rpm" + run: | + ../plugin_template/scripts/update_ci.sh --release + + - name: "Create Pull Request for CI files" + uses: "peter-evans/create-pull-request@v6" + with: + token: "${{ secrets.RELEASE_TOKEN }}" + path: "pulp_rpm" + committer: "pulpbot " + author: "pulpbot " + title: "Update CI files for branch 3.27" + branch: "update-ci/3.27" + base: "3.27" + delete-branch: true ... diff --git a/pyproject.toml b/pyproject.toml index d86981c32..f2dfb9d42 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,3 +93,38 @@ exclude = ''' | docs )/ ''' + +[tool.bumpversion] +# This section is managed by the plugin template. Do not edit manually. + +current_version = "3.28.0.dev" +commit = false +tag = false +parse = "(?P\\d+)\\.(?P\\d+)\\.(?P\\d+)(\\.(?P[a-z]+))?" +serialize = [ + "{major}.{minor}.{patch}.{release}", + "{major}.{minor}.{patch}", +] + +[tool.bumpversion.parts.release] +# This section is managed by the plugin template. Do not edit manually. + +optional_value = "prod" +values = [ + "dev", + "prod", +] + +[[tool.bumpversion.files]] +# This section is managed by the plugin template. Do not edit manually. + +filename = "./pulp_rpm/app/__init__.py" +search = "version = \"{current_version}\"" +replace = "version = \"{new_version}\"" + +[[tool.bumpversion.files]] +# This section is managed by the plugin template. Do not edit manually. + +filename = "./pyproject.toml" +search = "version = \"{current_version}\"" +replace = "version = \"{new_version}\"" \ No newline at end of file