From a27bb64afbd7ec4b66a49669f7c790c5fd9668b5 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Fri, 15 Nov 2024 10:01:03 -0800 Subject: [PATCH] patch --- .github/scripts/update-version-patch.sh | 6 +++ .github/workflows/prepare-patch-release.yml | 6 ++- scripts/eachdist.py | 46 +++++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .github/scripts/update-version-patch.sh diff --git a/.github/scripts/update-version-patch.sh b/.github/scripts/update-version-patch.sh new file mode 100644 index 00000000000..f0e86313020 --- /dev/null +++ b/.github/scripts/update-version-patch.sh @@ -0,0 +1,6 @@ +#!/bin/bash -e + +sed -i "/\[stable\]/{n;s/version=.*/version=$1/}" eachdist.ini +sed -i "/\[prerelease\]/{n;s/version=.*/version=$2/}" eachdist.ini + +./scripts/eachdist.py update_patch_versions --versions $1,$2,$3,$4 diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index 1f68f37ce26..e37b78afae3 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -43,14 +43,18 @@ jobs: exit 1 fi + stable_version_prev="$stable_major_minor.$((stable_patch))" + unstable_version_prev="0.${unstable_minor}b$((unstable_patch))" stable_version="$stable_major_minor.$((stable_patch + 1))" unstable_version="0.${unstable_minor}b$((unstable_patch + 1))" echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV echo "UNSTABLE_VERSION=$unstable_version" >> $GITHUB_ENV + echo "STABLE_VERSION_PREV=$stable_version_prev" >> $GITHUB_ENV + echo "UNSTABLE_VERSION_PREV=$unstable_version_prev" >> $GITHUB_ENV - name: Update version - run: .github/scripts/update-version.sh $STABLE_VERSION $UNSTABLE_VERSION + run: .github/scripts/update-version-patch.sh $STABLE_VERSION $UNSTABLE_VERSION $STABLE_VERSION_PREV $UNSTABLE_VERSION_PREV - name: Update the change log with the approximate release date run: | diff --git a/scripts/eachdist.py b/scripts/eachdist.py index 71349363047..453f4e3c774 100755 --- a/scripts/eachdist.py +++ b/scripts/eachdist.py @@ -236,6 +236,13 @@ def setup_instparser(instparser): "releaseargs", nargs=argparse.REMAINDER, help=extraargs_help("pytest") ) + patchreleaseparser = subparsers.add_parser( + "update_patch_versions", + help="Updates version numbers during patch release, used by maintainers and CI", + ) + releaseparser.set_defaults(func=release_args) + releaseparser.add_argument("--versions", required=True) + fmtparser = subparsers.add_parser( "format", help="Formats all source code with black and isort.", @@ -599,6 +606,24 @@ def update_dependencies(targets, version, packages): ) +def update_patch_dependencies(targets, version, prev_version, packages): + print("updating patch dependencies") + # PEP 508 allowed specifier operators + operators = ["==", "!=", "<=", ">=", "<", ">", "===", "~=", "="] + operators_pattern = "|".join(re.escape(op) for op in operators) + + for pkg in packages: + search = rf"({basename(pkg)}[^,]*)(\s?({operators_pattern})\s?)(.*{prev_version})" + print(search) + replace = r"\1\2 " + version + update_files( + targets, + "pyproject.toml", + search, + replace, + ) + + def update_files(targets, filename, search, replace): errors = False for target in targets: @@ -640,6 +665,27 @@ def release_args(args): update_version_files(targets, version, packages) +def patch_release_args(args): + print("preparing patch release") + + rootpath = find_projectroot() + targets = list(find_targets_unordered(rootpath)) + cfg = ConfigParser() + cfg.read(str(find_projectroot() / "eachdist.ini")) + versions = args.versions + # stable + mcfg = cfg["stable"] + packages = mcfg["packages"].split() + print(f"update stable packages to {versions[0]}") + update_patch_dependencies(targets, versions[0], versions[2], packages) + + # prerelease + mcfg = cfg["prerelease"] + packages = mcfg["packages"].split() + print(f"update prerelease packages to {versions[1]}") + update_patch_dependencies(targets, versions[1], versions[3], packages) + + def test_args(args): clean_remainder_args(args.pytestargs) execute_args(