Skip to content

Commit 29d61aa

Browse files
authored
Fix prepare patch release workflow (#3013)
1 parent d2e860c commit 29d61aa

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash -e
2+
3+
sed -i "/\[stable\]/{n;s/version=.*/version=$1/}" eachdist.ini
4+
sed -i "/\[prerelease\]/{n;s/version=.*/version=$2/}" eachdist.ini
5+
6+
./scripts/eachdist.py update_patch_versions \
7+
--stable_version=$1 \
8+
--unstable_version=$2 \
9+
--stable_version_prev=$3 \
10+
--unstable_version_prev=$4
11+

.github/workflows/prepare-patch-release.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,18 @@ jobs:
4040
exit 1
4141
fi
4242
43+
stable_version_prev="$stable_major_minor.$((stable_patch))"
44+
unstable_version_prev="0.${unstable_minor}b$((unstable_patch))"
4345
stable_version="$stable_major_minor.$((stable_patch + 1))"
4446
unstable_version="0.${unstable_minor}b$((unstable_patch + 1))"
4547
4648
echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV
4749
echo "UNSTABLE_VERSION=$unstable_version" >> $GITHUB_ENV
50+
echo "STABLE_VERSION_PREV=$stable_version_prev" >> $GITHUB_ENV
51+
echo "UNSTABLE_VERSION_PREV=$unstable_version_prev" >> $GITHUB_ENV
4852
4953
- name: Update version
50-
run: .github/scripts/update-version.sh $STABLE_VERSION $UNSTABLE_VERSION
54+
run: .github/scripts/update-version-patch.sh $STABLE_VERSION $UNSTABLE_VERSION $STABLE_VERSION_PREV $UNSTABLE_VERSION_PREV
5155

5256
- name: Set up Python 3.9
5357
uses: actions/setup-python@v5

scripts/eachdist.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,16 @@ def setup_instparser(instparser):
237237
"releaseargs", nargs=argparse.REMAINDER, help=extraargs_help("pytest")
238238
)
239239

240+
patchreleaseparser = subparsers.add_parser(
241+
"update_patch_versions",
242+
help="Updates version numbers during patch release, used by maintainers and CI",
243+
)
244+
patchreleaseparser.set_defaults(func=patch_release_args)
245+
patchreleaseparser.add_argument("--stable_version", required=True)
246+
patchreleaseparser.add_argument("--unstable_version", required=True)
247+
patchreleaseparser.add_argument("--stable_version_prev", required=True)
248+
patchreleaseparser.add_argument("--unstable_version_prev", required=True)
249+
240250
fmtparser = subparsers.add_parser(
241251
"format",
242252
help="Formats all source code with black and isort.",
@@ -655,6 +665,24 @@ def update_dependencies(targets, version, packages):
655665
)
656666

657667

668+
def update_patch_dependencies(targets, version, prev_version, packages):
669+
print("updating patch dependencies")
670+
# PEP 508 allowed specifier operators
671+
operators = ["==", "!=", "<=", ">=", "<", ">", "===", "~=", "="]
672+
operators_pattern = "|".join(re.escape(op) for op in operators)
673+
674+
for pkg in packages:
675+
search = rf"({basename(pkg)}[^,]*?)(\s?({operators_pattern})\s?)(.*{prev_version})"
676+
replace = r"\g<1>\g<2>" + version
677+
print(f"{search=}\t{replace=}\t{pkg=}")
678+
update_files(
679+
targets,
680+
"pyproject.toml",
681+
search,
682+
replace,
683+
)
684+
685+
658686
def update_files(targets, filename, search, replace):
659687
errors = False
660688
for target in targets:
@@ -707,6 +735,32 @@ def release_args(args):
707735
update_changelogs("-".join(updated_versions))
708736

709737

738+
def patch_release_args(args):
739+
print("preparing patch release")
740+
741+
rootpath = find_projectroot()
742+
targets = list(find_targets_unordered(rootpath))
743+
cfg = ConfigParser()
744+
cfg.read(str(find_projectroot() / "eachdist.ini"))
745+
# stable
746+
mcfg = cfg["stable"]
747+
packages = mcfg["packages"].split()
748+
print(f"update stable packages to {args.stable_version}")
749+
update_patch_dependencies(
750+
targets, args.stable_version, args.stable_version_prev, packages
751+
)
752+
update_version_files(targets, args.stable_version, packages)
753+
754+
# prerelease
755+
mcfg = cfg["prerelease"]
756+
packages = mcfg["packages"].split()
757+
print(f"update prerelease packages to {args.unstable_version}")
758+
update_patch_dependencies(
759+
targets, args.unstable_version, args.unstable_version_prev, packages
760+
)
761+
update_version_files(targets, args.unstable_version, packages)
762+
763+
710764
def test_args(args):
711765
clean_remainder_args(args.pytestargs)
712766
execute_args(

0 commit comments

Comments
 (0)