Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When bumping the galaxy metapackage, also bump its galaxy-* deps and include/update pinned-requirements.txt #23

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions galaxy_release_util/point_release.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"""
RELEASE_BRANCH_REGEX = re.compile(r"^release_(\d{2}\.\d{1,2})$")
FIRST_RELEASE_CHANGELOG_TEXT = "First release"
GALAXY_PACKAGE_DEP_REGEX = re.compile(r"^( galaxy-[^=]+)==.*$")


@dataclass
Expand Down Expand Up @@ -113,6 +114,10 @@ def changelog(self) -> str:
changelog_string = "\n".join(str(h) for h in self.package_history)
return f"{HISTORY_TEMPLATE}{changelog_string}"

@property
def pinned_requirements_txt(self) -> str:
return self.path / ".." / ".." / "lib" / "galaxy" / "dependencies" / "pinned-requirements.txt"

def write_history(self):
self.history_rst.write_text(self.changelog)
self.modified_paths.append(self.history_rst)
Expand Down Expand Up @@ -230,9 +235,33 @@ def add_changelog_item(changes, child):
def bump_package_version(package: Package, new_version: Version):
new_content = []
content = package.setup_cfg.read_text().splitlines()
install_requires = False
requirements_txt = False
for line in content:
if line.startswith("version = "):
line = f"version = {new_version}"
elif line.startswith("install_requires ="):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems kind of weird to execute on all packages. Do you need to first determine if this is the meta package ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Also any reason we don't symlink the requirements file ?)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, can we have this in a separate function? A function called bump_package_version shouldn't be overwriting package requirements, I think. Besides, we call it twice, and we don't want to have to do this new work twice (or each time we need to update the version number of a package). No to mention ease of testing..

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Also any reason we don't symlink the requirements file ?)

Setuptools does not use this automatically, does it? Apparently since 62.6 you can specify it in setup.cfg with:

install_requires = file: requirements.txt

but this can't be combined with the list syntax we need to specify the galaxy-* subpackages (and the --index-url is invalid for setuptools as well).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, can we have this in a separate function?

Sure. I did it here because we were already modifying the file here, so you know, didn't want to incur the performance penalty of reading/writing a 1 KB file twice 😆 but agree it's not in scope for the function.

install_requires = True
elif package.name == "galaxy" and install_requires:
# Update requirements in the galaxy metapackage
if requirements_txt and line.startswith(" "):
continue
if requirements_txt and not line.startswith(" "):
install_requires = False
elif not requirements_txt and line.startswith(" galaxy-"):
match = GALAXY_PACKAGE_DEP_REGEX.match(line)
if match:
line = f"{match.group(1)}=={new_version}"
elif line == " # BEGIN pinned-requirements.txt":
new_content.append(line)
requirements_txt = True
requirements = [
f" {x.strip()}"
for x in open(package.pinned_requirements_txt).readlines()
if x.strip() and not x.startswith("--")
]
new_content.extend(requirements)
continue
new_content.append(line)
package.setup_cfg.write_text("\n".join(new_content))
package.modified_paths.append(package.setup_cfg)
Expand Down
Loading