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: [email protected] 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 << "[email protected]" - - // 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 << "[email protected]" + + // 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 << "[email protected]" - - // 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 << "[email protected]" + + // 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 <[email protected]> - -# 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 <[email protected]> - -# 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"]
