Cherry pick eachdist.py changes to main from release/v1.28.x-0.49bx branch (#3018)

* Fix prepare patch release workflow (#3013)

* Fix eachdist.py patch release to respect "all" and "excluded" (#3016)
This commit is contained in:
Aaron Abbott
2024-11-18 12:29:35 -05:00
committed by GitHub
parent 803bb322ba
commit 23f67eb77b
3 changed files with 83 additions and 1 deletions

View File

@ -237,6 +237,16 @@ def parse_args(args=None):
"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",
)
patchreleaseparser.set_defaults(func=patch_release_args)
patchreleaseparser.add_argument("--stable_version", required=True)
patchreleaseparser.add_argument("--unstable_version", required=True)
patchreleaseparser.add_argument("--stable_version_prev", required=True)
patchreleaseparser.add_argument("--unstable_version_prev", required=True)
fmtparser = subparsers.add_parser(
"format",
help="Formats all source code with black and isort.",
@ -655,6 +665,27 @@ def update_dependencies(targets, version, packages):
)
def update_patch_dependencies(targets, version, prev_version, packages):
print("updating patch dependencies")
if "all" in packages:
packages.extend(targets)
# 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})"
replace = r"\g<1>\g<2>" + version
print(f"{search=}\t{replace=}\t{pkg=}")
update_files(
targets,
"pyproject.toml",
search,
replace,
)
def update_files(targets, filename, search, replace):
errors = False
for target in targets:
@ -687,10 +718,12 @@ def release_args(args):
versions = args.versions
updated_versions = []
# remove excluded packages
excluded = cfg["exclude_release"]["packages"].split()
targets = [
target for target in targets if basename(target) not in excluded
]
for group in versions.split(","):
mcfg = cfg[group]
version = mcfg["version"]
@ -707,6 +740,40 @@ def release_args(args):
update_changelogs("-".join(updated_versions))
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"))
# remove excluded packages
excluded = cfg["exclude_release"]["packages"].split()
targets = [
target for target in targets if basename(target) not in excluded
]
# stable
mcfg = cfg["stable"]
packages = mcfg["packages"].split()
print(f"update stable packages to {args.stable_version}")
update_patch_dependencies(
targets, args.stable_version, args.stable_version_prev, packages
)
update_version_files(targets, args.stable_version, packages)
# prerelease
mcfg = cfg["prerelease"]
packages = mcfg["packages"].split()
print(f"update prerelease packages to {args.unstable_version}")
update_patch_dependencies(
targets, args.unstable_version, args.unstable_version_prev, packages
)
update_version_files(targets, args.unstable_version, packages)
def test_args(args):
clean_remainder_args(args.pytestargs)
execute_args(