Compare commits
18 Commits
0.0.1.post
...
0.0.1.post
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97612703b7 | ||
|
|
5bb8b35c73 | ||
|
|
a6c2513d9f | ||
|
|
70ef90a529 | ||
|
|
f728842a5a | ||
|
|
4837a99ac6 | ||
|
|
3e130e6bdf | ||
|
|
d7fbf52647 | ||
|
|
f5c97757b6 | ||
|
|
3c0e5bebc2 | ||
|
|
c5962d533b | ||
|
|
e9e25793d8 | ||
|
|
17f74d6675 | ||
|
|
264c51de2e | ||
|
|
ac942480cb | ||
|
|
be9ef684e4 | ||
|
|
792666c6ec | ||
|
|
2951e70c47 |
74
Jenkinsfile
vendored
74
Jenkinsfile
vendored
@@ -126,11 +126,15 @@ pipeline {
|
||||
|
||||
sh("virtualenv --pip=embed --setuptools=embed --wheel=embed --no-periodic-update --activators bash,python BUILD_ENV")
|
||||
sh("virtualenv --pip=embed --setuptools=embed --wheel=embed --no-periodic-update --activators bash,python TEST_ENV")
|
||||
sh("virtualenv --pip=embed --setuptools=embed --wheel=embed --no-periodic-update --activators bash,python TOOLS_ENV")
|
||||
|
||||
sh(". ~/BUILD_ENV/bin/activate && pip install --upgrade setuptools build pip copier jinja2-slug toml \"setuptools-git-versioning<2\"")
|
||||
|
||||
sh(". ~/TOOLS_ENV/bin/activate && pip install simple_rest_client requests")
|
||||
sh(". ~/TOOLS_ENV/bin/activate && pip install git+https://chacha.ddns.net/gitea/chacha/pygitversionhelper.git@master")
|
||||
|
||||
|
||||
sh("git config --global user.email $_MaintainerEmail")
|
||||
sh("git config --global user.name $_MaintainerName")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,23 +152,64 @@ pipeline {
|
||||
{
|
||||
if(sh(returnStdout: true, script: "git tag --points-at HEAD").trim().isEmpty())
|
||||
{
|
||||
error("master push/merge must have an explicit tag release number")
|
||||
BUMPED_VERSION = sh(script: """#!/bin/sh -
|
||||
|. ~/TOOLS_ENV/bin/activate
|
||||
|exec python - << '__EOWRAPPER__'
|
||||
|
|
||||
|from pygitversionhelper import gitversionhelper
|
||||
|import re
|
||||
|
|
||||
|lastcommit=gitversionhelper.commit.getLast(same_branch=True)
|
||||
|msg=gitversionhelper.commit.getMessage(lastcommit)
|
||||
|
|
||||
|_match=re.search(r"\\s*(?:#)?\\s*(?<=new-tag:)(?:\\s*)(?P<TAG>\\S*)",msg)
|
||||
|print(_match.group("TAG"),end="")
|
||||
|
|
||||
|__EOWRAPPER__
|
||||
""".stripMargin(),
|
||||
returnStdout: true).trim()
|
||||
if(BUMPED_VERSION.isEmpty())
|
||||
{
|
||||
echo "master push/merge must have an explicit tag release number, stopping pipeline"
|
||||
currentBuild.getRawBuild().getExecutor().doStop()
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "new-tag requested in commit message: $BUMPED_VERSION"
|
||||
sh("git tag -a $BUMPED_VERSION")
|
||||
sh("git push origin master --tags")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// using git to get the latest tag on this branch
|
||||
def latestTag = sh(returnStdout: true, script: "git tag --sort=-creatordate | head -n 1").trim()
|
||||
echo("latestTag:. . . . . . . . . . . . $latestTag ")
|
||||
|
||||
// using setuptools_git_versioning to get the generated version number based on Git tags and logs
|
||||
// TODO: read dev_template from toml
|
||||
|
||||
sh(script: """#!/bin/sh -
|
||||
|. ~/TOOLS_ENV/bin/activate
|
||||
|exec python - << '__EOWRAPPER__'
|
||||
|
|
||||
|from pygitversionhelper import gitversionhelper
|
||||
|
|
||||
|print(f"most recent repository tag: {gitversionhelper.tag.getLastTag()}")
|
||||
|print(f"most recent repository tag: {gitversionhelper.tag.getLastTag(same_branch=True)}")
|
||||
|print(f"number of commit since last tag: {gitversionhelper.tag.getDistanceFromTag()}")
|
||||
|print(f"number of commit since last tag: {gitversionhelper.tag.getDistanceFromTag(same_branch=True)}")
|
||||
|print(f"most recent repository version: {gitversionhelper.version.getLastVersion(formated_output=True)}")
|
||||
|print(f'current repository version: {gitversionhelper.version.getCurrentVersion(formated_output=True,version_std="PEP440",bump_type="dev",bump_dev_strategy="post")}')
|
||||
|
|
||||
|__EOWRAPPER__
|
||||
""".stripMargin())
|
||||
|
||||
// get current (or bumped) version number from git history
|
||||
PY_PROJECT_VERSION = sh(script: """#!/bin/sh -
|
||||
|. ~/BUILD_ENV/bin/activate
|
||||
|. ~/TOOLS_ENV/bin/activate
|
||||
|exec python - << '__EOWRAPPER__'
|
||||
|
|
||||
|from setuptools_git_versioning import version_from_git
|
||||
|from pygitversionhelper import gitversionhelper
|
||||
|
|
||||
|print(str(version_from_git(tag_filter="^\\d+\\.\\d+\\.\\d+\$",dev_template = "{tag}.post{ccount}")),end ="")
|
||||
|print(gitversionhelper.version.getCurrentVersion(formated_output=True,version_std="PEP440",bump_type="dev",bump_dev_strategy="post"),end ="")
|
||||
|
|
||||
|__EOWRAPPER__
|
||||
""".stripMargin(),
|
||||
@@ -176,8 +221,6 @@ pipeline {
|
||||
// => little hacky... creating a new git repo with a commit/tag corresponding to HEAD of the official one
|
||||
if(_PROJECT_NAME=="pyChaChaDummyProject") //specific case to test the template itself
|
||||
{
|
||||
sh("git config --global user.email $_MaintainerEmail")
|
||||
sh("git config --global user.name $_MaintainerName")
|
||||
|
||||
sh("rm -Rf ~/_gitrepo || true")
|
||||
|
||||
@@ -387,13 +430,15 @@ pipeline {
|
||||
def GITEA_LOGIN_TOKEN=credentials("GiteaCHACHAPush")
|
||||
}
|
||||
steps {
|
||||
sh("python3 -m pip install simple_rest_client requests")
|
||||
dir("gitrepo") {
|
||||
script {
|
||||
def CurrentDateTime=java.time.LocalDateTime.now()
|
||||
withCredentials([string( credentialsId: _MkDocsWebCredentials,variable: 'MKDOCSTOKEN' )])
|
||||
{
|
||||
sh(script: """#!/usr/bin/env python3
|
||||
sh(script: """#!/bin/sh -
|
||||
|. ~/TOOLS_ENV/bin/activate
|
||||
|exec python - << '__EOWRAPPER__'
|
||||
|
|
||||
|from simple_rest_client.api import API
|
||||
|from simple_rest_client.resource import Resource
|
||||
|import json
|
||||
@@ -477,8 +522,9 @@ pipeline {
|
||||
|response=requests.post("http://${_MkDocsWebURL}/API.php?REQ=pushDoc",data=reqData,files=files)
|
||||
|if response.status_code != 200:
|
||||
| raise RuntimeError(f"Wrong server response: {response.status_code}")
|
||||
|
|
||||
""".stripMargin())
|
||||
|
|
||||
|__EOWRAPPER__
|
||||
""".stripMargin())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,25 +75,39 @@ Get the distance from HEAD to last tag [only on same branch]:
|
||||
|
||||
Get the last found version in the repository [return MetaVersion object]:
|
||||
|
||||
print(f"most recent repository version: {gitversionhelper.tag.getLastVersion()}")
|
||||
print(f"most recent repository version: {gitversionhelper.version.getLastVersion()}")
|
||||
|
||||
Get the last found version in the repository [return formated string]:
|
||||
|
||||
print(f"most recent repository version: {gitversionhelper.tag.getLastVersion(formated_output=True)}")
|
||||
print(f"most recent repository version: {gitversionhelper.version.getLastVersion(formated_output=True)}")
|
||||
|
||||
Others kwargs available to this function:
|
||||
- version_std: string to force a version standard for rendering ["PEP440" or "SemVer"]
|
||||
- same_branch: boolean to force searching on same branch
|
||||
- ignore_unknown_tags: boolean to allow unknown tag to be ignored
|
||||
|
||||
* version_std: string to force a version standard for rendering ["PEP440" or "SemVer"]
|
||||
* same_branch: boolean to force searching on same branch
|
||||
* ignore\_unknown\_tags: boolean to allow unknown tag to be ignored
|
||||
|
||||
Get the current version of the repository, automatically bump it if the last one is not tagged [returns MetaVersion object]:
|
||||
|
||||
print(f"most recent repository version: {gitversionhelper.tag.getCurrentVersion()}")
|
||||
print(f"current repository version: {gitversionhelper.version.getCurrentVersion()}")
|
||||
|
||||
Or with formated output:
|
||||
|
||||
print(f"current repository version: {gitversionhelper.version.getCurrentVersion(formated_output=True)}")
|
||||
|
||||
Typical usage in CI/CD env:
|
||||
|
||||
bumped_version = gitversionhelper.version.getCurrentVersion( formated_output=True, \
|
||||
version_std="PEP440", \
|
||||
bump_type="dev", \
|
||||
bump_dev_strategy="post")
|
||||
print(f"current repository version: {bumped_version}")
|
||||
|
||||
kwargs available to this function:
|
||||
- All same args as getLastVersion()
|
||||
- bump_type: if version need to be pump, allow to configure next release update type: major, minor, patch, dev
|
||||
- bump_dev_strategy: if bump_type is dev, allow to choose dev update strategy: post, pre-patch, pre-minor, pre-major
|
||||
|
||||
* All same args as getLastVersion()
|
||||
* bump_type: if version need to be pump, allow to configure next release update type: __major, minor, patch, dev__
|
||||
* bump\_dev\_strategy: if bump\_type is dev, allow to choose dev update strategy: __post, pre-patch, pre-minor, pre-major__
|
||||
|
||||
A version object can also be manually formated:
|
||||
|
||||
@@ -108,6 +122,7 @@ kwargs available to those function:
|
||||
## Limitations
|
||||
|
||||
There is unfortunately some technical limitation :
|
||||
- MultiThreading and async behavior is not tested.
|
||||
- Multiple tag on the same commit is not supported.
|
||||
- Branch filter when searching for a version is only tested with -no-ff strategy
|
||||
|
||||
* MultiThreading and async behavior is not tested.
|
||||
* Multiple tag on the same commit is not supported.
|
||||
* Branch filter when searching for a version is only tested with -no-ff strategy
|
||||
@@ -36,6 +36,7 @@ classifiers = [
|
||||
]
|
||||
dependencies = [
|
||||
'importlib-metadata; python_version<"3.9"',
|
||||
'packaging'
|
||||
]
|
||||
dynamic = ["version"]
|
||||
|
||||
@@ -49,10 +50,6 @@ where = ["src"]
|
||||
[tool.setuptools.package-data]
|
||||
"pygitversionhelper.data" = ["*.*"]
|
||||
|
||||
#[tool.setuptools_scm]
|
||||
#write_to = "src/pygitversionhelper/_version.py"
|
||||
#version_scheme = "python-simplified-semver"
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://chacha.ddns.net/gitea/chacha/pygitversionhelper"
|
||||
Documentation = "https://chacha.ddns.net/gitea/chacha/pygitversionhelper/wiki"
|
||||
|
||||
@@ -139,7 +139,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
|
||||
the commit message
|
||||
"""
|
||||
current_commit_id=cls.getLast(**kwargs)
|
||||
tag_commit_id=cls.getFromTag(tag,**kwargs)
|
||||
tag_commit_id=cls.getFromTag(tag)
|
||||
|
||||
if ((cls.__OptDict["same_branch"] in kwargs) and (kwargs[cls.__OptDict["same_branch"]] is True)):
|
||||
commits = _exec(f"git rev-list --first-parent --ancestry-path {tag_commit_id}..{current_commit_id}")
|
||||
@@ -147,7 +147,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
|
||||
commits = _exec(f"git rev-list --ancestry-path {tag_commit_id}..{current_commit_id}")
|
||||
result=[]
|
||||
for commit in commits:
|
||||
result.append(cls.getMessage(commit,**kwargs))
|
||||
result.append(cls.getMessage(commit))
|
||||
|
||||
if ((cls.__OptDict["merged_output"] in kwargs) and (kwargs[cls.__OptDict["merged_output"]] is True)):
|
||||
print("JOIN")
|
||||
@@ -155,16 +155,16 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
|
||||
return result
|
||||
|
||||
@classmethod
|
||||
def getMessage(cls, hash:str) -> str:
|
||||
def getMessage(cls, commit_hash:str) -> str:
|
||||
"""
|
||||
retrieve a commit message from repository
|
||||
Args:
|
||||
hash: id of the commit
|
||||
commit_hash: id of the commit
|
||||
Returns:
|
||||
the commit message
|
||||
"""
|
||||
try:
|
||||
res=_exec(f"git log -z --pretty=tformat:%B%-C() -n 1 {hash}",None,True).rstrip('\x00')
|
||||
res=_exec(f"git log -z --pretty=\"tformat:%B%-C()\" -n 1 {commit_hash}",None,True).rstrip('\x00')
|
||||
except gitversionhelper.unknownGITFatalError as _e:
|
||||
raise cls.commitNotFound("no commit found in commit history") from _e
|
||||
|
||||
@@ -202,7 +202,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
|
||||
except gitversionhelper.unknownGITFatalError as _e:
|
||||
raise cls.commitNotFound("no commit found in commit history") from _e
|
||||
else:
|
||||
res = _exec("git for-each-ref --sort=-committerdate refs/heads/ --count 1 --format=%(objectname)")
|
||||
res = _exec("git for-each-ref --sort=-committerdate refs/heads/ --count 1 --format=\"%(objectname)\"")
|
||||
|
||||
if len(res)==0:
|
||||
raise cls.commitNotFound("no commit found in commit history")
|
||||
@@ -494,6 +494,14 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
|
||||
return _v.doFormatVersion(**kwargs)
|
||||
return _v
|
||||
|
||||
@classmethod
|
||||
def getCurrentFormatedVersion(cls,**kwargs) -> str :
|
||||
"""
|
||||
Same as getCurrentVersion() with formated_output kwarg activated
|
||||
"""
|
||||
kwargs["formated_output"]=True
|
||||
return cls.getCurrentVersion(kwargs)
|
||||
|
||||
@classmethod
|
||||
def _parseTag(cls,tag,**kwargs): # pylint: disable=R0914, R0912, R0915
|
||||
"""get the last version from tags
|
||||
|
||||
Reference in New Issue
Block a user