Skip to content

Instantly share code, notes, and snippets.

@samuelcolvin
Last active September 15, 2022 14:42
Show Gist options
  • Save samuelcolvin/4e1ad439c5489e8d6478cdee3eb952ef to your computer and use it in GitHub Desktop.
Save samuelcolvin/4e1ad439c5489e8d6478cdee3eb952ef to your computer and use it in GitHub Desktop.
Check version script used before release.

To use simply run

VERSION_PATH='<your package dir>/version.py' python <(curl -Ls https://gist.githubusercontent.com/samuelcolvin/4e1ad439c5489e8d6478cdee3eb952ef/raw/check_version.py)
#!/usr/bin/env python3
"""
see https://gist.github.com/samuelcolvin/4e1ad439c5489e8d6478cdee3eb952ef for details
"""
import json
import os
import re
import sys
from importlib.machinery import SourceFileLoader
try:
from packaging.version import parse as parse_version
except ImportError:
parse_version = None
def main(version_path_env_var='VERSION_PATH', env_var='GITHUB_REF') -> int:
version_path = os.getenv(version_path_env_var)
if not version_path:
print(f'✖ "{version_path_env_var}" env variable not found')
return 1
git_ref = os.getenv(env_var, 'none')
tag = re.sub('^refs/tags/v*', '', git_ref.lower())
version = SourceFileLoader('version', version_path).load_module().VERSION.lower()
if tag == version:
if parse_version:
packaging_version = parse_version(version)
is_prerelease = packaging_version.is_prerelease
print(
f'✓ {env_var} env var {git_ref!r} matches package version: {tag!r} == {version!r}, '
f'is pre-release: {is_prerelease}'
)
print(f'::set-output name=IS_PRERELEASE::{json.dumps(is_prerelease)}')
print(f'::set-output name=VERSION::{packaging_version}')
else:
print(
f'✓ {env_var} env var {git_ref!r} matches package version: {tag!r} == {version!r} '
f'(packaging not installed, not checking pre-release)'
)
return 0
else:
print(f'✖ {env_var} env var {git_ref!r} does not match package version: {tag!r} != {version!r}')
return 1
if __name__ == '__main__':
sys.exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment