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@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-dashbo...@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-dashbo...@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-dashbo...@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-dashbo...@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-...@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-...@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"]

Reply via email to