Add new fetching of git tags

This commit is contained in:
IamTheFij 2022-01-07 11:08:37 -08:00
parent 279b57c4ef
commit 020d9f442e
2 changed files with 33 additions and 3 deletions

View File

@ -28,7 +28,7 @@ In practice, it means that for a project like [StyLua](https://github.com/Johnny
--map-system Windows=win64 --map-system Darwin=macos --map-system=linux=Linux \ --map-system Windows=win64 --map-system Darwin=macos --map-system=linux=Linux \
"stylua-{version}-{system}.zip" "stylua-{version}-{system}.zip"
And `release-gitter` will get the release version from the `Cargo.toml`, get the URL from the `git remote`, call the Github API and look for a release matching the templated file name, extract the `stylua` file from the archive, and then make it executable. And `release-gitter` will get the release version from the `Cargo.toml`, get the URL from the `git remote`, call the Github API and look for a release matching the templated file name, extract the `stylua` file from the archive, and then make it executable. Alternatively, if you're project `--version-git-tag` can be used to pull the version from the latest tag. This will automatically do a shallow fetch (depth = 1), but this can be supressed with `--version-git-no-fetch`.
This allows a single command to be run from a checked out repo from pre-commit on any system to fetch the appropriate binary. This allows a single command to be run from a checked out repo from pre-commit on any system to fetch the appropriate binary.
@ -38,6 +38,7 @@ Full usage is as follows:
usage: release-gitter [-h] [--hostname HOSTNAME] [--owner OWNER] [--repo REPO] usage: release-gitter [-h] [--hostname HOSTNAME] [--owner OWNER] [--repo REPO]
[--git-url GIT_URL] [--version VERSION] [--git-url GIT_URL] [--version VERSION]
[--version-git-tag] [--version-git-no-fetch]
[--map-system MAP_SYSTEM] [--map-arch MAP_ARCH] [--map-system MAP_SYSTEM] [--map-arch MAP_ARCH]
[--exec EXEC] [--extract-files EXTRACT_FILES] [--exec EXEC] [--extract-files EXTRACT_FILES]
[--extract-all] [--url-only] [--extract-all] [--url-only]
@ -59,6 +60,10 @@ Full usage is as follows:
repo repo
--version VERSION Release version to download. If not provied, it will --version VERSION Release version to download. If not provied, it will
look for project metadata look for project metadata
--version-git-tag, -t
Get the release version from a git tag
--version-git-no-fetch
Shallow fetch tags prior to checking versions
--map-system MAP_SYSTEM, -s MAP_SYSTEM --map-system MAP_SYSTEM, -s MAP_SYSTEM
Map a platform.system() value to a custom value Map a platform.system() value to a custom value
--map-arch MAP_ARCH, -a MAP_ARCH --map-arch MAP_ARCH, -a MAP_ARCH

View File

@ -104,7 +104,18 @@ def get_cargo_version(p: Path) -> str:
raise ValueError(f"No version found in {p}") raise ValueError(f"No version found in {p}")
def read_version() -> Optional[str]: def get_git_tag(fetch: bool = True) -> Optional[str]:
if fetch:
check_call(["git", "fetch", "--tags", "--depth", "1"])
git_tag = check_output(["git", "describe", "--tags"]).decode("UTF-8").strip()
return git_tag or None
def read_version(from_tags: bool = False, fetch: bool = False) -> Optional[str]:
if from_tags:
return get_git_tag(fetch)
matchers = { matchers = {
"Cargo.toml": get_cargo_version, "Cargo.toml": get_cargo_version,
} }
@ -361,6 +372,17 @@ def parse_args(args: Optional[list[str]] = None) -> argparse.Namespace:
"--version", "--version",
help="Release version to download. If not provied, it will look for project metadata", help="Release version to download. If not provied, it will look for project metadata",
) )
parser.add_argument(
"--version-git-tag",
"-t",
action="store_true",
help="Get the release version from a git tag",
)
parser.add_argument(
"--version-git-no-fetch",
action="store_true",
help="Shallow fetch tags prior to checking versions",
)
parser.add_argument( parser.add_argument(
"--map-system", "--map-system",
"-s", "-s",
@ -409,7 +431,10 @@ def parse_args(args: Optional[list[str]] = None) -> argparse.Namespace:
merge_field(parsed_args, remote_info, field) merge_field(parsed_args, remote_info, field)
if parsed_args.version is None: if parsed_args.version is None:
parsed_args.version = read_version() parsed_args.version = read_version(
parsed_args.version_git_tag,
not parsed_args.version_git_no_fetch,
)
if parsed_args.extract_all: if parsed_args.extract_all:
parsed_args.extract_files = [] parsed_args.extract_files = []