Last active
July 9, 2019 17:16
-
-
Save mpkocher/c2f558353ff0b4f63d542c94782fdf56 to your computer and use it in GitHub Desktop.
Pacbio SemVer Scratch Pad
This file contains hidden or 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
(core)c2f558353ff0b4f63d542c94782fdf56 $> ipython -i semver_pad.py | |
Python 2.7.10 (default, Jul 13 2015, 12:05:58) | |
Type "copyright", "credits" or "license" for more information. | |
IPython 5.1.0 -- An enhanced Interactive Python. | |
? -> Introduction and overview of IPython's features. | |
%quickref -> Quick reference. | |
help -> Python's own help system. | |
object? -> Details about 'object', use 'object??' for extra details. | |
In [1]: run_demo() | |
1.2.5+55b157e | |
{'major': 1, 'prerelease': None, 'build': '55b157e', 'minor': 2, 'patch': 5} | |
1.2.4+432.55b157e | |
{'major': 1, 'prerelease': None, 'build': '432.55b157e', 'minor': 2, 'patch': 4} | |
1.2.4-rc1+999.55b157e | |
{'major': 1, 'prerelease': 'rc1', 'build': '999.55b157e', 'minor': 2, 'patch': 4} | |
1.2.4-SNAPSHOT+432.55b157e | |
{'major': 1, 'prerelease': 'SNAPSHOT', 'build': '432.55b157e', 'minor': 2, 'patch': 4} | |
This file contains hidden or 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
import semver as S | |
def to_v(major, minor, patch, git_sha, build_number=None, prerelease_tag=None): | |
""" | |
The bamboo build number shouldn't be required. It's optional (specifically | |
for secondary tools that are built outside of bamboo (e.g., locally, from | |
Github) | |
The "pacbio" build metadata contains {bamboo_build_number}.{short_sha}. | |
This enables determining what the newest build is and communicates the | |
fundamental git data. The git branch could be encoded as | |
{bamboo_build_number}.{short_sha}.{branch_name} | |
However, the branch name would probably requires restrictions on the name | |
to be compliant with the semver spec of the metadata. Given that branches | |
are light weight and often deleted, the usefulness might be only limited | |
to intergration builds that leverage artifacts. | |
Note, that Semver only provides a mechanism for adding metadata using "+", | |
semver doesn't provide a standardized mechanism for determining if versions | |
are greater or less than other versions using the metadata. For this | |
semver, uses the prerelease tag + major, minor, patch for comparision. | |
This makes sense. it's not obvious how to compare version from a loose | |
metadata model. | |
""" | |
base = ".".join(str(i) for i in (major, minor, patch)) | |
prerelease = "" if prerelease_tag is None else "-{}".format(prerelease_tag) | |
# need the trailing . as the sep for the other metadata | |
number = "" if build_number is None else str(build_number) + "." | |
metadata = "+{b}{s}".format(b=number, s=git_sha[:7]) | |
return "{b}{p}{m}".format(b=base, p=prerelease, m=metadata) | |
def get_demo_data(): | |
"""Get Example versions""" | |
git_sha = "55b157ebbdde45546e33e5c4521ec644e95c8e12" | |
versions = [] | |
def to_vs(*args, **kwargs): | |
v = to_v(*args, **kwargs) | |
versions.append(v) | |
return v | |
# for secondary, some tools might be built outside of bamboo. | |
to_vs(1, 2, 5, git_sha) | |
# Vanilla tools that are built from bamboo | |
to_vs(1, 2, 4, git_sha, build_number=432) | |
# example of using prereleases. SemVer relies heavily on this to determine | |
# if versions are greater than or less than other versions | |
to_vs(1, 2, 4, git_sha, build_number=999, prerelease_tag="rc1") | |
# scala/java prerelease style which impacts now maven and local repos work | |
to_vs(1, 2, 4, git_sha, build_number=432, prerelease_tag="SNAPSHOT") | |
return versions | |
def run_demo(): | |
versions = get_demo_data() | |
for v in versions: | |
print v | |
print S.parse(v) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment