Skip to content

Commit 0eaf4d1

Browse files
committed
updates from 0.79
1 parent 4bbff8f commit 0eaf4d1

File tree

5 files changed

+259
-161
lines changed

5 files changed

+259
-161
lines changed

src/main/java/com/vectorcast/plugins/vectorcastexecution/job/NewPipelineJob.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,15 @@ private String correctPath(final String in) {
451451
return in.replace("\\", "/").replace("\"", "\\\"");
452452
}
453453

454+
/**
455+
* Format the multiline to either be the multiline or empty "".
456+
*
457+
* @param in input string
458+
* @return String correct path.
459+
*/
460+
private String getMultiLineString(String sInVar) {
461+
return (sInVar == null || sInVar.trim().isEmpty()) ? "\"\"" : "'''" + sInVar + "'''\n";
462+
}
454463
/**
455464
* Generates the <script> portion of the config.xml
456465
* which defines the pipeline for this pipeline job.
@@ -504,16 +513,16 @@ private String generateJenkinsfile() throws IOException {
504513
+ "//\n"
505514
+ "// ===========================================================\n"
506515
+ "\n"
507-
+ "def VC_Manage_Project = \'" + getManageProjectName() + "\'\n"
508-
+ "def VC_EnvSetup = '''" + setup + "'''\n"
509-
+ "def VC_Build_Preamble = \"" + preamble + "\"\n"
510-
+ "def VC_EnvTeardown = '''" + teardown + "'''\n"
516+
+ "def VC_Manage_Project = \'" + getManageProjectName() + "\'\n"
517+
+ "def VC_EnvSetup = " + getMultiLineString(setup)
518+
+ "def VC_Build_Preamble = \"" + preamble + "\"\n"
519+
+ "def VC_EnvTeardown = " + getMultiLineString(teardown)
511520
+ "def scmStep () { " + pipelineSCM + " }\n"
512-
+ "def VC_usingSCM = "
513-
+ String.valueOf(pipelineSCM.length() != 0) + "\n"
514-
+ "def VC_postScmStepsCmds = '''" + postCheckoutCmds + "'''\n"
515-
+ "def VC_sharedArtifactDirectory = '''"
516-
+ sharedArtifactDirectory + "'''\n"
521+
+ "def VC_usingSCM = " + String.valueOf(pipelineSCM.length() != 0)
522+
+ "\n"
523+
+ "def VC_postScmStepsCmds = "
524+
+ getMultiLineString(postCheckoutCmds)
525+
+ "def VC_sharedArtifactDirectory = " + sharedArtifactDir + "\"\n"
517526
+ "def VC_Agent_Label = '" + getNodeLabel() + "'\n"
518527
+ "def VC_waitTime = '" + getWaitTime() + "'\n"
519528
+ "def VC_waitLoops = '" + getWaitLoops() + "'\n"
@@ -530,7 +539,8 @@ private String generateJenkinsfile() throws IOException {
530539
+ "def VC_pclpResultsPattern = '" + getPclpResultsPattern() + "'\n"
531540
+ "def VC_useSquore = "
532541
+ String.valueOf(getSquoreCommand().length() != 0) + "\n"
533-
+ "def VC_squoreCommand = '''" + getSquoreCommand() + "'''\n"
542+
+ "def VC_squoreCommand = "
543+
+ getMultiLineString(getSquoreCommand())
534544
+ "def VC_useCoverageHistory = " + getUseCoverageHistory() + "\n"
535545
+ "def VC_useStrictImport = " + getUseStrictTestcaseImport() + "\n"
536546
+ "def VC_useRGW3 = " + getUseRGW3() + "\n"

src/main/resources/scripts/baseJenkinsfile.groovy

Lines changed: 40 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,37 @@ def VC_Use_Threshold = true
99
//
1010
// Generic file from VectorCAST Pipeline Plug-in DO NOT ALTER
1111
//
12-
// ===============================================================
12+
// ===============================================================
13+
14+
// Gathering global variables to be used by functions
15+
def VC = [
16+
mpName: VC_Manage_Project
17+
setup: VC_EnvSetup
18+
preable: VC_Build_Preamble
19+
teardown: VC_EnvTeardown
20+
oneChkDir: VC_useOneCheckoutDir
21+
usingSCM: VC_usingSCM
22+
postSCMSteps: VC_postScmStepsCmds
23+
maxParallel: VC_maxParallel
24+
useRGW3: VC_useRGW3
25+
waitTime: VC_waitTime
26+
waitLoops: VC_waitLoops
27+
useCI: VC_useCILicense
28+
useCBT: VC_useCBT
29+
useCoverPlgin: VC_useCoveragePlugin
30+
sharedBldDir: VC_sharedArtifactDirectory
31+
strictImp: VC_useStrictImport
32+
useCoverHist: VC_useCoverageHistory
33+
useImpRst: VC_useImportedResults
34+
useLocImpRst: VC_useLocalImportedResults
35+
useExtImpRst: VC_useExternalImportedResults
36+
extRst: VC_externalResultsFilename
37+
usePclp: VC_usePCLintPlus
38+
pLcpCmd: VC_pclpCommand
39+
pLcpRsltPattern: VC_pclpResultsPattern
40+
useSquore: VC_useSquore
41+
squoreCmd: VC_squoreCommand
42+
]
1343

1444
// ===============================================================
1545
//
@@ -409,10 +439,7 @@ def runCommands(cmds, envSetup, useCILicense) {
409439
//
410440
// ===============================================================
411441

412-
def setupManageProject(waitTime, waitLoops, manageProject, useCILicense,
413-
sharedArtifactDirectory, envSetup, useExternalImportedResults,
414-
useImportedResults, useLocalImportedResults, externalResultsFilename,
415-
useStrictImport, useOneCheckoutDir) {
442+
def setupManageProject(VC) {
416443

417444
def mpName = getMPname(manageProject)
418445

@@ -479,11 +506,7 @@ def setupManageProject(waitTime, waitLoops, manageProject, useCILicense,
479506
//
480507
// ===============================================================
481508

482-
def transformIntoStep(inputString, useOneCheckoutDir, usingSCM, envSetup,
483-
useRGW3, waitTime, waitLoops, manageProject, useCILicense,
484-
envTeardown, useCBT, sharedArtifactDirectory,
485-
useExternalImportedResults, buildPreamble, useImportedResults,
486-
useStrictImport, useLocalImportedResults, externalResultsFilename) {
509+
def transformIntoStep(inputString, VC) {
487510

488511
def compiler = ""
489512
def test_suite = ""
@@ -549,10 +572,7 @@ def transformIntoStep(inputString, useOneCheckoutDir, usingSCM, envSetup,
549572
if (usingSCM && !useOneCheckoutDir) {
550573

551574
// set options for each manage project pulled out out of SCM
552-
setupManageProject(waitTime, waitLoops, manageProject, useCILicense,
553-
sharedArtifactDirectory, envSetup, useExternalImportedResults,
554-
useImportedResults, useLocalImportedResults, externalResultsFilename,
555-
useStrictImport, useOneCheckoutDir)
575+
setupManageProject(VC)
556576
}
557577

558578
// setup the commands for building, executing, and transferring information
@@ -632,19 +652,11 @@ def transformIntoStep(inputString, useOneCheckoutDir, usingSCM, envSetup,
632652
// Notes : Use to get a list of system and unit tests jobs
633653
//
634654
// ===============================================================
635-
def stepsForJobList(localEnvList, useOneCheckoutDir, usingSCM, envSetup,
636-
useRGW3, waitTime, waitLoops, manageProject, useCILicense,
637-
envTeardown, useCBT, sharedArtifactDirectory,
638-
useExternalImportedResults, buildPreamble, useImportedResults,
639-
useStrictImport, useLocalImportedResults, externalResultsFilename) {
655+
def stepsForJobList(localEnvList, VC) {
640656

641657
def jobList = [:]
642658
localEnvList.each {
643-
jobList[it] = transformIntoStep(it, useOneCheckoutDir, usingSCM, envSetup,
644-
useRGW3, waitTime, waitLoops, manageProject, useCILicense,
645-
envTeardown, useCBT, sharedArtifactDirectory,
646-
useExternalImportedResults, buildPreamble, useImportedResults,
647-
useStrictImport, useLocalImportedResults, externalResultsFilename)
659+
jobList[it] = transformIntoStep(it, VC)
648660
}
649661

650662
return jobList
@@ -669,14 +681,6 @@ pipeline {
669681
agent {label VC_Agent_Label as String}
670682

671683
stages {
672-
// Place holder for previous stages the customer may need to use
673-
stage('Previous-Stage') {
674-
steps {
675-
script {
676-
println "place holder for previous stages"
677-
}
678-
}
679-
}
680684

681685
// If we are using a single checkout directory option, do the checkout here
682686
// This stage also includes the implementation for the parameterized Jenkins job
@@ -852,17 +856,10 @@ pipeline {
852856
stage('System Test Build-Execute Stage') {
853857
steps {
854858
script {
855-
setupManageProject(VC_waitTime, VC_waitLoops, VC_Manage_Project, VC_useCILicense,
856-
VC_sharedArtifactDirectory, VC_EnvSetup, VC_useExternalImportedResults,
857-
VC_useImportedResults, VC_useLocalImportedResults, VC_externalResultsFilename,
858-
VC_useStrictImport, VC_useOneCheckoutDir)
859+
setupManageProject(VC)
859860

860861
// Get the job list from the system test environment listed
861-
def jobs = stepsForJobList(StEnvList, VC_useOneCheckoutDir, VC_usingSCM, VC_EnvSetup,
862-
VC_useRGW3, VC_waitTime, VC_waitLoops, VC_Manage_Project, VC_useCILicense,
863-
VC_EnvTeardown, VC_useCBT, VC_sharedArtifactDirectory,
864-
VC_useExternalImportedResults, VC_Build_Preamble, VC_useImportedResults,
865-
VC_useStrictImport, VC_useLocalImportedResults, VC_externalResultsFilename)
862+
def jobs = stepsForJobList(StEnvList, VC)
866863

867864
// run each of those jobs in serial
868865
jobs.each { name, job ->
@@ -877,17 +874,10 @@ pipeline {
877874
stage('Unit Test Build-Execute Stage') {
878875
steps {
879876
script {
880-
setupManageProject(VC_waitTime, VC_waitLoops, VC_Manage_Project, VC_useCILicense,
881-
VC_sharedArtifactDirectory, VC_EnvSetup, VC_useExternalImportedResults,
882-
VC_useImportedResults, VC_useLocalImportedResults, VC_externalResultsFilename,
883-
VC_useStrictImport, VC_useOneCheckoutDir)
877+
setupManageProject(VC)
884878

885879
// Get the job list from the unit test environment listed
886-
def jobs = stepsForJobList(UtEnvList, VC_useOneCheckoutDir, VC_usingSCM, VC_EnvSetup,
887-
VC_useRGW3, VC_waitTime, VC_waitLoops, VC_Manage_Project, VC_useCILicense,
888-
VC_EnvTeardown, VC_useCBT, VC_sharedArtifactDirectory,
889-
VC_useExternalImportedResults, VC_Build_Preamble, VC_useImportedResults,
890-
VC_useStrictImport, VC_useLocalImportedResults, VC_externalResultsFilename)
880+
def jobs = stepsForJobList(UtEnvList, VC)
891881

892882
if (VC_maxParallel > 0) {
893883
def runningJobs = [:]
@@ -1235,14 +1225,5 @@ pipeline {
12351225
}
12361226
}
12371227
}
1238-
1239-
// Place holder for previous stages the customer may need to use
1240-
stage('Next-Stage') {
1241-
steps {
1242-
script {
1243-
println "place holder for next stages"
1244-
}
1245-
}
1246-
}
12471228
}
12481229
}

src/main/resources/scripts/cobertura.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,17 @@
2323
#
2424

2525
from lxml import etree
26+
27+
from vcast_utils import dump, checkVectorCASTVersion, getVectorCASTEncoding
28+
2629
try:
2730
from vector.apps.DataAPI.vcproject_api import VCProjectApi
2831
from vector.apps.DataAPI.vcproject_models import VCProject
2932
except:
3033
pass
34+
3135
from vector.apps.DataAPI.cover_api import CoverApi
36+
3237
try:
3338
from vector.apps.DataAPI.unit_test_api import UnitTestApi
3439
except:
@@ -41,11 +46,11 @@
4146
from safe_open import open
4247
except:
4348
pass
49+
50+
import shutil
4451

4552
fileList = []
4653

47-
from vcast_utils import dump, checkVectorCASTVersion, getVectorCASTEncoding, checkProjectResults
48-
4954
encFmt = getVectorCASTEncoding()
5055

5156
def write_xml(x, name, verbose = False):
@@ -54,12 +59,19 @@ def write_xml(x, name, verbose = False):
5459
print(etree.tostring(x,pretty_print=True))
5560

5661
xml_str = "<?xml version='1.0' encoding='UTF-8'?>\n"
57-
xml_str += "<!DOCTYPE coverage SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-04.dtd'>\n"
62+
xml_str += "<!DOCTYPE coverage SYSTEM 'coverage-extended-04.dtd'>\n"
5863

5964
xml_str += etree.tostring(x,pretty_print=True).decode()
6065

6166
with open(name + ".xml", "wb") as fd:
6267
fd.write(xml_str.encode(encFmt,"replace"))
68+
69+
# copy .dtd file over for verification
70+
inFile = "vc_scripts/coverage-extended-04.dtd"
71+
outFile = os.path.join(os.path.dirname(name),"coverage-extended-04.dtd")
72+
73+
if os.path.exist(inFile):
74+
shutil.copy(inFile,outFile)
6375

6476
def getCoveredFunctionCount(source):
6577
if len(source.functions) == 0:
@@ -116,8 +128,8 @@ def getFileXML(testXml, coverAPI, verbose = False, extended = False, source_root
116128
file = None
117129

118130
if verbose:
119-
print (" fname = ", fname)
120-
print (" fpath = ", fpath)
131+
print (" fname = " + fname)
132+
print (" fpath = " + fpath)
121133

122134
for element in testXml.iter():
123135
if element.tag == "class" and element.attrib['filename'] == fpath:
@@ -390,23 +402,10 @@ def procesCoverage(coverXML, coverApi, extended = False, source_root = ""):
390402

391403
def runCoverageResultsMP(packages, mpFile, verbose = False, extended=False, source_root = ""):
392404

393-
with VCProjectApi(mpFile) as vcproj:
394-
395-
anyLocalResults, anyImportedResults = checkProjectResults(vcproj)
396-
397-
if anyImportedResults:
398-
importedResultsError = " ** Cobertura results does not processing imported results at this time\n\n"
399-
print(importedResultsError)
400-
return [-1] * 19
401-
402-
if not anyLocalResults:
403-
localResultsError = " ** No local results in project to process\n\n"
404-
print(localResultsError)
405-
return [-1] * 19
406-
407-
api = vcproj.project.cover_api
408-
409-
results = runCoberturaResults(packages, api, verbose = False, extended = extended, source_root = source_root)
405+
vcproj = VCProjectApi(mpFile)
406+
api = vcproj.project.cover_api
407+
results = runCoberturaResults(packages, api, verbose = False, extended = extended, source_root = source_root)
408+
vcproj.close()
410409

411410
return results
412411

@@ -781,8 +780,8 @@ def generateCoverageResults(inFile, azure = False, xml_data_dir = "xml_data", ve
781780
if __name__ == '__main__':
782781

783782
if not checkVectorCASTVersion(21):
784-
print("Cannot create Cobertura metrics. Please upgrade VectorCAST")
785-
sys.exit()
783+
print ("Cannot create Cobertura metrics. Please upgrade VectorCAST")
784+
sys.exit(0)
786785

787786
parser = argparse.ArgumentParser()
788787
parser.add_argument('ManageProject', help='Manager Project Name')

0 commit comments

Comments
 (0)