Skip to content

Commit 3b241ee

Browse files
committed
[RELEASE] iText 7 pdfHTML - 2.1.7
https://github.com/itext/i7n-pdfhtml/releases/tag/2.1.7 * release/2.1.7: [RELEASE] 2.1.7-SNAPSHOT -> 2.1.7 Update .nuspec to list git repo information Unignore FontFaceTest methods Update ToDo remarks Update pdfHTML nuspec description Fix test cmp Update copyright year Use a version placeholder in doxyfile Add missing copyright headers Implement lang attribute processing Fix cmp files Change in Jenkinsfile to get and configure JFrogCli in case of develop or master branch run Update port-hash Change Jenkinsfile so that the dependencies are used from branch-artifacts repo Change in Jenkinsfile to reset build result when retrying a stage Change Jenkinsfile to retry clearing the workspace and compiling when anything fails Change Jenkinsfile so that the build is blocked when there is an itextcore build running Fix typo in reference to BouncyCastle - version must consist of 4 numbers Update Bouncy Castle version Add Test postfix to the test classes names. Update TODO's comments Update port-hash Update ConverterProperties JavaDoc Refactor resource tests, add tests on releasing font and css Update port-hash after release [RELEASE] Update dependency versions Change line width in cmp files Add new test demonstrating a problem of checkboxes not being tagged
2 parents 7c4b695 + a450921 commit 3b241ee

File tree

1,372 files changed

+3752
-1861
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,372 files changed

+3752
-1861
lines changed

Jenkinsfile

Lines changed: 167 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ pipeline {
1111
ansiColor('xterm')
1212
buildDiscarder(logRotator(artifactNumToKeepStr: '1'))
1313
parallelsAlwaysFailFast()
14-
retry(1)
1514
skipStagesAfterUnstable()
1615
timeout(time: 60, unit: 'MINUTES')
1716
timestamps()
@@ -22,37 +21,100 @@ pipeline {
2221
}
2322

2423
stages {
25-
stage('Clean workspace') {
26-
options {
27-
timeout(time: 5, unit: 'MINUTES')
28-
}
24+
stage('Wait for blocking jobs') {
2925
steps {
30-
cleanWs deleteDirs: true, patterns: [
31-
[pattern: 'packages', type: 'INCLUDE'],
32-
[pattern: 'global-packages', type: 'INCLUDE'],
33-
[pattern: 'tmp/NuGetScratch', type: 'INCLUDE'],
34-
[pattern: 'http-cache', type: 'INCLUDE'],
35-
[pattern: 'plugins-cache', type: 'INCLUDE'],
36-
[pattern: '**/obj', type: 'INCLUDE'],
37-
[pattern: '**/bin', type: 'INCLUDE']
38-
]
39-
}
40-
}
41-
stage('Compile') {
26+
script {
27+
properties([[$class: 'BuildBlockerProperty', blockLevel: 'GLOBAL', blockingJobs: ".*/itextcore/${env.JOB_BASE_NAME}", scanQueueFor: 'ALL', useBuildBlocker: true]])
28+
}
29+
}
30+
}
31+
stage('Build') {
4232
options {
43-
timeout(time: 20, unit: 'MINUTES')
33+
retry(2)
4434
}
45-
steps {
46-
withEnv(["NUGET_PACKAGES=${env.WORKSPACE}/global-packages", "temp=${env.WORKSPACE}/tmp/NuGetScratch", "NUGET_HTTP_CACHE_PATH=${env.WORKSPACE}/http-cache", "NUGET_PLUGINS_CACHE_PATH=${env.WORKSPACE}/plugins-cache", "gsExec=${gsExec}", "compareExec=${compareExec}"]) {
47-
bat "\"${env.NuGet}\" restore itext.html2pdf.sln"
48-
bat "dotnet restore itext.html2pdf.sln"
49-
bat "dotnet build itext.html2pdf.sln --configuration Release --source ${env.WORKSPACE}/packages"
50-
script {
51-
createPackAllFile(findFiles(glob: '**/*.nuspec'))
52-
load 'packAll.groovy'
35+
stages {
36+
stage('Clean workspace') {
37+
options {
38+
timeout(time: 5, unit: 'MINUTES')
39+
}
40+
steps {
41+
cleanWs deleteDirs: true, patterns: [
42+
[pattern: 'packages', type: 'INCLUDE'],
43+
[pattern: 'global-packages', type: 'INCLUDE'],
44+
[pattern: 'tmp/NuGetScratch', type: 'INCLUDE'],
45+
[pattern: 'http-cache', type: 'INCLUDE'],
46+
[pattern: 'plugins-cache', type: 'INCLUDE'],
47+
[pattern: '**/obj', type: 'INCLUDE'],
48+
[pattern: '**/bin', type: 'INCLUDE'],
49+
[pattern: '**/*.nupkg', type: 'INCLUDE']
50+
]
51+
}
52+
}
53+
stage('Install branch dependencies') {
54+
options {
55+
timeout(time: 5, unit: 'MINUTES')
56+
}
57+
when {
58+
not {
59+
anyOf {
60+
branch "master"
61+
branch "develop"
62+
}
63+
}
64+
}
65+
steps {
66+
script {
67+
getAndConfigureJFrogCLI()
68+
sh "./jfrog rt dl --flat=true branch-artifacts/${env.JOB_BASE_NAME}/**/dotnet/"
69+
// create global-packages directory
70+
dir("${env.WORKSPACE}/global-packages") {writeFile file:'dummy', text:''}
71+
nuspecFiles = findFiles(glob: '**/*.nuspec')
72+
buildArtifacts = []
73+
nuspecFiles.each{ nuspecFile ->
74+
def xmlTxt = sh(returnStdout: true, script: '#!/bin/sh -e\n' + "cat \"${nuspecFile.path.replace('\\','/')}\"").replaceAll("^.*<", "<")
75+
def xml = new XmlSlurper(false, false).parseText("${xmlTxt}")
76+
def artifactId = "${xml.metadata.id}"
77+
def artifactVersion = "${xml.metadata.version}"
78+
artifact = "${artifactId}.${artifactVersion}"
79+
buildArtifacts.add(artifact)
80+
}
81+
withEnv(["NUGET_PACKAGES=${env.WORKSPACE}/global-packages", "temp=${env.WORKSPACE}/tmp/NuGetScratch", "NUGET_HTTP_CACHE_PATH=${env.WORKSPACE}/http-cache", "NUGET_PLUGINS_CACHE_PATH=${env.WORKSPACE}/plugins-cache", "gsExec=${gsExec}", "compareExec=${compareExec}"]) {
82+
createInstallAllFile(findFiles(glob: '**/*.nupkg'), buildArtifacts)
83+
load 'installAll.groovy'
84+
}
85+
nupkgFiles = findFiles(glob: '*.nupkg')
86+
nupkgFiles.each{ nupkgFile ->
87+
println "Delete downloaded ${nupkgFile.path}"
88+
cleanWs deleteDirs: true, patterns: [[pattern: "${nupkgFile.path}", type: 'INCLUDE']]
89+
}
90+
}
91+
}
92+
}
93+
stage('Compile') {
94+
options {
95+
timeout(time: 20, unit: 'MINUTES')
96+
}
97+
steps {
98+
withEnv(["NUGET_PACKAGES=${env.WORKSPACE}/global-packages", "temp=${env.WORKSPACE}/tmp/NuGetScratch", "NUGET_HTTP_CACHE_PATH=${env.WORKSPACE}/http-cache", "NUGET_PLUGINS_CACHE_PATH=${env.WORKSPACE}/plugins-cache", "gsExec=${gsExec}", "compareExec=${compareExec}"]) {
99+
bat "\"${env.NuGet}\" restore itext.html2pdf.sln"
100+
bat "dotnet restore itext.html2pdf.sln"
101+
bat "dotnet build itext.html2pdf.sln --configuration Release --source ${env.WORKSPACE}/packages"
102+
script {
103+
createPackAllFile(findFiles(glob: '**/*.nuspec'))
104+
load 'packAll.groovy'
105+
}
106+
}
53107
}
54108
}
55109
}
110+
post {
111+
failure {
112+
sleep time: 2, unit: 'MINUTES'
113+
}
114+
success {
115+
script { currentBuild.result = 'SUCCESS' }
116+
}
117+
}
56118
}
57119
stage('Run Tests') {
58120
options {
@@ -83,15 +145,40 @@ pipeline {
83145
script {
84146
getAndConfigureJFrogCLI()
85147
findFiles(glob: '*.nupkg').each { item ->
86-
upload(item)
148+
def itemArray = (item =~ /(.*?)(\.[0-9]*\.[0-9]*\.[0-9]*(-SNAPSHOT)?)/)
149+
def dir = itemArray[ 0 ][ 1 ]
150+
sh "./jfrog rt u \"${item.path}\" nuget/${dir}/ --flat=false --build-name ${env.BRANCH_NAME} --build-number ${env.BUILD_NUMBER}"
87151
}
88152
}
89153
}
90154
}
91-
stage('Archive Artifacts') {
155+
stage('Branch Artifactory Deploy') {
92156
options {
93157
timeout(time: 5, unit: 'MINUTES')
94158
}
159+
when {
160+
not {
161+
anyOf {
162+
branch "master"
163+
branch "develop"
164+
}
165+
}
166+
}
167+
steps {
168+
script {
169+
if (env.GIT_URL) {
170+
repoName = ("${env.GIT_URL}" =~ /(.*\/)(.*)(\.git)/)[ 0 ][ 2 ]
171+
findFiles(glob: '*.nupkg').each { item ->
172+
sh "./jfrog rt u \"${item.path}\" branch-artifacts/${env.BRANCH_NAME}/${repoName}/dotnet/ --recursive=false --build-name ${env.BRANCH_NAME} --build-number ${env.BUILD_NUMBER} --props \"vcs.revision=${env.GIT_COMMIT};repo.name=${repoName}\""
173+
}
174+
}
175+
}
176+
}
177+
}
178+
stage('Archive Artifacts') {
179+
options {
180+
timeout(time: 5, unit: 'MINUTES')
181+
}
95182
steps {
96183
archiveArtifacts allowEmptyArchive: true, artifacts: '*.nupkg'
97184
}
@@ -133,6 +220,58 @@ pipeline {
133220

134221
}
135222

223+
@NonCPS // has to be NonCPS or the build breaks on the call to .each
224+
def createInstallAllFile(list, buildArtifacts) {
225+
// creates file because the sh command brakes the loop
226+
def buildArtifactsList = buildArtifacts.join(",")
227+
def ws = "${env.WORKSPACE.replace('\\','/')}"
228+
def cmd = "import groovy.xml.XmlUtil\n"
229+
cmd = cmd + "def xmlTxt = ''\n"
230+
cmd = cmd + "def buildArtifacts = \"${buildArtifactsList}\".split(',').collect{it as java.lang.String}\n"
231+
list.each { item ->
232+
filename = item.getName()
233+
def itemArray = (item.getName() =~ /(.*?)\.([0-9]*)\.([0-9]*)\.([0-9]*)(|-SNAPSHOT)/)
234+
def name = itemArray[0][1]
235+
if (!buildArtifacts.contains("${filename.replace(".nupkg","")}")) {
236+
cmd = cmd + "try {xmlTxt = sh(returnStdout: true, script: 'unzip -p ${filename} ${name}.nuspec')} catch (Exception err) { }\n"
237+
cmd = cmd + "xmlTxt = \"\${xmlTxt.replaceFirst('.*?<?xml version','<?xml version')}\"\n"
238+
cmd = cmd + "xml = new XmlSlurper(false, false).parseText(xmlTxt)\n"
239+
cmd = cmd + "install = true\n"
240+
cmd = cmd + "xml.metadata.dependencies.group.dependency.each { dependency ->\n"
241+
cmd = cmd + " artifact = \"\${dependency[\'@id\']}.\${dependency[\'@version\']}\".toString()\n"
242+
cmd = cmd + " if (buildArtifacts.contains(artifact)) {\n"
243+
cmd = cmd + " install = false\n"
244+
cmd = cmd + " }\n"
245+
cmd = cmd + "}\n"
246+
cmd = cmd + "xml.metadata.dependencies.dependency.each { dependency ->\n"
247+
cmd = cmd + " artifact = \"\${dependency[\'@id\']}.\${dependency[\'@version\']}\".toString()\n"
248+
cmd = cmd + " if (buildArtifacts.contains(artifact)) {\n"
249+
cmd = cmd + " install = false\n"
250+
cmd = cmd + " }\n"
251+
cmd = cmd + "}\n"
252+
cmd = cmd + "if (install) {\n"
253+
cmd = cmd + " xml.metadata.dependencies.group.dependency.each { dependency ->\n"
254+
cmd = cmd + " if (\"\${dependency[\'@id\']}\".contains(\"itext7\")) {\n"
255+
cmd = cmd + " sh \"${env.NuGet.replace('\\','/')} install \${dependency[\'@id\']} -PreRelease -Version \${dependency[\'@version\']} -OutputDirectory packages -Source '${ws};https://repo.itextsupport.com/api/nuget/nuget;https://api.nuget.org/v3/index.json'\"\n"
256+
cmd = cmd + " }\n"
257+
cmd = cmd + " }\n"
258+
cmd = cmd + " xml.metadata.dependencies.dependency.each { dependency ->\n"
259+
cmd = cmd + " if (\"\${dependency[\'@id\']}\".contains(\"itext7\")) {\n"
260+
cmd = cmd + " sh \"${env.NuGet.replace('\\','/')} install \${dependency[\'@id\']} -PreRelease -Version \${dependency[\'@version\']} -OutputDirectory packages -Source '${ws};https://repo.itextsupport.com/api/nuget/nuget;https://api.nuget.org/v3/index.json'\"\n"
261+
cmd = cmd + " }\n"
262+
cmd = cmd + " }\n"
263+
cmd = cmd + " try {sh 'rm -r ${ws}/global-packages/${name}'} catch (Exception err) { }\n"
264+
cmd = cmd + " try {sh 'rm -r ${ws}/packages/${filename.replace('.nupkg','')}'} catch (Exception err) { }\n"
265+
cmd = cmd + " sh '\"${env.NuGet.replace('\\','/')}\" install ${name} -PreRelease -OutputDirectory packages -Source \"${ws};https://api.nuget.org/v3/index.json\"'\n"
266+
cmd = cmd + " sh '\"${env.NuGet.replace('\\','/')}\" push ${ws}/${filename} -Source \"${ws}/global-packages\"'\n"
267+
cmd = cmd + "} else {\n"
268+
cmd = cmd + " println \"Not installing '${filename}' - this repository will build dependencies for it....\"\n"
269+
cmd = cmd + "}\n"
270+
}
271+
}
272+
writeFile file: 'installAll.groovy', text: cmd
273+
}
274+
136275
@NonCPS // has to be NonCPS or the build breaks on the call to .each
137276
def createPackAllFile(list) {
138277
// creates file because the bat command brakes the loop
@@ -170,11 +309,3 @@ def createRunTestCsProjsFile(list) {
170309
writeFile file: 'runTestCsProjs.groovy', text: cmd
171310
}
172311

173-
@NonCPS
174-
def upload(item) {
175-
def itemArray = (item =~ /(.*?)(\.[0-9]*\.[0-9]*\.[0-9]*(-SNAPSHOT)?\.nupkg)/)
176-
def dir = itemArray[ 0 ][ 1 ]
177-
sh "./jfrog rt u \"${item.path}\" nuget/${dir}/ --flat=false --build-name="${env.BRANCH_NAME}" --build-number=${env.BUILD_NUMBER}"
178-
}
179-
180-

doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
3232
# title of most generated pages and in a few other places.
3333
# The default value is: My Project.
3434

35-
PROJECT_NAME = "pdfHTML 2.1.5 API"
35+
PROJECT_NAME = "pdfHTML 2.1.7 API"
3636

3737
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
3838
# could be handy for archiving the generated documentation or if some version

itext.tests/itext.html2pdf.tests/Properties/AssemblyInfo.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
[assembly: AssemblyConfiguration("")]
88
[assembly: AssemblyCompany("iText Group NV")]
99
[assembly: AssemblyProduct("iText")]
10-
[assembly: AssemblyCopyright ("Copyright (c) 1998-2019 iText Group NV")]
10+
[assembly: AssemblyCopyright ("Copyright (c) 1998-2020 iText Group NV")]
1111
[assembly: AssemblyTrademark("")]
1212
[assembly: AssemblyCulture("")]
1313

1414
[assembly: ComVisible(false)]
1515

1616
[assembly: Guid("ae4e5743-0665-4705-9a33-07ea57cdd269")]
1717

18-
[assembly: AssemblyVersion("2.1.6.0")]
19-
[assembly: AssemblyFileVersion("2.1.6.0")]
20-
[assembly: AssemblyInformationalVersion("2.1.6")]
18+
[assembly: AssemblyVersion("2.1.7.0")]
19+
[assembly: AssemblyFileVersion("2.1.7.0")]
20+
[assembly: AssemblyInformationalVersion("2.1.7")]
2121

2222
#if !NETSTANDARD1_6
2323
[assembly: NUnit.Framework.Timeout(300000)]

0 commit comments

Comments
 (0)