Compare commits

...

9 Commits

Author SHA1 Message Date
cclecle
7b9752a17a cast to decimalformat 2023-03-23 22:47:52 +00:00
cclecle
879a7ca03d fix wrong method name :-/ 2023-03-23 22:42:07 +00:00
cclecle
bd3389aeb2 cast to double + fix complexity 2023-03-23 22:37:45 +00:00
cclecle
886a22bef2 add missing java lib in groovy 2023-03-23 22:23:57 +00:00
cclecle
e9355471ba cast float to strings 2023-03-23 22:19:48 +00:00
cclecle
3bbbe946a1 switch to readfile 2023-03-23 21:54:21 +00:00
cclecle
cc2f6353ac add coverage results publishing 2023-03-23 21:40:03 +00:00
cclecle
6e1bff135b add missing test 2023-03-23 01:12:51 +00:00
cclecle
f74633cee3 feat: remove coverage pragma because we need to be realistic
test: add missing unit test
2023-03-23 00:07:53 +00:00
3 changed files with 98 additions and 7 deletions

50
Jenkinsfile vendored
View File

@@ -6,7 +6,12 @@
// You should have received a copy of the license along with this
// work. If not, see <https://creativecommons.org/licenses/by-nc-sa/4.0/>.
import groovy.xml.XmlUtil
import static javax.xml.xpath.XPathConstants.*
import javax.xml.xpath.*
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory
import java.math.RoundingMode
// configurable settings:
// use to send email if workflow problem
@@ -28,6 +33,10 @@ def _MkDocsWebURL = "dabauto--mkdocs-web.dmz.chacha.home/mkdocs-web/"
def _MkDocsWebCredentials = "2c5b684e-3787-4b37-8aca-b3dd4a383fe2"
def _PypiCredentials = "Pypi"
def badge_coverage = addEmbeddableBadgeConfiguration(id: "coverage", subject: "unit-test coverage")
def badge_complexity = addEmbeddableBadgeConfiguration(id: "complexity", subject: "code complexity")
// commands Helper: /!\ Made for GITEA /!\
String determineRepoUserName() {
return scm.getUserRemoteConfigs()[0].getUrl().tokenize('/')[3].split("\\.")[0]
@@ -63,6 +72,28 @@ String ExtractBaseVersion(inVersion) {
return matcher[0][1]
}
int GetCoverageValue(String CoverageFilePath,String XPath)
{
//File file = new File(CoverageFilePath)
//coverageReportRaw = file.getText('UTF-8')
coverageReportRaw = readFile(CoverageFilePath)
coverageReport = DOMBuilder.parse(new StringReader(coverageReportRaw), false, false)
coverageReportRoot = coverageReport.documentElement
def xpath = XPathFactory.newInstance().newXPath()
res = xpath.evaluate(XPath,coverageReportRoot,NUMBER)
return res
}
int GetCoverageValue_lines_valid(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@lines-valid") }
int GetCoverageValue_lines_covered(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@lines-covered") }
int GetCoverageValue_line_rate(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@line-rate") }
int GetCoverageValue_branches_valid(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@branches-valid") }
int GetCoverageValue_branches_covered(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@branches-covered") }
int GetCoverageValue_branch_rate(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@branch-rate") }
int GetCoverageValue_complexity(String CoverageFilePath) { return GetCoverageValue(CoverageFilePath,"/coverage/@complexity") }
pipeline {
// for Docker based build (preferable)
@@ -400,6 +431,23 @@ pipeline {
println unit_test_full_name__html
unit_test_full_name__xml=findFiles(glob: "helpers-results/unit_test_full/*.xml")[0].getName()
println unit_test_full_name__xml
coverage_report_path = "helpers-results/unit_test_coverage/test_coverage.xml"
println GetCoverageValue_lines_valid(coverage_report_path)
println GetCoverageValue_lines_covered(coverage_report_path)
println GetCoverageValue_line_rate(coverage_report_path)
println GetCoverageValue_branches_valid(coverage_report_path)
println GetCoverageValue_branches_covered(coverage_report_path)
println GetCoverageValue_branch_rate(coverage_report_path)
println GetCoverageValue_complexity(coverage_report_path)
full_rate = DecimalFormat( (GetCoverageValue_line_rate(coverage_report_path) + GetCoverageValue_branch_rate(coverage_report_path)) / 2 )
sz_full_rate =Float.toString(full_rate.setScale(2, RoundingMode.HALF_EVEN))
badge_coverage.setStatus(sz_full_rate)
complexity = DecimalFormat( GetCoverageValue_complexity(coverage_report_path))
sz_complexity =Float.toString(complexity.setScale(2, RoundingMode.HALF_EVEN))
badge_complexity.setStatus(sz_complexity)
}
}
}

View File

@@ -58,9 +58,9 @@ def _exec(cmd: str, root: str | os.PathLike | None = None, raw: bool = False) ->
)
if re.search("not a git repository", p.stderr):
raise gitversionhelper.repository.notAGitRepository()
if re.search("fatal:", p.stderr): # pragma: nocover
if re.search("fatal:", p.stderr):
raise gitversionhelper.unknownGITFatalError(p.stderr)
if int(p.returncode) < 0: # pragma: nocover
if int(p.returncode) < 0:
raise gitversionhelper.unknownGITError(p.stderr)
if raw:
@@ -145,7 +145,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
def getMessagesSinceTag(cls, tag: str, **kwargs) -> str:
"""
retrieve a commits message history from repository
from LastCommit to the given tag
from Latest commit to the given tag
Keyword Arguments:
merged_output: output one single merged string
same_branch(bool): force searching only in the same branch
@@ -278,7 +278,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
@classmethod
def getLastTag(cls, **kwargs) -> str | None:
"""
retrieve the last tag from a repository
retrieve the Latest tag from a repository
Keyword Arguments:
same_branch(bool): force searching only in the same branch
Returns:
@@ -293,14 +293,14 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
if len(res) == 0:
raise cls.tagNotFound("no tag found in commit history")
if len(res) != 1: # pragma: nocover
if len(res) != 1:
raise cls.moreThanOneTag("multiple tags on same commit is unsupported")
return res[0]
@classmethod
def getDistanceFromTag(cls, tag: str = None, **kwargs) -> int:
"""
retrieve the distance between HEAD and tag in the repository
retrieve the distance between Latest commit and tag in the repository
Arguments:
tag: reference tag, if None the most recent one will be used
Keyword Arguments:

View File

@@ -298,6 +298,8 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertEqual(_v.pre_count, 0)
self.assertEqual(_v.post_count, 2)
self.assertEqual(_v.doFormatVersion(), "2.1.2+post.2")
self.assertEqual(_v.doFormatVersion(version_std="SemVer"), "2.1.2+post.2")
self.assertEqual(_v.doFormatVersion(version_std="PEP440"), "2.1.2.post2")
_v = _v.bump(bump_type="patch")
self.assertEqual(_v.raw, "2.1.3")
@@ -544,6 +546,15 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertEqual(_v.minor, 1)
self.assertEqual(_v.patch, 0)
def test_nominal__version___getCurrentFormatedVersion(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system('git commit -m "first commit"')
os.system(f"git tag 0.2.0")
self.assertEqual(pygitversionhelper.gitversionhelper.version.getCurrentFormatedVersion(), "0.2.0")
def test_nominal__version___AUTO_bump_commits(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
@@ -678,6 +689,12 @@ class Test_gitversionhelper(unittest.TestCase):
formated_output=True,
),
)
self.assertEqual(
"0.1.1",
pygitversionhelper.gitversionhelper.version.getLastVersion(
formated_output=True,
),
)
def test_nominal__git__emptyrepo(self):
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
@@ -1253,6 +1270,10 @@ class Test_gitversionhelper(unittest.TestCase):
with self.assertRaises(pygitversionhelper.gitversionhelper.commit.commitNotFound):
pygitversionhelper.gitversionhelper.commit.getLast(same_branch=True)
def test_defect__commit_getMessage_notfound(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.commit.commitNotFound):
pygitversionhelper.gitversionhelper.commit.getMessage("")
def test_nominal__commit_getFromTag(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
@@ -1371,6 +1392,28 @@ class Test_gitversionhelper(unittest.TestCase):
res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True)
self.assertEqual(os.linesep.join([commit_message4, commit_message3, commit_message2]), res)
cmd = "git checkout -b dev".split()
subprocess.run(cmd, text=True, check=True)
commit_message5 = "5.1 update this" + os.linesep + "5.1 fix that" + os.linesep + "5.1 test"
commit_message5 = commit_message5.replace("\r\n", "\n").replace("\n", "\r\n")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue5")
os.system("git add .")
cmd = "git commit -m".split()
cmd.append(commit_message5)
subprocess.run(cmd, text=True, check=True)
cmd = "git switch master".split()
subprocess.run(cmd, text=True, check=True)
res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True, same_branch=True)
self.assertEqual(os.linesep.join([commit_message4, commit_message3, commit_message2]), res)
res = pygitversionhelper.gitversionhelper.commit.getMessagesSinceTag("0.1.1", merged_output=True)
self.assertEqual(os.linesep.join([commit_message5, commit_message4, commit_message3, commit_message2]), res)
def tearDown(self):
os.chdir("/")