-
-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add extra version info on dev installs (#623)
* Add extra version info on dev installs * Allow build tool to find version --------- Co-authored-by: Korijn van Golen <[email protected]>
- Loading branch information
1 parent
8f849c1
commit d28f27f
Showing
5 changed files
with
120 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
""" | ||
Versioning: we use a hard-coded version number, because it's simple and always | ||
works. For dev installs we add extra version info from Git. | ||
""" | ||
|
||
import logging | ||
import subprocess | ||
from pathlib import Path | ||
|
||
|
||
# This is the reference version number, to be bumped before each release. | ||
# The build system detects this definition when building a distribution. | ||
__version__ = "0.18.1" | ||
|
||
# Allow using nearly the same code in different projects | ||
project_name = "wgpu" | ||
|
||
|
||
logger = logging.getLogger(project_name.lower()) | ||
|
||
# Get whether this is a repo. If so, repo_dir is the path, otherwise repo_dir is None. | ||
repo_dir = Path(__file__).parents[1] | ||
repo_dir = repo_dir if repo_dir.joinpath(".git").is_dir() else None | ||
|
||
|
||
def get_version(): | ||
"""Get the version string.""" | ||
if repo_dir: | ||
return get_extended_version() | ||
else: | ||
return __version__ | ||
|
||
|
||
def get_extended_version(): | ||
"""Get an extended version string with information from git.""" | ||
|
||
release, post, labels = get_version_info_from_git() | ||
|
||
# Sample first 3 parts of __version__ | ||
base_release = ".".join(__version__.split(".")[:3]) | ||
|
||
# Check release | ||
if not release: | ||
release = base_release | ||
elif release != base_release: | ||
logger.warning( | ||
f"{project_name} version from git ({release}) and __version__ ({base_release}) don't match." | ||
) | ||
|
||
# Build the total version | ||
version = release | ||
if post and post != "0": | ||
version += f".post{post}" | ||
if labels: | ||
version += "+" + ".".join(labels) | ||
|
||
return version | ||
|
||
|
||
def get_version_info_from_git(): | ||
"""Get (release, post, labels) from Git. | ||
With `release` the version number from the latest tag, `post` the | ||
number of commits since that tag, and `labels` a tuple with the | ||
git-hash and optionally a dirty flag. | ||
""" | ||
|
||
# Call out to Git | ||
command = [ | ||
"git", | ||
"describe", | ||
"--long", | ||
"--always", | ||
"--tags", | ||
"--dirty", | ||
"--first-parent", | ||
] | ||
try: | ||
p = subprocess.run(command, cwd=repo_dir, capture_output=True) | ||
except Exception as e: | ||
logger.warning(f"Could not get {project_name} version: {e}") | ||
p = None | ||
|
||
# Parse the result into parts | ||
if p is None: | ||
parts = (None, None, "unknown") | ||
else: | ||
output = p.stdout.decode(errors="ignore") | ||
if p.returncode: | ||
stderr = p.stderr.decode(errors="ignore") | ||
logger.warning( | ||
f"Could not get {project_name} version.\n\nstdout: " | ||
+ output | ||
+ "\n\nstderr: " | ||
+ stderr | ||
) | ||
parts = (None, None, "unknown") | ||
else: | ||
parts = output.strip().lstrip("v").split("-") | ||
if len(parts) <= 2: | ||
# No tags (and thus also no post). Only git hash and maybe 'dirty' | ||
parts = (None, None, *parts) | ||
|
||
# Return unpacked parts | ||
release, post, *labels = parts | ||
return release, post, labels | ||
|
||
|
||
__version__ = get_version() | ||
|
||
version_info = tuple( | ||
int(i) if i.isnumeric() else i for i in __version__.split("+")[0].split(".") | ||
) |