Skip to content

Commit 3726d0a

Browse files
committed
patch
1 parent ccc9e6f commit 3726d0a

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
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 --versions $1,$2,$3,$4

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,18 @@ jobs:
4343
exit 1
4444
fi
4545
46+
stable_version_prev="$stable_major_minor.$((stable_patch))"
47+
unstable_version_prev="0.${unstable_minor}b$((unstable_patch))"
4648
stable_version="$stable_major_minor.$((stable_patch + 1))"
4749
unstable_version="0.${unstable_minor}b$((unstable_patch + 1))"
4850
4951
echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV
5052
echo "UNSTABLE_VERSION=$unstable_version" >> $GITHUB_ENV
53+
echo "STABLE_VERSION_PREV=$stable_version_prev" >> $GITHUB_ENV
54+
echo "UNSTABLE_VERSION_PREV=$unstable_version_prev" >> $GITHUB_ENV
5155
5256
- name: Update version
53-
run: .github/scripts/update-version.sh $STABLE_VERSION $UNSTABLE_VERSION
57+
run: .github/scripts/update-version-patch.sh $STABLE_VERSION $UNSTABLE_VERSION $STABLE_VERSION_PREV $UNSTABLE_VERSION_PREV
5458

5559
- name: Update the change log with the approximate release date
5660
run: |

scripts/eachdist.py

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

239+
patchreleaseparser = subparsers.add_parser(
240+
"update_patch_versions",
241+
help="Updates version numbers during patch release, used by maintainers and CI",
242+
)
243+
releaseparser.set_defaults(func=release_args)
244+
releaseparser.add_argument("--versions", required=True)
245+
239246
fmtparser = subparsers.add_parser(
240247
"format",
241248
help="Formats all source code with black and isort.",
@@ -599,6 +606,24 @@ def update_dependencies(targets, version, packages):
599606
)
600607

601608

609+
def update_patch_dependencies(targets, version, prev_version, packages):
610+
print("updating patch dependencies")
611+
# PEP 508 allowed specifier operators
612+
operators = ["==", "!=", "<=", ">=", "<", ">", "===", "~=", "="]
613+
operators_pattern = "|".join(re.escape(op) for op in operators)
614+
615+
for pkg in packages:
616+
search = rf"({basename(pkg)}[^,]*)(\s?({operators_pattern})\s?)(.*{prev_version})"
617+
print(search)
618+
replace = r"\1\2 " + version
619+
update_files(
620+
targets,
621+
"pyproject.toml",
622+
search,
623+
replace,
624+
)
625+
626+
602627
def update_files(targets, filename, search, replace):
603628
errors = False
604629
for target in targets:
@@ -640,6 +665,27 @@ def release_args(args):
640665
update_version_files(targets, version, packages)
641666

642667

668+
def patch_release_args(args):
669+
print("preparing patch release")
670+
671+
rootpath = find_projectroot()
672+
targets = list(find_targets_unordered(rootpath))
673+
cfg = ConfigParser()
674+
cfg.read(str(find_projectroot() / "eachdist.ini"))
675+
versions = args.versions
676+
# stable
677+
mcfg = cfg["stable"]
678+
packages = mcfg["packages"].split()
679+
print(f"update stable packages to {versions[0]}")
680+
update_patch_dependencies(targets, versions[0], versions[2], packages)
681+
682+
# prerelease
683+
mcfg = cfg["prerelease"]
684+
packages = mcfg["packages"].split()
685+
print(f"update prerelease packages to {versions[1]}")
686+
update_patch_dependencies(targets, versions[1], versions[3], packages)
687+
688+
643689
def test_args(args):
644690
clean_remainder_args(args.pytestargs)
645691
execute_args(

0 commit comments

Comments
 (0)