[sysadmin/ci-tooling] /: Fully purge support for Qt 5.12 and Qt 5.13 builds from the CI infrastructure.
Ben Cooksley
null at kde.org
Fri Nov 27 07:54:10 GMT 2020
Git commit d09a4d5a149eb1c7f47bd7323fadcb2f21c7e3e0 by Ben Cooksley.
Committed on 27/11/2020 at 07:54.
Pushed by bcooksley into branch 'master'.
Fully purge support for Qt 5.12 and Qt 5.13 builds from the CI infrastructure.
CCMAIL: kde-frameworks-devel at kde.org
M +0 -2 archive-configs/production.yaml
M +0 -2 archive-configs/sandbox.yaml
D +0 -9 build-specs/Applications/akonadi-SUSEQt5.12.yaml
R +1 -1 custom-jobs/Extragear craft master SUSEQt5.14.pipeline [from: custom-jobs/Extragear craft master SUSEQt5.12.pipeline - 098% similarity]
M +1 -1 custom-jobs/known-jobs.json
M +0 -2 helpers/check-platform.py
M +2 -2 helpers/extract-cmake-dependency-metadata.py
M +2 -2 helpers/generate-dependency-diagram-data.py
M +1 -1 local-metadata/abi-compliance-checker.yaml
M +0 -6 local-metadata/project-ignore-rules.yaml
D +0 -212 pipeline-templates/Frameworks/SUSEQt5.12.template
D +0 -1 pipeline-templates/Frameworks/SUSEQt5.13.template
M +1 -1 pipeline-templates/Frameworks/SUSEQt5.14.template
T +212 -1 pipeline-templates/Frameworks/SUSEQt5.15.template
D +0 -192 pipeline-templates/SUSEQt5.12.template
D +0 -1 pipeline-templates/SUSEQt5.13.template
M +1 -1 pipeline-templates/SUSEQt5.14.template
T +192 -1 pipeline-templates/SUSEQt5.15.template
M +1 -1 pipeline-templates/dependency-build/AndroidQt5.15.template
D +0 -65 pipeline-templates/dependency-build/SUSEQt5.12.template
D +0 -1 pipeline-templates/dependency-build/SUSEQt5.13.template
M +1 -1 pipeline-templates/dependency-build/SUSEQt5.14.template
T +65 -1 pipeline-templates/dependency-build/SUSEQt5.15.template
D +0 -217 system-images/suse-qt512/Dockerfile
D +0 -221 system-images/suse-qt513/Dockerfile
https://invent.kde.org/sysadmin/ci-tooling/commit/d09a4d5a149eb1c7f47bd7323fadcb2f21c7e3e0
diff --git a/archive-configs/production.yaml b/archive-configs/production.yaml
index 11de746..33d5176 100644
--- a/archive-configs/production.yaml
+++ b/archive-configs/production.yaml
@@ -10,8 +10,6 @@ server:
cacheLocation:
WindowsMSVCQt5.15: "C:\\CI\\archives\\WindowsMSVCQt5.15\\"
- SUSEQt5.12: "/srv/archives/production/SUSEQt5.12/"
- SUSEQt5.13: "/srv/archives/production/SUSEQt5.13/"
SUSEQt5.14: "/srv/archives/production/SUSEQt5.14/"
SUSEQt5.15: "/srv/archives/production/SUSEQt5.15/"
FreeBSDQt5.15: "/usr/home/jenkins/archives/production/"
diff --git a/archive-configs/sandbox.yaml b/archive-configs/sandbox.yaml
index 80bb5c8..d719e8c 100644
--- a/archive-configs/sandbox.yaml
+++ b/archive-configs/sandbox.yaml
@@ -10,8 +10,6 @@ server:
cacheLocation:
WindowsMSVCQt5.15: "C:\\CI\\sandbox-archives\\WindowsMSVCQt5.15\\"
- SUSEQt5.12: "/srv/archives/sandbox/SUSEQt5.12/"
- SUSEQt5.13: "/srv/archives/sandbox/SUSEQt5.13/"
SUSEQt5.14: "/srv/archives/sandbox/SUSEQt5.14/"
SUSEQt5.15: "/srv/archives/sandbox/SUSEQt5.15/"
FreeBSDQt5.15: "/usr/home/jenkins/archives/sandbox/"
diff --git a/build-specs/Applications/akonadi-SUSEQt5.12.yaml b/build-specs/Applications/akonadi-SUSEQt5.12.yaml
deleted file mode 100644
index d8b7697..0000000
--- a/build-specs/Applications/akonadi-SUSEQt5.12.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-kf5-qt5:
- "ctest-arguments": "--verbose"
- run-tests: True
- per-test-timeout: 60
-
-stable-kf5-qt5:
- "ctest-arguments": "--verbose"
- run-tests: True
- per-test-timeout: 60
diff --git a/custom-jobs/Extragear craft master SUSEQt5.12.pipeline b/custom-jobs/Extragear craft master SUSEQt5.14.pipeline
similarity index 98%
rename from custom-jobs/Extragear craft master SUSEQt5.12.pipeline
rename to custom-jobs/Extragear craft master SUSEQt5.14.pipeline
index 63dc9ba..e7e94cf 100644
--- a/custom-jobs/Extragear craft master SUSEQt5.12.pipeline
+++ b/custom-jobs/Extragear craft master SUSEQt5.14.pipeline
@@ -1,5 +1,5 @@
// Request a node to be allocated to us
-node( "SUSEQt5.12" ) {
+node( "SUSEQt5.14" ) {
// We want Timestamps on everything
timestamps {
// We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
diff --git a/custom-jobs/known-jobs.json b/custom-jobs/known-jobs.json
index 22d41e6..d4bb552 100644
--- a/custom-jobs/known-jobs.json
+++ b/custom-jobs/known-jobs.json
@@ -1,3 +1,3 @@
[
- {"name": "Extragear craft master SUSEQt5.12"}
+ {"name": "Extragear craft master SUSEQt5.14"}
]
diff --git a/helpers/check-platform.py b/helpers/check-platform.py
index 6e2fb26..d6832ab 100644
--- a/helpers/check-platform.py
+++ b/helpers/check-platform.py
@@ -11,8 +11,6 @@ parser.add_argument('metainfo', nargs='+', help='metainfo.yaml files', type=str)
arguments = parser.parse_args()
allPlatforms = {
- 'SUSEQt5.12': 'Linux',
- 'SUSEQt5.13': 'Linux',
'SUSEQt5.14': 'Linux',
'SUSEQt5.15': 'Linux',
'FreeBSDQt5.15': 'FreeBSD',
diff --git a/helpers/extract-cmake-dependency-metadata.py b/helpers/extract-cmake-dependency-metadata.py
index 12ef47c..408b52a 100755
--- a/helpers/extract-cmake-dependency-metadata.py
+++ b/helpers/extract-cmake-dependency-metadata.py
@@ -26,8 +26,8 @@ sourcesLocation = os.getcwd()
buildLocation = CommonUtils.buildDirectoryForSources( sources=sourcesLocation, inSourceBuild=buildSpecification['in-source-build'] )
# Are we allowed to run?
-# We only gather this metadata from the principal Linux platform, which at the moment is SUSEQt5.12 for Frameworks and everyone else
-if arguments.platform != 'SUSEQt5.12':
+# We only gather this metadata from the principal Linux platform, which at the moment is SUSEQt5.14 for Frameworks and everyone else
+if arguments.platform != 'SUSEQt5.14':
# Then there is nothing for us to do
sys.exit(0)
diff --git a/helpers/generate-dependency-diagram-data.py b/helpers/generate-dependency-diagram-data.py
index fc441eb..e70c600 100755
--- a/helpers/generate-dependency-diagram-data.py
+++ b/helpers/generate-dependency-diagram-data.py
@@ -22,8 +22,8 @@ buildEnvironment = EnvironmentHandler.generateFor( installPrefix=arguments.using
sourcesLocation = os.getcwd()
# Are we allowed to run?
-# We only gather this metadata from the principal Linux platform, which at the moment is SUSEQt5.12 for everything
-if arguments.platform != 'SUSEQt5.12':
+# We only gather this metadata from the principal Linux platform, which at the moment is SUSEQt5.14 for everything
+if arguments.platform != 'SUSEQt5.14':
# Then there is nothing for us to do
sys.exit(0)
diff --git a/local-metadata/abi-compliance-checker.yaml b/local-metadata/abi-compliance-checker.yaml
index 5573d9b..45510e3 100644
--- a/local-metadata/abi-compliance-checker.yaml
+++ b/local-metadata/abi-compliance-checker.yaml
@@ -26,7 +26,7 @@
checkABIDumpFailHard: False
NoLibrariesFoundFail: False
-# "SUSEQt5.12": # special settings for one platform
+# "SUSEQt5.14": # special settings for one platform
# gcc_options:
# - something
# - nextsetting
diff --git a/local-metadata/project-ignore-rules.yaml b/local-metadata/project-ignore-rules.yaml
index 186f153..cc479ff 100644
--- a/local-metadata/project-ignore-rules.yaml
+++ b/local-metadata/project-ignore-rules.yaml
@@ -1,9 +1,3 @@
-'SUSEQt5.12':
-- 'kdesupport/qca'
-
-'SUSEQt5.13':
-- 'kdesupport/qca'
-
'SUSEQt5.14':
- 'kdesupport/qca'
diff --git a/pipeline-templates/Frameworks/SUSEQt5.12.template b/pipeline-templates/Frameworks/SUSEQt5.12.template
deleted file mode 100644
index 9d5571c..0000000
--- a/pipeline-templates/Frameworks/SUSEQt5.12.template
+++ /dev/null
@@ -1,212 +0,0 @@
-// Provisionally mark the build as successful
-currentBuild.result = 'SUCCESS'
-
-// Request a node to be allocated to us
-node( currentPlatform ) {
-// We want Timestamps on everything
-timestamps {
- // We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
- catchError {
- // First Thing: Checkout Sources
- stage('Checkout Sources') {
-
- // Actual Application Sources
- checkout changelog: true, poll: true, scm: [
- $class: 'GitSCM',
- branches: [[name: branchToBuild]],
- browser: [$class: 'CGit', repoUrl: browserUrl],
- extensions: [[$class: 'CloneOption', timeout: 120]],
- userRemoteConfigs: [[url: repositoryUrl]]
- ]
-
- // Our CI scripts
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/ci-tooling.git']]
- ]
-
- // Projects metadata and next generation dependency metadata
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/repo-metadata/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/repo-metadata.git']]
- ]
-
- // KApiDox Tooling for Capturing Dependency Information
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/kapidox/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/frameworks/kapidox.git']]
- ]
-
- }
-
- // Now Prepare to Build: Get the dependencies ready
- stage('Setup Dependencies') {
- // Now we can determine what our dependencies are
- // Then update to the latest version of the dependencies available from the master server
- // Finally extract all of those dependencies in turn into the given 'installTo' directory
- sh "python3 -u ci-tooling/helpers/prepare-dependencies.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
- }
-
- // Now we can configure our build
- stage('Configuring Build') {
- // This is delegated through a helper script to handle minor special cases like inSourceBuilds, non-CMake build systems, etc
- sh "python3 -u ci-tooling/helpers/configure-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
- }
-
- // Finally we can build it! (Once again, through a helper)
- stage('Compiling') {
- // We use a helper here so we can determine the appropriate number of CPUs (-j) to build with
- sh "python3 -u ci-tooling/helpers/compile-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
- }
-
- // Now we can run our tests
- stage('Running Tests') {
- // Run the unit tests for this project
- // Tests are run in a basic environment (X, DBus)
- sh "python3 -u ci-tooling/helpers/run-tests.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
-
- // Collect our results
- junit allowEmptyResults: true, testResults: 'JUnitTestResults.xml'
- }
-
- // Now ensure that it installs....
- stage('Installing') {
- // The helper ensures that DESTDIR and INSTALL_ROOT are set to 'divertTo'
- // This allows us to capture the install at the next stage for later reuse in the Setup Dependencies step
- sh "python3 -u ci-tooling/helpers/install-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/' --divertTo '$WORKSPACE/install-divert/'"
- }
-
- // Looks like it built okay - let's capture this for later use
- // We'll also take the opportunity to extract metadata from CMake used by packagers and api.kde.org
- stage('Capturing Installation') {
- // First we create a tar archive of the installation which was diverted
- // Then we upload a copy of that to the master server and have it publish the new archive
- // Finally to save bandwidth our copy of the tar archive is moved to our local cache for reuse on later builds on this node
- sh "python3 -u ci-tooling/helpers/capture-install.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --divertedTo '$WORKSPACE/install-divert/' --installedTo '$HOME/install-prefix/'"
-
- // Capture information for later use by the API Documentation Generation system
- sh "python3 -u ci-tooling/helpers/capture-dependency-diagram-data.py --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' || true"
-
- // Now we extract the CMake metadata and upload that to the appropriate hosts
- sh "python3 -u ci-tooling/helpers/extract-cmake-dependency-metadata.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
- //sh "python3 -u ci-tooling/helpers/generate-dependency-diagram-data.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
- }
-
- // Final thing to do: some code quality checks
- stage('Checking Code Quality') {
-
- // Perform Appstream Compliance Checks
- sh "python3 -u ci-tooling/helpers/check-appstream-compliance.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' --withDiverted '$WORKSPACE/install-divert/'"
-
- // Gather ABI Reference information for later checking
- sh """
- curl '$BUILD_URL/consoleText' -o currentBuildLog.txt
- python3 -u ci-tooling/helpers/create-abi-dump.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --buildLog currentBuildLog.txt --environment production --usingInstall '$HOME/install-prefix/' || true
- """
-
- // Save the ABI build logs to review if necessary
- archiveArtifacts artifacts: 'logs/*/*/log.txt', onlyIfSuccessful: false, allowEmptyArchive: true
- // Save the input for ACC for building abi dumps locally
- archiveArtifacts artifacts: 'acc/*.xml', onlyIfSuccessful: false, allowEmptyArchive: true
-
- // Now perform the ABI Compatibility checks
- // This tool will produce reports stored at compat_reports/ which we will also need to capture
- sh """
- python3 -u ci-tooling/helpers/check-abi.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --environment production || true
- """
- // Save the ABI Compatibility reports for developers to review if necessary
- archiveArtifacts artifacts: 'compat_reports/*_compat_report.html', onlyIfSuccessful: false, allowEmptyArchive: true
-
- // Save the ABI Compatibility results yaml file
- archiveArtifacts artifacts: 'abi-compatibility-results.yaml', onlyIfSuccessful: false, allowEmptyArchive: true
-
- // Platform Enablement Checks
- // Frameworks have a metadata file which specifies the platforms it supports and should be built on
- // This check compares that metadata file against the records held by the CI system
- sh """
- touch PlatformCheckOutput.txt
- if [[ -e metainfo.yaml ]]; then python3 ci-tooling/helpers/check-platform.py '$WORKSPACE/metainfo.yaml' &> PlatformCheckOutput.txt; fi
- """
-
- // If the platform check indicates there are missing platforms then we should flag the build as unstable
- // We start this process by reading the output of the check command
- def platformCheckResult = readFile "${env.WORKSPACE}/PlatformCheckOutput.txt"
- // Then we check to see if it had anything in it - it will be empty if everything is okay
- if( platformCheckResult != '' ) {
- // If it does, then mark the build as unstable
- currentBuild.result = 'UNSTABLE'
- // We also print the check results so it can be examined easily
- echo platformCheckResult
- }
-
- // cppcheck is not supported by Pipeline at the moment, so we don't run that for now
- // See https://issues.jenkins-ci.org/browse/JENKINS-35096
-
- // Perform Cobertura Processing
- // First, run the LCov extraction
- sh "python3 -u ci-tooling/helpers/extract-lcov-results.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform}"
-
- // Collect the results from the LCov extraction
- step([
- $class: 'CoberturaPublisher',
- autoUpdateHealth: false, autoUpdateStability: false,
- coberturaReportFile: 'CoberturaLcovResults.xml',
- failNoReports: false, failUnhealthy: false, failUnstable: false,
- maxNumberOfBuilds: 0,
- onlyStable: false,
- zoomCoverageChart: false
- ])
-
- // Scan the logs and publish a warnings report
- warnings consoleParsers: [[parserName: 'GNU Make + GNU C Compiler (gcc)'], [parserName: 'Appstreamercli']], excludePattern: "/tmp/**|/home/jenkins/workspace/**/build/**|/usr/include/**"
-
- }
-
- }
-
- // Let's determine if we need to send out notifications
- // What happened in our previous build?
- def previousResult = currentBuild.previousBuild?.result
- // If our condition has changed, is FAILURE or UNSTABLE then we want to send an email
- if( previousResult != currentBuild.result || currentBuild.result == 'FAILURE' || currentBuild.result == 'UNSTABLE' ) {
- // Start constructing the list of our recipients
- // At this point we can only be either a failure or an unstable build, so notify those who have requested unstable build notifications
- def mailTo = [ unstableBuildEmails ]
-
- // If the build was a solid failure (either now or previously) then notify those who want to know about failures only
- if( previousResult == 'FAILURE' || currentBuild.result == 'FAILURE' ) {
- // Add them to the list
- mailTo << buildFailureEmails
- }
-
- // If someone kicked this job off, they're presumably interested as well
- mailTo << emailextrecipients( [[$class: 'RequesterRecipientProvider']] )
- // We always want to notify our dashboard as well
- mailTo << "kde-dashboard at kde.org"
-
- // Finalise the list of recipients
- mailTo = mailTo.join(',')
-
- // Send the email now
- emailext(
- to: mailTo,
- body: '${JELLY_SCRIPT,template="html_gmail"}',
- mimeType: 'text/html',
- subject: 'KDE CI: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
- attachLog: false
- )
- }
-
- // IRC Notifications are currently not supported by Pipeline
- // See https://issues.jenkins-ci.org/browse/JENKINS-33922
- // We can probably workaround this using Pursuivant and the emails Jenkins sends out
- // This would allow subscribing to build notifications for IRC channels in much the same way one subscribes for Commits and Bugzilla changes
-
-}
-}
diff --git a/pipeline-templates/Frameworks/SUSEQt5.13.template b/pipeline-templates/Frameworks/SUSEQt5.13.template
deleted file mode 120000
index d9efd28..0000000
--- a/pipeline-templates/Frameworks/SUSEQt5.13.template
+++ /dev/null
@@ -1 +0,0 @@
-SUSEQt5.12.template
\ No newline at end of file
diff --git a/pipeline-templates/Frameworks/SUSEQt5.14.template b/pipeline-templates/Frameworks/SUSEQt5.14.template
index d9efd28..7aa4679 120000
--- a/pipeline-templates/Frameworks/SUSEQt5.14.template
+++ b/pipeline-templates/Frameworks/SUSEQt5.14.template
@@ -1 +1 @@
-SUSEQt5.12.template
\ No newline at end of file
+SUSEQt5.15.template
\ No newline at end of file
diff --git a/pipeline-templates/Frameworks/SUSEQt5.15.template b/pipeline-templates/Frameworks/SUSEQt5.15.template
deleted file mode 120000
index d9efd28..0000000
--- a/pipeline-templates/Frameworks/SUSEQt5.15.template
+++ /dev/null
@@ -1 +0,0 @@
-SUSEQt5.12.template
\ No newline at end of file
diff --git a/pipeline-templates/Frameworks/SUSEQt5.15.template b/pipeline-templates/Frameworks/SUSEQt5.15.template
new file mode 100644
index 0000000..9d5571c
--- /dev/null
+++ b/pipeline-templates/Frameworks/SUSEQt5.15.template
@@ -0,0 +1,212 @@
+// Provisionally mark the build as successful
+currentBuild.result = 'SUCCESS'
+
+// Request a node to be allocated to us
+node( currentPlatform ) {
+// We want Timestamps on everything
+timestamps {
+ // We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
+ catchError {
+ // First Thing: Checkout Sources
+ stage('Checkout Sources') {
+
+ // Actual Application Sources
+ checkout changelog: true, poll: true, scm: [
+ $class: 'GitSCM',
+ branches: [[name: branchToBuild]],
+ browser: [$class: 'CGit', repoUrl: browserUrl],
+ extensions: [[$class: 'CloneOption', timeout: 120]],
+ userRemoteConfigs: [[url: repositoryUrl]]
+ ]
+
+ // Our CI scripts
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/ci-tooling.git']]
+ ]
+
+ // Projects metadata and next generation dependency metadata
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/repo-metadata/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/repo-metadata.git']]
+ ]
+
+ // KApiDox Tooling for Capturing Dependency Information
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/kapidox/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/frameworks/kapidox.git']]
+ ]
+
+ }
+
+ // Now Prepare to Build: Get the dependencies ready
+ stage('Setup Dependencies') {
+ // Now we can determine what our dependencies are
+ // Then update to the latest version of the dependencies available from the master server
+ // Finally extract all of those dependencies in turn into the given 'installTo' directory
+ sh "python3 -u ci-tooling/helpers/prepare-dependencies.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
+ }
+
+ // Now we can configure our build
+ stage('Configuring Build') {
+ // This is delegated through a helper script to handle minor special cases like inSourceBuilds, non-CMake build systems, etc
+ sh "python3 -u ci-tooling/helpers/configure-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
+ }
+
+ // Finally we can build it! (Once again, through a helper)
+ stage('Compiling') {
+ // We use a helper here so we can determine the appropriate number of CPUs (-j) to build with
+ sh "python3 -u ci-tooling/helpers/compile-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+ }
+
+ // Now we can run our tests
+ stage('Running Tests') {
+ // Run the unit tests for this project
+ // Tests are run in a basic environment (X, DBus)
+ sh "python3 -u ci-tooling/helpers/run-tests.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+
+ // Collect our results
+ junit allowEmptyResults: true, testResults: 'JUnitTestResults.xml'
+ }
+
+ // Now ensure that it installs....
+ stage('Installing') {
+ // The helper ensures that DESTDIR and INSTALL_ROOT are set to 'divertTo'
+ // This allows us to capture the install at the next stage for later reuse in the Setup Dependencies step
+ sh "python3 -u ci-tooling/helpers/install-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/' --divertTo '$WORKSPACE/install-divert/'"
+ }
+
+ // Looks like it built okay - let's capture this for later use
+ // We'll also take the opportunity to extract metadata from CMake used by packagers and api.kde.org
+ stage('Capturing Installation') {
+ // First we create a tar archive of the installation which was diverted
+ // Then we upload a copy of that to the master server and have it publish the new archive
+ // Finally to save bandwidth our copy of the tar archive is moved to our local cache for reuse on later builds on this node
+ sh "python3 -u ci-tooling/helpers/capture-install.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --divertedTo '$WORKSPACE/install-divert/' --installedTo '$HOME/install-prefix/'"
+
+ // Capture information for later use by the API Documentation Generation system
+ sh "python3 -u ci-tooling/helpers/capture-dependency-diagram-data.py --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' || true"
+
+ // Now we extract the CMake metadata and upload that to the appropriate hosts
+ sh "python3 -u ci-tooling/helpers/extract-cmake-dependency-metadata.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+ //sh "python3 -u ci-tooling/helpers/generate-dependency-diagram-data.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+ }
+
+ // Final thing to do: some code quality checks
+ stage('Checking Code Quality') {
+
+ // Perform Appstream Compliance Checks
+ sh "python3 -u ci-tooling/helpers/check-appstream-compliance.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' --withDiverted '$WORKSPACE/install-divert/'"
+
+ // Gather ABI Reference information for later checking
+ sh """
+ curl '$BUILD_URL/consoleText' -o currentBuildLog.txt
+ python3 -u ci-tooling/helpers/create-abi-dump.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --buildLog currentBuildLog.txt --environment production --usingInstall '$HOME/install-prefix/' || true
+ """
+
+ // Save the ABI build logs to review if necessary
+ archiveArtifacts artifacts: 'logs/*/*/log.txt', onlyIfSuccessful: false, allowEmptyArchive: true
+ // Save the input for ACC for building abi dumps locally
+ archiveArtifacts artifacts: 'acc/*.xml', onlyIfSuccessful: false, allowEmptyArchive: true
+
+ // Now perform the ABI Compatibility checks
+ // This tool will produce reports stored at compat_reports/ which we will also need to capture
+ sh """
+ python3 -u ci-tooling/helpers/check-abi.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --environment production || true
+ """
+ // Save the ABI Compatibility reports for developers to review if necessary
+ archiveArtifacts artifacts: 'compat_reports/*_compat_report.html', onlyIfSuccessful: false, allowEmptyArchive: true
+
+ // Save the ABI Compatibility results yaml file
+ archiveArtifacts artifacts: 'abi-compatibility-results.yaml', onlyIfSuccessful: false, allowEmptyArchive: true
+
+ // Platform Enablement Checks
+ // Frameworks have a metadata file which specifies the platforms it supports and should be built on
+ // This check compares that metadata file against the records held by the CI system
+ sh """
+ touch PlatformCheckOutput.txt
+ if [[ -e metainfo.yaml ]]; then python3 ci-tooling/helpers/check-platform.py '$WORKSPACE/metainfo.yaml' &> PlatformCheckOutput.txt; fi
+ """
+
+ // If the platform check indicates there are missing platforms then we should flag the build as unstable
+ // We start this process by reading the output of the check command
+ def platformCheckResult = readFile "${env.WORKSPACE}/PlatformCheckOutput.txt"
+ // Then we check to see if it had anything in it - it will be empty if everything is okay
+ if( platformCheckResult != '' ) {
+ // If it does, then mark the build as unstable
+ currentBuild.result = 'UNSTABLE'
+ // We also print the check results so it can be examined easily
+ echo platformCheckResult
+ }
+
+ // cppcheck is not supported by Pipeline at the moment, so we don't run that for now
+ // See https://issues.jenkins-ci.org/browse/JENKINS-35096
+
+ // Perform Cobertura Processing
+ // First, run the LCov extraction
+ sh "python3 -u ci-tooling/helpers/extract-lcov-results.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform}"
+
+ // Collect the results from the LCov extraction
+ step([
+ $class: 'CoberturaPublisher',
+ autoUpdateHealth: false, autoUpdateStability: false,
+ coberturaReportFile: 'CoberturaLcovResults.xml',
+ failNoReports: false, failUnhealthy: false, failUnstable: false,
+ maxNumberOfBuilds: 0,
+ onlyStable: false,
+ zoomCoverageChart: false
+ ])
+
+ // Scan the logs and publish a warnings report
+ warnings consoleParsers: [[parserName: 'GNU Make + GNU C Compiler (gcc)'], [parserName: 'Appstreamercli']], excludePattern: "/tmp/**|/home/jenkins/workspace/**/build/**|/usr/include/**"
+
+ }
+
+ }
+
+ // Let's determine if we need to send out notifications
+ // What happened in our previous build?
+ def previousResult = currentBuild.previousBuild?.result
+ // If our condition has changed, is FAILURE or UNSTABLE then we want to send an email
+ if( previousResult != currentBuild.result || currentBuild.result == 'FAILURE' || currentBuild.result == 'UNSTABLE' ) {
+ // Start constructing the list of our recipients
+ // At this point we can only be either a failure or an unstable build, so notify those who have requested unstable build notifications
+ def mailTo = [ unstableBuildEmails ]
+
+ // If the build was a solid failure (either now or previously) then notify those who want to know about failures only
+ if( previousResult == 'FAILURE' || currentBuild.result == 'FAILURE' ) {
+ // Add them to the list
+ mailTo << buildFailureEmails
+ }
+
+ // If someone kicked this job off, they're presumably interested as well
+ mailTo << emailextrecipients( [[$class: 'RequesterRecipientProvider']] )
+ // We always want to notify our dashboard as well
+ mailTo << "kde-dashboard at kde.org"
+
+ // Finalise the list of recipients
+ mailTo = mailTo.join(',')
+
+ // Send the email now
+ emailext(
+ to: mailTo,
+ body: '${JELLY_SCRIPT,template="html_gmail"}',
+ mimeType: 'text/html',
+ subject: 'KDE CI: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
+ attachLog: false
+ )
+ }
+
+ // IRC Notifications are currently not supported by Pipeline
+ // See https://issues.jenkins-ci.org/browse/JENKINS-33922
+ // We can probably workaround this using Pursuivant and the emails Jenkins sends out
+ // This would allow subscribing to build notifications for IRC channels in much the same way one subscribes for Commits and Bugzilla changes
+
+}
+}
diff --git a/pipeline-templates/SUSEQt5.12.template b/pipeline-templates/SUSEQt5.12.template
deleted file mode 100644
index 2d28587..0000000
--- a/pipeline-templates/SUSEQt5.12.template
+++ /dev/null
@@ -1,192 +0,0 @@
-// Provisionally mark the build as successful
-currentBuild.result = 'SUCCESS'
-
-// Request a node to be allocated to us
-node( currentPlatform ) {
-// We want Timestamps on everything
-timestamps {
- // We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
- catchError {
- // First Thing: Checkout Sources
- stage('Checkout Sources') {
-
- // Actual Application Sources
- checkout changelog: true, poll: true, scm: [
- $class: 'GitSCM',
- branches: [[name: branchToBuild]],
- browser: [$class: 'CGit', repoUrl: browserUrl],
- extensions: [[$class: 'CloneOption', timeout: 120]],
- userRemoteConfigs: [[url: repositoryUrl]]
- ]
-
- // Our CI scripts
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/ci-tooling.git']]
- ]
-
- // Projects metadata and next generation dependency metadata
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/repo-metadata/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/repo-metadata.git']]
- ]
-
- // KApiDox Tooling for Capturing Dependency Information
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/kapidox/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/frameworks/kapidox.git']]
- ]
-
- }
-
- // Now Prepare to Build: Get the dependencies ready
- stage('Setup Dependencies') {
- // Now we can determine what our dependencies are
- // Then update to the latest version of the dependencies available from the master server
- // Finally extract all of those dependencies in turn into the given 'installTo' directory
- sh "python3 -u ci-tooling/helpers/prepare-dependencies.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
- }
-
- // Now we can configure our build
- stage('Configuring Build') {
- // This is delegated through a helper script to handle minor special cases like inSourceBuilds, non-CMake build systems, etc
- sh "python3 -u ci-tooling/helpers/configure-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
- }
-
- // Finally we can build it! (Once again, through a helper)
- stage('Compiling') {
- // We use a helper here so we can determine the appropriate number of CPUs (-j) to build with
- sh "python3 -u ci-tooling/helpers/compile-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
- }
-
- // Now ensure that it installs....
- stage('Installing') {
- // The helper ensures that DESTDIR and INSTALL_ROOT are set to 'divertTo'
- // This allows us to capture the install at the next stage for later reuse in the Setup Dependencies step
- sh "python3 -u ci-tooling/helpers/install-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/' --divertTo '$WORKSPACE/install-divert/'"
- }
-
- // Looks like it built okay - let's capture this for later use
- // We'll also take the opportunity to extract metadata from CMake used by packagers and api.kde.org
- stage('Capturing Installation') {
- // First we create a tar archive of the installation which was diverted
- // Then we upload a copy of that to the master server and have it publish the new archive
- // Finally to save bandwidth our copy of the tar archive is moved to our local cache for reuse on later builds on this node
- sh "python3 -u ci-tooling/helpers/capture-install.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --divertedTo '$WORKSPACE/install-divert/' --installedTo '$HOME/install-prefix/'"
-
- // Capture information for later use by the API Documentation Generation system
- sh "python3 -u ci-tooling/helpers/capture-dependency-diagram-data.py --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' || true"
-
- // Now we extract the CMake metadata and upload that to the appropriate hosts
- sh "python3 -u ci-tooling/helpers/extract-cmake-dependency-metadata.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
- //sh "python3 -u ci-tooling/helpers/generate-dependency-diagram-data.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
- }
-
- // Now we can run our tests
- stage('Running Tests') {
- // Run the unit tests for this project
- // Tests are run in a basic environment (X, DBus)
- sh "python3 -u ci-tooling/helpers/run-tests.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
-
- // Collect our results
- junit allowEmptyResults: true, testResults: 'JUnitTestResults.xml'
- }
-
- // Final thing to do: some code quality checks
- stage('Checking Code Quality') {
-
- // Perform Appstream Compliance Checks
- sh "python3 -u ci-tooling/helpers/check-appstream-compliance.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' --withDiverted '$WORKSPACE/install-divert/'"
-
- // Gather ABI Reference information for later checking
- sh """
- curl '$BUILD_URL/consoleText' -o currentBuildLog.txt
- python3 -u ci-tooling/helpers/create-abi-dump.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --buildLog currentBuildLog.txt --environment production --usingInstall '$HOME/install-prefix/' || true
- """
- // Save the ABI build logs to review if necessary
- archiveArtifacts artifacts: 'logs/*/*/log.txt', onlyIfSuccessful: false, allowEmptyArchive: true
- // Save the input for ACC for building abi dumps locally
- archiveArtifacts artifacts: 'acc/*.xml', onlyIfSuccessful: false, allowEmptyArchive: true
-
- // Now perform the ABI Compatibility checks
- // This tool will produce reports stored at compat_reports/ which we will also need to capture
- sh """
- python3 -u ci-tooling/helpers/check-abi.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --environment production || true
- """
- // Save the ABI Compatibility reports for developers to review if necessary
- archiveArtifacts artifacts: 'compat_reports/*_compat_report.html', onlyIfSuccessful: false, allowEmptyArchive: true
-
- // Save the ABI Compatibility results yaml file
- archiveArtifacts artifacts: 'abi-compatibility-results.yaml', onlyIfSuccessful: false, allowEmptyArchive: true
-
- // cppcheck is not supported by Pipeline at the moment, so we don't run that for now
- // See https://issues.jenkins-ci.org/browse/JENKINS-35096
-
- // Perform Cobertura Processing
- // First, run the LCov extraction
- sh "python3 -u ci-tooling/helpers/extract-lcov-results.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform}"
-
- // Collect the results from the LCov extraction
- step([
- $class: 'CoberturaPublisher',
- autoUpdateHealth: false, autoUpdateStability: false,
- coberturaReportFile: 'CoberturaLcovResults.xml',
- failNoReports: false, failUnhealthy: false, failUnstable: false,
- maxNumberOfBuilds: 0,
- onlyStable: false,
- zoomCoverageChart: false
- ])
-
- // Scan the logs and publish a warnings report
- warnings consoleParsers: [[parserName: 'GNU Make + GNU C Compiler (gcc)'], [parserName: 'Appstreamercli']], excludePattern: "/tmp/**|/home/jenkins/workspace/**/build/**|/usr/include/**"
-
- }
-
- }
-
- // Let's determine if we need to send out notifications
- // What happened in our previous build?
- def previousResult = currentBuild.previousBuild?.result
- // If our condition has changed, is FAILURE or UNSTABLE then we want to send an email
- if( previousResult != currentBuild.result || currentBuild.result == 'FAILURE' || currentBuild.result == 'UNSTABLE' ) {
- // Start constructing the list of our recipients
- // At this point we can only be either a failure or an unstable build, so notify those who have requested unstable build notifications
- def mailTo = [ unstableBuildEmails ]
-
- // If the build was a solid failure (either now or previously) then notify those who want to know about failures only
- if( previousResult == 'FAILURE' || currentBuild.result == 'FAILURE' ) {
- // Add them to the list
- mailTo << buildFailureEmails
- }
-
- // If someone kicked this job off, they're presumably interested as well
- mailTo << emailextrecipients( [[$class: 'RequesterRecipientProvider']] )
- // We always want to notify our dashboard as well
- mailTo << "kde-dashboard at kde.org"
-
- // Finalise the list of recipients
- mailTo = mailTo.join(',')
-
- // Send the email now
- emailext(
- to: mailTo,
- body: '${JELLY_SCRIPT,template="html_gmail"}',
- mimeType: 'text/html',
- subject: 'KDE CI: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
- attachLog: false
- )
- }
-
- // IRC Notifications are currently not supported by Pipeline
- // See https://issues.jenkins-ci.org/browse/JENKINS-33922
- // We can probably workaround this using Pursuivant and the emails Jenkins sends out
- // This would allow subscribing to build notifications for IRC channels in much the same way one subscribes for Commits and Bugzilla changes
-
-}
-}
diff --git a/pipeline-templates/SUSEQt5.13.template b/pipeline-templates/SUSEQt5.13.template
deleted file mode 120000
index d9efd28..0000000
--- a/pipeline-templates/SUSEQt5.13.template
+++ /dev/null
@@ -1 +0,0 @@
-SUSEQt5.12.template
\ No newline at end of file
diff --git a/pipeline-templates/SUSEQt5.14.template b/pipeline-templates/SUSEQt5.14.template
index d9efd28..7aa4679 120000
--- a/pipeline-templates/SUSEQt5.14.template
+++ b/pipeline-templates/SUSEQt5.14.template
@@ -1 +1 @@
-SUSEQt5.12.template
\ No newline at end of file
+SUSEQt5.15.template
\ No newline at end of file
diff --git a/pipeline-templates/SUSEQt5.15.template b/pipeline-templates/SUSEQt5.15.template
deleted file mode 120000
index d9efd28..0000000
--- a/pipeline-templates/SUSEQt5.15.template
+++ /dev/null
@@ -1 +0,0 @@
-SUSEQt5.12.template
\ No newline at end of file
diff --git a/pipeline-templates/SUSEQt5.15.template b/pipeline-templates/SUSEQt5.15.template
new file mode 100644
index 0000000..2d28587
--- /dev/null
+++ b/pipeline-templates/SUSEQt5.15.template
@@ -0,0 +1,192 @@
+// Provisionally mark the build as successful
+currentBuild.result = 'SUCCESS'
+
+// Request a node to be allocated to us
+node( currentPlatform ) {
+// We want Timestamps on everything
+timestamps {
+ // We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
+ catchError {
+ // First Thing: Checkout Sources
+ stage('Checkout Sources') {
+
+ // Actual Application Sources
+ checkout changelog: true, poll: true, scm: [
+ $class: 'GitSCM',
+ branches: [[name: branchToBuild]],
+ browser: [$class: 'CGit', repoUrl: browserUrl],
+ extensions: [[$class: 'CloneOption', timeout: 120]],
+ userRemoteConfigs: [[url: repositoryUrl]]
+ ]
+
+ // Our CI scripts
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/ci-tooling.git']]
+ ]
+
+ // Projects metadata and next generation dependency metadata
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/repo-metadata/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/repo-metadata.git']]
+ ]
+
+ // KApiDox Tooling for Capturing Dependency Information
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/kapidox/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/frameworks/kapidox.git']]
+ ]
+
+ }
+
+ // Now Prepare to Build: Get the dependencies ready
+ stage('Setup Dependencies') {
+ // Now we can determine what our dependencies are
+ // Then update to the latest version of the dependencies available from the master server
+ // Finally extract all of those dependencies in turn into the given 'installTo' directory
+ sh "python3 -u ci-tooling/helpers/prepare-dependencies.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
+ }
+
+ // Now we can configure our build
+ stage('Configuring Build') {
+ // This is delegated through a helper script to handle minor special cases like inSourceBuilds, non-CMake build systems, etc
+ sh "python3 -u ci-tooling/helpers/configure-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
+ }
+
+ // Finally we can build it! (Once again, through a helper)
+ stage('Compiling') {
+ // We use a helper here so we can determine the appropriate number of CPUs (-j) to build with
+ sh "python3 -u ci-tooling/helpers/compile-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+ }
+
+ // Now ensure that it installs....
+ stage('Installing') {
+ // The helper ensures that DESTDIR and INSTALL_ROOT are set to 'divertTo'
+ // This allows us to capture the install at the next stage for later reuse in the Setup Dependencies step
+ sh "python3 -u ci-tooling/helpers/install-build.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --installTo '$HOME/install-prefix/' --divertTo '$WORKSPACE/install-divert/'"
+ }
+
+ // Looks like it built okay - let's capture this for later use
+ // We'll also take the opportunity to extract metadata from CMake used by packagers and api.kde.org
+ stage('Capturing Installation') {
+ // First we create a tar archive of the installation which was diverted
+ // Then we upload a copy of that to the master server and have it publish the new archive
+ // Finally to save bandwidth our copy of the tar archive is moved to our local cache for reuse on later builds on this node
+ sh "python3 -u ci-tooling/helpers/capture-install.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --divertedTo '$WORKSPACE/install-divert/' --installedTo '$HOME/install-prefix/'"
+
+ // Capture information for later use by the API Documentation Generation system
+ sh "python3 -u ci-tooling/helpers/capture-dependency-diagram-data.py --project ${projectName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' || true"
+
+ // Now we extract the CMake metadata and upload that to the appropriate hosts
+ sh "python3 -u ci-tooling/helpers/extract-cmake-dependency-metadata.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+ //sh "python3 -u ci-tooling/helpers/generate-dependency-diagram-data.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+ }
+
+ // Now we can run our tests
+ stage('Running Tests') {
+ // Run the unit tests for this project
+ // Tests are run in a basic environment (X, DBus)
+ sh "python3 -u ci-tooling/helpers/run-tests.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/'"
+
+ // Collect our results
+ junit allowEmptyResults: true, testResults: 'JUnitTestResults.xml'
+ }
+
+ // Final thing to do: some code quality checks
+ stage('Checking Code Quality') {
+
+ // Perform Appstream Compliance Checks
+ sh "python3 -u ci-tooling/helpers/check-appstream-compliance.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --usingInstall '$HOME/install-prefix/' --withDiverted '$WORKSPACE/install-divert/'"
+
+ // Gather ABI Reference information for later checking
+ sh """
+ curl '$BUILD_URL/consoleText' -o currentBuildLog.txt
+ python3 -u ci-tooling/helpers/create-abi-dump.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --buildLog currentBuildLog.txt --environment production --usingInstall '$HOME/install-prefix/' || true
+ """
+ // Save the ABI build logs to review if necessary
+ archiveArtifacts artifacts: 'logs/*/*/log.txt', onlyIfSuccessful: false, allowEmptyArchive: true
+ // Save the input for ACC for building abi dumps locally
+ archiveArtifacts artifacts: 'acc/*.xml', onlyIfSuccessful: false, allowEmptyArchive: true
+
+ // Now perform the ABI Compatibility checks
+ // This tool will produce reports stored at compat_reports/ which we will also need to capture
+ sh """
+ python3 -u ci-tooling/helpers/check-abi.py --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform} --environment production || true
+ """
+ // Save the ABI Compatibility reports for developers to review if necessary
+ archiveArtifacts artifacts: 'compat_reports/*_compat_report.html', onlyIfSuccessful: false, allowEmptyArchive: true
+
+ // Save the ABI Compatibility results yaml file
+ archiveArtifacts artifacts: 'abi-compatibility-results.yaml', onlyIfSuccessful: false, allowEmptyArchive: true
+
+ // cppcheck is not supported by Pipeline at the moment, so we don't run that for now
+ // See https://issues.jenkins-ci.org/browse/JENKINS-35096
+
+ // Perform Cobertura Processing
+ // First, run the LCov extraction
+ sh "python3 -u ci-tooling/helpers/extract-lcov-results.py --product ${productName} --project ${projectName} --branchGroup ${branchGroup} --platform ${currentPlatform}"
+
+ // Collect the results from the LCov extraction
+ step([
+ $class: 'CoberturaPublisher',
+ autoUpdateHealth: false, autoUpdateStability: false,
+ coberturaReportFile: 'CoberturaLcovResults.xml',
+ failNoReports: false, failUnhealthy: false, failUnstable: false,
+ maxNumberOfBuilds: 0,
+ onlyStable: false,
+ zoomCoverageChart: false
+ ])
+
+ // Scan the logs and publish a warnings report
+ warnings consoleParsers: [[parserName: 'GNU Make + GNU C Compiler (gcc)'], [parserName: 'Appstreamercli']], excludePattern: "/tmp/**|/home/jenkins/workspace/**/build/**|/usr/include/**"
+
+ }
+
+ }
+
+ // Let's determine if we need to send out notifications
+ // What happened in our previous build?
+ def previousResult = currentBuild.previousBuild?.result
+ // If our condition has changed, is FAILURE or UNSTABLE then we want to send an email
+ if( previousResult != currentBuild.result || currentBuild.result == 'FAILURE' || currentBuild.result == 'UNSTABLE' ) {
+ // Start constructing the list of our recipients
+ // At this point we can only be either a failure or an unstable build, so notify those who have requested unstable build notifications
+ def mailTo = [ unstableBuildEmails ]
+
+ // If the build was a solid failure (either now or previously) then notify those who want to know about failures only
+ if( previousResult == 'FAILURE' || currentBuild.result == 'FAILURE' ) {
+ // Add them to the list
+ mailTo << buildFailureEmails
+ }
+
+ // If someone kicked this job off, they're presumably interested as well
+ mailTo << emailextrecipients( [[$class: 'RequesterRecipientProvider']] )
+ // We always want to notify our dashboard as well
+ mailTo << "kde-dashboard at kde.org"
+
+ // Finalise the list of recipients
+ mailTo = mailTo.join(',')
+
+ // Send the email now
+ emailext(
+ to: mailTo,
+ body: '${JELLY_SCRIPT,template="html_gmail"}',
+ mimeType: 'text/html',
+ subject: 'KDE CI: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
+ attachLog: false
+ )
+ }
+
+ // IRC Notifications are currently not supported by Pipeline
+ // See https://issues.jenkins-ci.org/browse/JENKINS-33922
+ // We can probably workaround this using Pursuivant and the emails Jenkins sends out
+ // This would allow subscribing to build notifications for IRC channels in much the same way one subscribes for Commits and Bugzilla changes
+
+}
+}
diff --git a/pipeline-templates/dependency-build/AndroidQt5.15.template b/pipeline-templates/dependency-build/AndroidQt5.15.template
index d9efd28..7aa4679 120000
--- a/pipeline-templates/dependency-build/AndroidQt5.15.template
+++ b/pipeline-templates/dependency-build/AndroidQt5.15.template
@@ -1 +1 @@
-SUSEQt5.12.template
\ No newline at end of file
+SUSEQt5.15.template
\ No newline at end of file
diff --git a/pipeline-templates/dependency-build/SUSEQt5.12.template b/pipeline-templates/dependency-build/SUSEQt5.12.template
deleted file mode 100644
index 8d50aa7..0000000
--- a/pipeline-templates/dependency-build/SUSEQt5.12.template
+++ /dev/null
@@ -1,65 +0,0 @@
-// Request a node to be allocated to us
-node( currentPlatform ) {
-// We want Timestamps on everything
-timestamps {
- // We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
- catchError {
- // First Thing: Checkout Sources
- stage('Checkout Sources') {
-
- // Our CI scripts
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/ci-tooling.git']]
- ]
-
- // Projects metadata and next generation dependency metadata
- checkout changelog: false, poll: false, scm: [
- $class: 'GitSCM',
- branches: [[name: 'master']],
- extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/repo-metadata/']],
- userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/repo-metadata.git']]
- ]
-
- }
-
- // Now we run the Product Dependency Build Process
- stage('Build Product Dependencies') {
- // This script will do the following:
- // 1) Determine what is in this Product
- // 2) Determine what those repositories depend on
- // 3) Determine what dependencies are outside of this Product
- // 4) Sort those dependencies into an appropriate order to build them
- // 5) Checkout, Configure, Compile, Install and Capture the Installation each of those dependencies in turn
- // We can't do this as Pipeline steps unfortunately (at least not easily)
- // Tests and Other Quality Tests won't be run during this process
- // The results of this process are only intended to be used as part of the base of this Product, so don't need testing
- sh "python3 -u ci-tooling/helpers/build-product-dependencies.py --product ${productName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
- }
- }
-
- // Let's determine if we need to send out notifications
- // What happened in our previous build?
- def previousResult = currentBuild.previousBuild?.result
- // If our condition has changed, is FAILURE or UNSTABLE then we want to send an email
- if( previousResult != currentBuild.result || currentBuild.result == 'FAILURE' || currentBuild.result == 'UNSTABLE' ) {
- // Construct the list of our recipients - these people always want to be notified about Dependency Build jobs
- def mailTo = []
- // If someone kicked this job off, they're presumably interested as well
- mailTo << emailextrecipients( [[$class: 'RequesterRecipientProvider']] )
- // Finalise the list of recipients
- mailTo = mailTo.join(',')
-
- // Send the email now
- emailext(
- to: mailTo,
- body: '${JELLY_SCRIPT,template="html_gmail"}',
- mimeType: 'text/html',
- subject: 'KDE CI: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
- attachLog: false
- )
- }
-}
-}
diff --git a/pipeline-templates/dependency-build/SUSEQt5.13.template b/pipeline-templates/dependency-build/SUSEQt5.13.template
deleted file mode 120000
index d9efd28..0000000
--- a/pipeline-templates/dependency-build/SUSEQt5.13.template
+++ /dev/null
@@ -1 +0,0 @@
-SUSEQt5.12.template
\ No newline at end of file
diff --git a/pipeline-templates/dependency-build/SUSEQt5.14.template b/pipeline-templates/dependency-build/SUSEQt5.14.template
index d9efd28..7aa4679 120000
--- a/pipeline-templates/dependency-build/SUSEQt5.14.template
+++ b/pipeline-templates/dependency-build/SUSEQt5.14.template
@@ -1 +1 @@
-SUSEQt5.12.template
\ No newline at end of file
+SUSEQt5.15.template
\ No newline at end of file
diff --git a/pipeline-templates/dependency-build/SUSEQt5.15.template b/pipeline-templates/dependency-build/SUSEQt5.15.template
deleted file mode 120000
index d9efd28..0000000
--- a/pipeline-templates/dependency-build/SUSEQt5.15.template
+++ /dev/null
@@ -1 +0,0 @@
-SUSEQt5.12.template
\ No newline at end of file
diff --git a/pipeline-templates/dependency-build/SUSEQt5.15.template b/pipeline-templates/dependency-build/SUSEQt5.15.template
new file mode 100644
index 0000000..8d50aa7
--- /dev/null
+++ b/pipeline-templates/dependency-build/SUSEQt5.15.template
@@ -0,0 +1,65 @@
+// Request a node to be allocated to us
+node( currentPlatform ) {
+// We want Timestamps on everything
+timestamps {
+ // We want to catch any errors that occur to allow us to send out notifications (ie. emails) if needed
+ catchError {
+ // First Thing: Checkout Sources
+ stage('Checkout Sources') {
+
+ // Our CI scripts
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/ci-tooling.git']]
+ ]
+
+ // Projects metadata and next generation dependency metadata
+ checkout changelog: false, poll: false, scm: [
+ $class: 'GitSCM',
+ branches: [[name: 'master']],
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'ci-tooling/repo-metadata/']],
+ userRemoteConfigs: [[url: 'https://invent.kde.org/sysadmin/repo-metadata.git']]
+ ]
+
+ }
+
+ // Now we run the Product Dependency Build Process
+ stage('Build Product Dependencies') {
+ // This script will do the following:
+ // 1) Determine what is in this Product
+ // 2) Determine what those repositories depend on
+ // 3) Determine what dependencies are outside of this Product
+ // 4) Sort those dependencies into an appropriate order to build them
+ // 5) Checkout, Configure, Compile, Install and Capture the Installation each of those dependencies in turn
+ // We can't do this as Pipeline steps unfortunately (at least not easily)
+ // Tests and Other Quality Tests won't be run during this process
+ // The results of this process are only intended to be used as part of the base of this Product, so don't need testing
+ sh "python3 -u ci-tooling/helpers/build-product-dependencies.py --product ${productName} --branchGroup ${branchGroup} --environment ${ciEnvironment} --platform ${currentPlatform} --installTo '$HOME/install-prefix/'"
+ }
+ }
+
+ // Let's determine if we need to send out notifications
+ // What happened in our previous build?
+ def previousResult = currentBuild.previousBuild?.result
+ // If our condition has changed, is FAILURE or UNSTABLE then we want to send an email
+ if( previousResult != currentBuild.result || currentBuild.result == 'FAILURE' || currentBuild.result == 'UNSTABLE' ) {
+ // Construct the list of our recipients - these people always want to be notified about Dependency Build jobs
+ def mailTo = []
+ // If someone kicked this job off, they're presumably interested as well
+ mailTo << emailextrecipients( [[$class: 'RequesterRecipientProvider']] )
+ // Finalise the list of recipients
+ mailTo = mailTo.join(',')
+
+ // Send the email now
+ emailext(
+ to: mailTo,
+ body: '${JELLY_SCRIPT,template="html_gmail"}',
+ mimeType: 'text/html',
+ subject: 'KDE CI: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
+ attachLog: false
+ )
+ }
+}
+}
diff --git a/system-images/suse-qt512/Dockerfile b/system-images/suse-qt512/Dockerfile
deleted file mode 100755
index 55a7632..0000000
--- a/system-images/suse-qt512/Dockerfile
+++ /dev/null
@@ -1,217 +0,0 @@
-FROM opensuse/tumbleweed
-MAINTAINER openSUSE KDE Maintainers <opensuse-kde at opensuse.org>
-
-# Add KDE:Qt:5.12 repo
-RUN zypper --non-interactive addrepo --priority 50 --refresh obs://KDE:Qt:5.12/openSUSE_Tumbleweed KDE:Qt:5.12
-# Update container, import GPG key for KUQ
-RUN zypper --non-interactive --gpg-auto-import-keys -v dup
-# Install various other packages
-RUN zypper --non-interactive install java-1_8_0-openjdk-headless python3-lxml python3-paramiko python3-PyYAML python3-simplejson php-composer php7-iconv php7-ctype php7-tokenizer php7-intl php7-dom
-# Install build dependencies
-RUN zypper --non-interactive install --recommends -t pattern devel_qt5 devel_C_C++
-# The pattern is likely not enough, so just install all Qt devel packages from KUQ
-RUN zypper -q se --not-installed-only --repo KDE:Qt:5.12 libqt5*devel libQt5*devel | tail -n +4 | cut -d "|" -f 2 | grep -v "libqt5-creator" | grep -v "libqt5-qtvirtualkeyboard-private-headers" | grep -v "libQt5HunspellInputMethod-private-headers" | grep -vi "libqt5xdg" | grep -v "libQt5Pas" | xargs zypper --non-interactive in
-# And some other useful and base packages
-RUN zypper --non-interactive in git clang python3-Sphinx python3-qt5 xvfb-run AppStream python3-pip ruby-devel libffi-devel openbox sassc \
- # temporarily: curl needed for appstreamcli, cmp. https://bugzilla.opensuse.org/show_bug.cgi?id=1080446
- curl \
- # abi tracking software and it's dependencies
- abi-compliance-checker ctags \
- # basic Qt5 packages, which have no -devel and should be manually installed
- libqt5-qtquickcontrols libqt5-qtquickcontrols2 libqt5-qtgraphicaleffects \
- # Other basic Qt based libraries
- libqca-qt5-devel \
- # For building documentation tarballs
- bzip2 \
- # For image thumbnails for the KDE.org/applications subsite
- ImageMagick \
- # Hidden dependency of appstream tools
- gsettings-desktop-schemas \
- # Useful tools for static analysis
- clazy
-RUN pip install gcovr reuse doxyqml
-RUN gem install atspi cucumber ftpd
-RUN ln -s /usr/bin/cucumber.ruby* /usr/bin/cucumber
-# KDE stuff also depends on the following
-RUN zypper --non-interactive in --allow-vendor-change \
- # modemmanager-qt
- ModemManager-devel \
- # networkmanager-qt
- NetworkManager-devel \
- # kcoreaddons
- lsof \
- # kauth
- polkit-devel \
- # kwindowsystem
- xcb-*-devel \
- # prison
- libdmtx-devel qrencode-devel \
- # kwayland
- wayland-devel \
- # baloo/kfilemetadata (some for okular)
- libattr-devel libexiv2-devel libtag-devel taglib-*-devel libepub-devel libpoppler-qt5-devel lmdb-devel \
- # kdoctools
- perl-URI docbook_4 docbook-xsl-stylesheets libxml2-devel libxslt-devel perl-URI \
- # khtml
- giflib-devel libopenssl-devel \
- # kdelibs4support
- libSM-devel \
- # kdnssd
- libavahi-devel libavahi-glib-devel libavahi-gobject-devel \
- # khelpcenter (and pim for grantlee)
- grantlee5-devel libxapian-devel \
- # sonnet
- aspell \
- aspell-devel \
- hunspell-devel \
- libvoikko-devel \
- # kio-extras and krdc
- libssh-devel \
- # plasma-pa
- gconf2-devel libpulse-devel libcanberra-devel \
- # user-manager
- libpwquality-devel \
- # sddm-kcm
- libXcursor-devel \
- # plasma-workspace
- libXtst-devel \
- # breeze-plymouth
- plymouth-devel \
- # kde-gtk-config/breeze-gtk
- gtk3-devel gtk2-devel python3-cairo \
- # plasma-desktop/discover
- libAppStreamQt-devel fwupd-devel \
- # plasma-desktop
- xf86-input-synaptics-devel xf86-input-evdev-devel libxkbfile-devel xorg-x11-server-sdk \
- # kimpanel
- ibus-devel scim-devel \
- # libksane
- sane-backends-devel \
- # pim
- libical-devel libkolabxml-devel libxerces-c-devel \
- # <misc>
- alsa-devel libraw-devel fftw3-devel adobe-sourcecodepro-fonts \
- # choqok
- qoauth-qt5-devel qtkeychain-qt5-devel \
- # krita
- eigen3-devel OpenColorIO-devel dejavu-fonts gnu-free-fonts quazip-devel \
- # kaccounts / telepathy
- libaccounts-qt5-devel libaccounts-glib-devel libsignon-qt5-devel intltool \
- # skrooge
- sqlcipher sqlcipher-devel sqlite3-devel sqlite3 libofx-devel poppler-tools \
- # kwin
- libepoxy-devel Mesa-demo Mesa-demo-x xorg-x11-server-extra dmz-icon-theme-cursors libgbm-devel weston \
- xorg-x11-server-wayland \
- # kgamma5
- libXxf86vm-devel \
- # kgraphviewer
- graphviz-devel \
- # drkonqi
- at-spi2-core which libgirepository-1_0-1 typelib-1_0-Atspi-2_0 gobject-introspection-devel \
- # kcalc
- mpfr-devel \
- # kdevelop
- gdb \
- # labplot
- gsl-devel \
- # kuserfeedback
- php7 \
- # digikam
- QtAV-devel opencv-devel \
- # wacomtablet
- libwacom-devel \
- xf86-input-wacom-devel \
- # rust-qt-binding-generator
- rust rust-std \
- cargo \
- # kdevelop
- clang \
- clang-devel \
- llvm-devel \
- subversion-devel \
- python3-devel \
- # clazy
- clang-devel-static \
- # libkleo
- libqgpgme-devel \
- # akonadi
- mariadb libQt5Sql5-mysql \
- # libkdegames
- openal-soft-devel \
- libsndfile-devel \
- # kscd
- libmusicbrainz-devel \
- libmusicbrainz5-devel \
- # ktp-common-internals (also rest of KDE Telepathy)
- telepathy-qt5-devel \
- # audiocd-kio
- cdparanoia-devel \
- # ark
- libarchive-devel libzip-devel \
- # ffmpegthumbs
- ffmpeg-4-libavcodec-devel ffmpeg-4-libavfilter-devel ffmpeg-4-libavformat-devel ffmpeg-4-libavdevice-devel ffmpeg-4-libavutil-devel ffmpeg-4-libswscale-devel ffmpeg-4-libpostproc-devel \
- # k3b
- flac-devel \
- libmad-devel \
- libmp3lame-devel \
- libogg-devel libvorbis-devel \
- libsamplerate-devel \
- # kamera
- libgphoto2-devel \
- # signon-kwallet-extension
- libsignon-glib-devel signond-libs-devel \
- # kdenlive
- libmlt-devel libmlt++-devel libmlt6-modules libmlt6-data rttr-devel \
- # print-manager
- cups-devel \
- # krfb
- LibVNCServer-devel \
- # kscd
- libdiscid-devel \
- # minuet
- fluidsynth-devel \
- # kajongg
- python3-Twisted \
- # okular
- texlive-latex \
- # ksmtp tests
- cyrus-sasl-plain \
- # kdb
- libmariadb-devel postgresql-devel \
- # Gwenview
- cfitsio-devel \
- # Calligra, Krita and probably other things elsewhere too
- libboost_*-devel \
- # Amarok
- gmock gtest libcurl-devel libofa-devel libgpod-devel libmtp-devel loudmouth-devel liblastfm-qt5-devel libmysqld-devel \
- # Cantor
- libspectre-devel python3-numpy python3-matplotlib octave maxima libqalculate-devel moonjit-devel julia-devel \
- # KPat
- freecell-solver-devel black-hole-solver-devel \
- # RKWard
- R-base-devel gcc-fortran \
- # Kaffeine
- libdvbv5-devel vlc-devel libXss-devel \
- # Keysmith
- libsodium-devel \
- # Plasma Phone Components
- libphonenumber-devel \
- # kquickcharts
- glslang-devel \
- # xdg-desktop-portal-kde
- pipewire-devel \
- # Spectacle
- kImageAnnotator-devel kColorPicker-devel
-
-# For D-Bus to be willing to start it needs a Machine ID
-RUN dbus-uuidgen > /etc/machine-id
-
-# OpenSUSE has a different GID for the 'video' group compared to the Physical Ubuntu and Debian hosts
-# Therefore we create a group which matches the physical hosts 'video' group GID
-# This is necessary to allow us to grant Jenkins access to the vgem device
-RUN groupadd -g 44 docker-video
-# We need a user account to do things as, and SSHD needs keys
-RUN useradd -d /home/jenkins/ -u 1000 --user-group --create-home -G video,docker-video jenkins && /usr/sbin/sshd-gen-keys-start
-# We want to run SSHD so that Jenkins can remotely connect to this container
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
diff --git a/system-images/suse-qt513/Dockerfile b/system-images/suse-qt513/Dockerfile
deleted file mode 100755
index fb457f7..0000000
--- a/system-images/suse-qt513/Dockerfile
+++ /dev/null
@@ -1,221 +0,0 @@
-FROM opensuse/tumbleweed
-MAINTAINER openSUSE KDE Maintainers <opensuse-kde at opensuse.org>
-
-# Add KDE:Qt:5.13 repo
-RUN zypper --non-interactive addrepo --priority 50 --refresh obs://KDE:Qt:5.13/openSUSE_Tumbleweed KDE:Qt:5.13
-# Update container, import GPG key for KUQ
-RUN zypper --non-interactive --gpg-auto-import-keys -v dup
-# Install various other packages
-RUN zypper --non-interactive install java-1_8_0-openjdk-headless python3-lxml python3-paramiko python3-PyYAML python3-simplejson php-composer php7-iconv php7-ctype php7-tokenizer php7-intl php7-dom
-# Install build dependencies
-RUN zypper --non-interactive install --recommends -t pattern devel_qt5 devel_C_C++
-# The pattern is likely not enough, so just install all Qt devel packages from KUQ
-RUN zypper -q se --not-installed-only --repo KDE:Qt:5.13 libqt5*devel libQt5*devel | tail -n +4 | cut -d "|" -f 2 | grep -v "libqt5-creator" | grep -v "libqt5-qtvirtualkeyboard-private-headers" | grep -v "libQt5HunspellInputMethod-private-headers" | grep -vi "libqt5xdg" | grep -v "libQt5Pas" | xargs zypper --non-interactive in
-# And some other useful and base packages
-RUN zypper --non-interactive in git clang python3-Sphinx python3-qt5 xvfb-run AppStream python3-pip ruby-devel libffi-devel openbox sassc \
- # temporarily: curl needed for appstreamcli, cmp. https://bugzilla.opensuse.org/show_bug.cgi?id=1080446
- curl \
- # abi tracking software and it's dependencies
- abi-compliance-checker ctags \
- # basic Qt5 packages, which have no -devel and should be manually installed
- libqt5-qtquickcontrols libqt5-qtquickcontrols2 libqt5-qtgraphicaleffects \
- # Other basic Qt based libraries
- libqca-qt5-devel \
- # For building documentation tarballs
- bzip2 \
- # For image thumbnails for the KDE.org/applications subsite
- ImageMagick \
- # Hidden dependency of appstream tools
- gsettings-desktop-schemas \
- # Useful tools for static analysis
- clazy \
- # Needed for API Documentation generation
- graphviz-gd libqt5-qttools-qhelpgenerator
-RUN pip install gcovr reuse doxyqml
-RUN gem install atspi cucumber ftpd
-RUN ln -s /usr/bin/cucumber.ruby* /usr/bin/cucumber
-# KDE stuff also depends on the following
-RUN zypper --non-interactive in --allow-vendor-change \
- # modemmanager-qt
- ModemManager-devel \
- # networkmanager-qt
- NetworkManager-devel \
- # kcoreaddons
- lsof \
- # kauth
- polkit-devel \
- # kwindowsystem
- xcb-*-devel \
- # prison
- libdmtx-devel qrencode-devel \
- # kwayland
- wayland-devel \
- # baloo/kfilemetadata (some for okular)
- libattr-devel libexiv2-devel libtag-devel taglib-*-devel libepub-devel libpoppler-qt5-devel lmdb-devel \
- # kdoctools
- perl-URI docbook_4 docbook-xsl-stylesheets libxml2-devel libxslt-devel perl-URI \
- # khtml
- giflib-devel libopenssl-devel \
- # kdelibs4support
- libSM-devel \
- # kdnssd
- libavahi-devel libavahi-glib-devel libavahi-gobject-devel \
- # khelpcenter (and pim for grantlee)
- grantlee5-devel libxapian-devel \
- # sonnet
- aspell \
- aspell-devel \
- hunspell-devel \
- libvoikko-devel \
- # kio-extras and krdc
- libssh-devel \
- # plasma-pa
- gconf2-devel libpulse-devel libcanberra-devel \
- # user-manager
- libpwquality-devel \
- # sddm-kcm
- libXcursor-devel \
- # plasma-workspace
- libXtst-devel \
- # breeze-plymouth
- plymouth-devel \
- # kde-gtk-config/breeze-gtk
- gtk3-devel gtk2-devel python3-cairo \
- # plasma-desktop/discover
- libAppStreamQt-devel fwupd-devel \
- # plasma-desktop
- xf86-input-synaptics-devel xf86-input-evdev-devel libxkbfile-devel xorg-x11-server-sdk \
- # kimpanel
- ibus-devel scim-devel \
- # libksane
- sane-backends-devel \
- # pim
- libical-devel libkolabxml-devel libxerces-c-devel \
- # <misc>
- alsa-devel libraw-devel fftw3-devel adobe-sourcecodepro-fonts \
- # choqok
- qoauth-qt5-devel qtkeychain-qt5-devel \
- # krita
- eigen3-devel OpenColorIO-devel dejavu-fonts gnu-free-fonts quazip-devel \
- # kaccounts / telepathy
- libaccounts-qt5-devel libaccounts-glib-devel libsignon-qt5-devel intltool \
- # skrooge
- sqlcipher sqlcipher-devel sqlite3-devel sqlite3 libofx-devel poppler-tools \
- # kwin
- libepoxy-devel Mesa-demo Mesa-demo-x xorg-x11-server-extra dmz-icon-theme-cursors libgbm-devel weston \
- xorg-x11-server-wayland \
- # kgamma5
- libXxf86vm-devel \
- # kgraphviewer
- graphviz-devel \
- # drkonqi
- at-spi2-core which libgirepository-1_0-1 typelib-1_0-Atspi-2_0 gobject-introspection-devel \
- # kcalc
- mpfr-devel \
- # kdevelop
- gdb \
- # labplot
- gsl-devel \
- # kuserfeedback
- php7 \
- # digikam
- QtAV-devel opencv-devel \
- # wacomtablet
- libwacom-devel \
- xf86-input-wacom-devel \
- # rust-qt-binding-generator
- rust rust-std \
- cargo \
- # kdevelop
- clang \
- clang-devel \
- llvm-devel \
- subversion-devel \
- python3-devel \
- # clazy
- clang-devel-static \
- # libkleo
- libqgpgme-devel \
- # akonadi
- mariadb libQt5Sql5-mysql \
- # libkdegames
- openal-soft-devel \
- libsndfile-devel \
- # kscd
- libmusicbrainz-devel \
- libmusicbrainz5-devel \
- # ktp-common-internals (also rest of KDE Telepathy)
- telepathy-qt5-devel \
- # audiocd-kio
- cdparanoia-devel \
- # ark
- libarchive-devel libzip-devel \
- # ffmpegthumbs
- ffmpeg-4-libavcodec-devel ffmpeg-4-libavfilter-devel ffmpeg-4-libavformat-devel ffmpeg-4-libavdevice-devel ffmpeg-4-libavutil-devel ffmpeg-4-libswscale-devel ffmpeg-4-libpostproc-devel \
- # k3b
- flac-devel \
- libmad-devel \
- libmp3lame-devel \
- libogg-devel libvorbis-devel \
- libsamplerate-devel \
- # kamera
- libgphoto2-devel \
- # signon-kwallet-extension
- libsignon-glib-devel signond-libs-devel \
- # kdenlive
- libmlt-devel libmlt++-devel libmlt6-modules libmlt6-data rttr-devel \
- # print-manager
- cups-devel \
- # krfb
- LibVNCServer-devel \
- # kscd
- libdiscid-devel \
- # minuet
- fluidsynth-devel \
- # kajongg
- python3-Twisted \
- # okular
- texlive-latex \
- # ksmtp tests
- cyrus-sasl-plain \
- # kdb
- libmariadb-devel postgresql-devel \
- # Gwenview
- cfitsio-devel \
- # Calligra, Krita and probably other things elsewhere too
- libboost_*-devel \
- # Amarok
- gmock gtest libcurl-devel libofa-devel libgpod-devel libmtp-devel loudmouth-devel liblastfm-qt5-devel libmysqld-devel \
- # Cantor
- libspectre-devel python3-numpy python3-matplotlib octave maxima libqalculate-devel moonjit-devel julia-devel \
- # KPat
- freecell-solver-devel black-hole-solver-devel \
- # RKWard
- R-base-devel gcc-fortran \
- # Kaffeine
- libdvbv5-devel vlc-devel libXss-devel \
- # Keysmith
- libsodium-devel \
- # Plasma Phone Components
- libphonenumber-devel \
- # kquickcharts
- glslang-devel \
- # xdg-desktop-portal-kde
- pipewire-devel \
- # Spectacle
- kImageAnnotator-devel kColorPicker-devel \
- # upnp-lib-qt
- kdsoap-devel
-
-# For D-Bus to be willing to start it needs a Machine ID
-RUN dbus-uuidgen > /etc/machine-id
-
-# OpenSUSE has a different GID for the 'video' group compared to the Physical Ubuntu and Debian hosts
-# Therefore we create a group which matches the physical hosts 'video' group GID
-# This is necessary to allow us to grant Jenkins access to the vgem device
-RUN groupadd -g 44 docker-video
-# We need a user account to do things as, and SSHD needs keys
-RUN useradd -d /home/jenkins/ -u 1000 --user-group --create-home -G video,docker-video jenkins && /usr/sbin/sshd-gen-keys-start
-# We want to run SSHD so that Jenkins can remotely connect to this container
-EXPOSE 22
-CMD ["/usr/sbin/sshd", "-D"]
More information about the Kde-frameworks-devel
mailing list