Skip to content

Commit 0742bbd

Browse files
committed
use "git describe" for package versioning
1 parent ee0f8e9 commit 0742bbd

File tree

5 files changed

+61
-27
lines changed

5 files changed

+61
-27
lines changed

.github/workflows/build-test-package-publish.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,11 @@ jobs:
179179
- name: install node modules
180180
run: npm install --also=dev
181181

182+
- name: update versions from git
183+
run: poetry run python .\scripts\update_git_versions.py
184+
182185
- name: update doc links
183-
if: startsWith( github.ref, 'refs/tags/v')
186+
if: ${{ !startsWith( github.ref, 'refs/tags/v') }}
184187
run: poetry run npm run update-doc-links
185188

186189
- name: package

scripts/tools.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
11
import os
22
from pathlib import Path
3+
from typing import NamedTuple, Optional
34

45
from git.repo import Repo
56
from semantic_version import Version
67

78

8-
def get_current_version_from_git() -> Version:
9-
repo = Repo(Path.cwd())
10-
11-
result = None
12-
for tag in repo.tags:
13-
v = tag.name
14-
if v.startswith("v."):
15-
v = v[2:]
16-
elif v.startswith("v"):
17-
v = v[1:]
9+
class GitDescribeVersion(NamedTuple):
10+
version: str
11+
commits: Optional[str] = None
12+
hash: Optional[str] = None
1813

19-
try:
20-
v = Version(v)
21-
except ValueError:
22-
continue
2314

24-
if not result or v > result:
25-
result = v
15+
def get_current_version_from_git() -> Version:
16+
repo = Repo(Path.cwd())
2617

27-
return result
18+
git_version = GitDescribeVersion(*repo.git.describe("--long", "--first-parent", "--match", "v[0-9]*").split("-"))
19+
version = Version(git_version.version[1:])
20+
if git_version.commits is not None:
21+
version = version.next_patch()
22+
version.prerelease = ("dev", git_version.commits)
23+
return version
2824

2925

3026
def get_version() -> Version:

scripts/update_doc_links.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ def replace_in_file(filename: Path, pattern: "re.Pattern[str]", to: str) -> None
1717
def main() -> None:
1818

1919
version = get_version()
20-
21-
tag_base = f"{REPOSITORY_BASE}/v{version}"
22-
23-
replace_in_file(
24-
Path("README.md"),
25-
re.compile(r"(\!\[.*?\]\()(\.)(/[^\)]*?)(\))"),
26-
rf"""\g<1>{tag_base}\g<3>\g<4>""",
27-
)
20+
if version.prerelease:
21+
tag_base = f"{REPOSITORY_BASE}/v{version}"
22+
23+
replace_in_file(
24+
Path("README.md"),
25+
re.compile(r"(\!\[.*?\]\()(\.)(/[^\)]*?)(\))"),
26+
rf"""\g<1>{tag_base}\g<3>\g<4>""",
27+
)
2828

2929

3030
if __name__ == "__main__":

scripts/update_git_versions.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import re
2+
from pathlib import Path
3+
4+
from scripts.tools import get_version
5+
6+
7+
def replace_in_file(filename: Path, pattern: "re.Pattern[str]", to: str) -> None:
8+
text = filename.read_text()
9+
new = pattern.sub(to, text)
10+
filename.write_text(new)
11+
12+
13+
def main() -> None:
14+
15+
version = get_version()
16+
17+
preview = version.minor % 2 != 0
18+
19+
for f in ["robotcode/_version.py", "pyproject.toml"]:
20+
replace_in_file(
21+
Path(f),
22+
re.compile(r"""(^_*version_*\s*=\s*['"])([^'"]*)(['"])""", re.MULTILINE),
23+
rf"\g<1>{version or ''}{'.dev.0' if preview and version.prerelease is None else ''}\g<3>",
24+
)
25+
26+
for f in ["package.json"]:
27+
replace_in_file(
28+
Path(f),
29+
re.compile(r"""(\"version\"\s*:\s*['"])([0-9]+\.[0-9]+\.[0-9]+.*)(['"])""", re.MULTILINE),
30+
rf"\g<1>{version or ''}{'.dev.0' if preview and version.prerelease is None else ''}\g<3>",
31+
)
32+
33+
34+
if __name__ == "__main__":
35+
main()

scripts/update_versions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def main() -> None:
2121
replace_in_file(
2222
Path(f),
2323
re.compile(r"""(^_*version_*\s*=\s*['"])([^'"]*)(['"])""", re.MULTILINE),
24-
rf"\g<1>{version or ''}{'.dev0' if preview else ''}\g<3>",
24+
rf"\g<1>{version or ''}{'.dev.0' if preview and version.prerelease is None else ''}\g<3>",
2525
)
2626

2727
for f in ["CHANGELOG.md"]:

0 commit comments

Comments
 (0)