mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-12 14:47:16 +00:00
temp: delete jenkinsfiles temporarily
This commit is contained in:
parent
bb4c94438f
commit
6d360b7e48
@ -1,140 +0,0 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.8.18'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
/* Necessary image with Ubuntu 20.04 for older Glibc. */
|
||||
docker {
|
||||
label 'linux'
|
||||
image 'statusteam/nim-status-client-build:1.4.1-qt5.15.2'
|
||||
/* allows jenkins use cat and mounts '/dev/fuse' for linuxdeployqt */
|
||||
args '--entrypoint="" --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse'
|
||||
}
|
||||
}
|
||||
|
||||
parameters {
|
||||
booleanParam(
|
||||
name: 'RELEASE',
|
||||
description: 'Decides whether release credentials are used.',
|
||||
defaultValue: params.RELEASE ?: false
|
||||
)
|
||||
booleanParam(
|
||||
name: 'INCLUDE_DEBUG_SYMBOLS',
|
||||
description: 'Decides whether binaries are built with debug symbols.',
|
||||
defaultValue: params.INCLUDE_DEBUG_SYMBOLS ?: false
|
||||
)
|
||||
choice(
|
||||
name: 'VERBOSE',
|
||||
description: 'Level of verbosity based on nimbus-build-system setup.',
|
||||
choices: ['0', '1', '2']
|
||||
)
|
||||
string(
|
||||
name: 'NIMFLAGS',
|
||||
description: 'Extra Nim flags. Examples: --verbosity:2 --passL:"-v" --passC:"-v"',
|
||||
defaultValue: '--colors:off'
|
||||
)
|
||||
booleanParam(
|
||||
name: 'USE_MOCKED_KEYCARD_LIB',
|
||||
description: 'Decides whether the mocked status-keycard-go library is built.',
|
||||
defaultValue: false
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
timestamps()
|
||||
/* Prevent Jenkins jobs from running forever */
|
||||
timeout(time: 25, unit: 'MINUTES')
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
numToKeepStr: '10',
|
||||
daysToKeepStr: '30',
|
||||
artifactNumToKeepStr: '1',
|
||||
))
|
||||
/* Allows combined build to copy */
|
||||
copyArtifactPermission('/status-desktop/*')
|
||||
/* Abort old PR builds. */
|
||||
disableConcurrentBuilds(
|
||||
abortPrevious: isPRBuild
|
||||
)
|
||||
}
|
||||
|
||||
environment {
|
||||
PLATFORM = "linux/${getArch()}"
|
||||
/* Improve make performance */
|
||||
MAKEFLAGS = "-j4 V=${params.VERBOSE}"
|
||||
/* Makefile assumes the compiler folder is included */
|
||||
QTDIR = "/opt/qt/5.15.2/gcc_64"
|
||||
PATH = "${env.QTDIR}/bin:${env.PATH}"
|
||||
/* Avoid weird bugs caused by stale cache. */
|
||||
QML_DISABLE_DISK_CACHE = "true"
|
||||
/* Control output the filename */
|
||||
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'AppImage', arch: getArch())}"
|
||||
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'tar.gz', arch: getArch())}"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Deps') {
|
||||
steps {
|
||||
sh 'make update'
|
||||
sh 'make deps'
|
||||
}
|
||||
}
|
||||
|
||||
stage('status-go') {
|
||||
steps {
|
||||
sh 'make status-go'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Package') {
|
||||
steps { script {
|
||||
linux.bundle('tgz-linux')
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Parallel Upload') {
|
||||
parallel {
|
||||
stage('Upload') {
|
||||
steps { script {
|
||||
env.PKG_URL = s3.uploadArtifact(env.STATUS_CLIENT_TARBALL)
|
||||
jenkins.setBuildDesc(AppImage: env.PKG_URL)
|
||||
} }
|
||||
}
|
||||
stage('Archive') {
|
||||
steps { script {
|
||||
archiveArtifacts("${env.STATUS_CLIENT_TARBALL}*")
|
||||
} }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('E2E') {
|
||||
when { expression { utils.isPRBuild() } }
|
||||
steps { script {
|
||||
build(
|
||||
job: 'status-desktop/e2e/prs',
|
||||
wait: false,
|
||||
parameters: jenkins.mapToParams([
|
||||
GIT_REF: env.GIT_COMMIT,
|
||||
BUILD_SOURCE: env.JOB_NAME,
|
||||
]),
|
||||
)
|
||||
} }
|
||||
}
|
||||
}
|
||||
post {
|
||||
success { script { github.notifyPR(true) } }
|
||||
failure { script { github.notifyPR(false) } }
|
||||
cleanup { sh './scripts/clean-git.sh' }
|
||||
}
|
||||
}
|
||||
|
||||
def getArch() {
|
||||
def tokens = Thread.currentThread().getName().split('/')
|
||||
for (def arch in ['x86_64', 'aarch64']) {
|
||||
if (tokens.contains(arch)) { return arch }
|
||||
}
|
||||
}
|
@ -1,158 +0,0 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.8.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
pipeline {
|
||||
/* This way we run the same Jenkinsfile on different platforms. */
|
||||
agent {
|
||||
label "${getAgentLabels().join(' && ')} && qt-5.15 && go-1.21"
|
||||
}
|
||||
|
||||
parameters {
|
||||
booleanParam(
|
||||
name: 'RELEASE',
|
||||
description: 'Decides whether release credentials are used.',
|
||||
defaultValue: params.RELEASE ?: false
|
||||
)
|
||||
booleanParam(
|
||||
name: 'INCLUDE_DEBUG_SYMBOLS',
|
||||
description: 'Decides whether binaries are built with debug symbols.',
|
||||
defaultValue: params.INCLUDE_DEBUG_SYMBOLS ?: false
|
||||
)
|
||||
choice(
|
||||
name: 'VERBOSE',
|
||||
description: 'Level of verbosity based on nimbus-build-system setup.',
|
||||
choices: ['0', '1', '2']
|
||||
)
|
||||
string(
|
||||
name: 'NIMFLAGS',
|
||||
description: 'Extra Nim flags. Examples: --verbosity:2 --passL:"-v" --passC:"-v"',
|
||||
defaultValue: '--colors:off'
|
||||
)
|
||||
booleanParam(
|
||||
name: 'USE_MOCKED_KEYCARD_LIB',
|
||||
description: 'Decides whether the mocked status-keycard-go library is built.',
|
||||
defaultValue: false
|
||||
)
|
||||
choice(
|
||||
name: 'ENTITLEMENTS',
|
||||
description: 'Select app entitlements. Squish requires extra entitlements.',
|
||||
choices: ['resources/Entitlements.plist', 'resources/Entitlements_squish.plist']
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
timestamps()
|
||||
/* Prevent Jenkins jobs from running forever */
|
||||
timeout(time: 30, unit: 'MINUTES')
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
numToKeepStr: '10',
|
||||
daysToKeepStr: '30',
|
||||
artifactNumToKeepStr: '1',
|
||||
))
|
||||
/* Allows combined build to copy */
|
||||
copyArtifactPermission('/status-desktop/*')
|
||||
/* Abort old PR builds. */
|
||||
disableConcurrentBuilds(
|
||||
abortPrevious: isPRBuild
|
||||
)
|
||||
}
|
||||
|
||||
environment {
|
||||
PLATFORM = "macos/${getArch()}"
|
||||
/* Improve make performance */
|
||||
MAKEFLAGS = "-j4 V=${params.VERBOSE}"
|
||||
/* WARNING: Qt 5.15.8 installed via Brew. */
|
||||
QTDIR = '/opt/homebrew/opt/qt@5'
|
||||
/* Enforce Go version installed infra-role-golang. */
|
||||
PATH = "${env.QTDIR}/bin:/usr/local/go/bin:${env.PATH}"
|
||||
/* Avoid weird bugs caused by stale cache. */
|
||||
QML_DISABLE_DISK_CACHE = "true"
|
||||
/* Control output the filename */
|
||||
STATUS_CLIENT_DMG = "pkg/${utils.pkgFilename(ext: 'dmg', arch: getArch())}"
|
||||
/* Apple Team ID for Notarization */
|
||||
MACOS_NOTARIZE_TEAM_ID = "8B5X2M6H2Y"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Deps') {
|
||||
steps {
|
||||
sh 'make update'
|
||||
withCredentials([
|
||||
usernamePassword( /* For fetching HomeBrew bottles. */
|
||||
credentialsId: "status-im-auto-pkgs",
|
||||
usernameVariable: 'GITHUB_USER',
|
||||
passwordVariable: 'GITHUB_TOKEN'
|
||||
)
|
||||
]) {
|
||||
sh 'make deps'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('status-go') {
|
||||
steps {
|
||||
sh 'make status-go'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Package') {
|
||||
steps { script {
|
||||
macos.bundle('pkg-macos')
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Notarize') {
|
||||
when { expression { utils.isReleaseBuild() } }
|
||||
steps { script {
|
||||
macos.notarize()
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Parallel Upload') {
|
||||
parallel {
|
||||
stage('Upload') {
|
||||
steps { script {
|
||||
env.PKG_URL = s3.uploadArtifact(env.STATUS_CLIENT_DMG)
|
||||
jenkins.setBuildDesc(Dmg: env.PKG_URL)
|
||||
} }
|
||||
}
|
||||
stage('Archive') {
|
||||
steps { script {
|
||||
archiveArtifacts(env.STATUS_CLIENT_DMG)
|
||||
} }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
post {
|
||||
success { script { github.notifyPR(true) } }
|
||||
failure { script { github.notifyPR(false) } }
|
||||
cleanup { sh './scripts/clean-git.sh' }
|
||||
}
|
||||
}
|
||||
|
||||
/* This allows us to use one Jenkinsfile and run
|
||||
* jobs on different platforms based on job name. */
|
||||
def getAgentLabels() {
|
||||
if (params.AGENT_LABEL) { return params.AGENT_LABEL }
|
||||
/* We extract the name of the job from currentThread because
|
||||
* before an agent is picket env is not available. */
|
||||
def tokens = Thread.currentThread().getName().split('/')
|
||||
def labels = []
|
||||
/* Check if the job path contains any of the valid labels. */
|
||||
['linux', 'macos', 'x86_64', 'aarch64', 'arm64'].each {
|
||||
if (tokens.contains(it)) { labels.add(it) }
|
||||
}
|
||||
return labels
|
||||
}
|
||||
|
||||
def getArch() {
|
||||
def tokens = Thread.currentThread().getName().split('/')
|
||||
for (def arch in ['x86_64', 'aarch64']) {
|
||||
if (tokens.contains(arch)) { return arch }
|
||||
}
|
||||
}
|
@ -1,263 +0,0 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.8.6'
|
||||
|
||||
pipeline {
|
||||
|
||||
agent {
|
||||
label "${params.AGENT} && x86_64 && qt-5.15.2"
|
||||
}
|
||||
|
||||
parameters {
|
||||
gitParameter(
|
||||
name: 'GIT_REF',
|
||||
description: 'Git branch to checkout.',
|
||||
branchFilter: 'origin/(.*)',
|
||||
branch: '',
|
||||
defaultValue: 'master',
|
||||
quickFilterEnabled: false,
|
||||
selectedValue: 'DEFAULT',
|
||||
sortMode: 'ASCENDING_SMART',
|
||||
tagFilter: '*',
|
||||
type: 'PT_BRANCH'
|
||||
)
|
||||
string(
|
||||
name: 'BUILD_SOURCE',
|
||||
description: 'URL to tar.gz file OR path to Jenkins build.',
|
||||
defaultValue: getDefaultBuildSource()
|
||||
)
|
||||
string(
|
||||
name: 'TEST_NAME',
|
||||
description: 'Paste test name/part of test name to run specific test.',
|
||||
defaultValue: ''
|
||||
)
|
||||
string(
|
||||
name: 'TEST_SCOPE_FLAG',
|
||||
description: 'Paste a known mark to run tests labeled with this mark',
|
||||
defaultValue: getDefaultTestScopeFlag()
|
||||
)
|
||||
string(
|
||||
name: 'TESTRAIL_RUN_NAME',
|
||||
description: 'Test run name in Test Rail.',
|
||||
defaultValue: ''
|
||||
)
|
||||
choice(
|
||||
name: 'LOG_LEVEL',
|
||||
description: 'Log level for pytest.',
|
||||
choices: ['INFO', 'DEBUG', 'TRACE', 'WARNING', 'CRITICAL']
|
||||
)
|
||||
/* FIXME: This is temporary and should be removed. */
|
||||
choice(
|
||||
name: 'AGENT',
|
||||
description: 'Agent name to run tests on it.',
|
||||
choices: ['linux', 'linux-01', 'linux-02', 'linux-03', 'linux-04', 'linux-05']
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
timestamps()
|
||||
/* Prevent Jenkins jobs from running forever */
|
||||
timeout(time: 120, unit: 'MINUTES')
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
daysToKeepStr: '60',
|
||||
numToKeepStr: '50',
|
||||
artifactNumToKeepStr: '50',
|
||||
))
|
||||
}
|
||||
|
||||
environment {
|
||||
SQUISH_DIR = '/opt/squish-runner-7.2.1'
|
||||
PYTHONPATH = "${SQUISH_DIR}/lib:${SQUISH_DIR}/lib/python:${PYTHONPATH}"
|
||||
LD_LIBRARY_PATH = "${SQUISH_DIR}/lib:${SQUISH_DIR}/python3/lib:${LD_LIBRARY_PATH}"
|
||||
|
||||
/* Avoid race conditions with other builds using virtualenv. */
|
||||
VIRTUAL_ENV = "${WORKSPACE_TMP}/venv"
|
||||
PATH = "${VIRTUAL_ENV}/bin:${PATH}"
|
||||
|
||||
TESTRAIL_URL = 'https://ethstatus.testrail.net'
|
||||
TESTRAIL_PROJECT_ID = 18
|
||||
/* Override QT xcb plugin with linux to avoid errors like:
|
||||
* "Could not load the Qt platform plugin "xcb" in "" even though it was found." */
|
||||
QT_QPA_PLATFORM = "linuxfb"
|
||||
|
||||
/* Runtime flag to make testing of the app easier. Switched off: unpredictable app behavior under new tests */
|
||||
/* STATUS_RUNTIME_TEST_MODE = 'True' */
|
||||
|
||||
/* Logging rules let you enable or disable logging for categories */
|
||||
QT_LOGGING_RULES = '*.warning=true'
|
||||
|
||||
/* Set to a non-zero value to make Qt print out diagnostic information about the each (C++) plugin it tries to load. */
|
||||
QT_DEBUG_PLUGINS = 0
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Prep') {
|
||||
steps { script {
|
||||
setNewBuildName()
|
||||
updateGitHubStatus()
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Deps') {
|
||||
steps { script { dir('test/e2e') {
|
||||
sh "python3 -m venv ${VIRTUAL_ENV}"
|
||||
sh 'pip3 install -r requirements.txt'
|
||||
} } }
|
||||
}
|
||||
|
||||
stage('Download') {
|
||||
when { expression { params.BUILD_SOURCE.startsWith('http') } }
|
||||
steps { timeout(5) { script { dir('test/e2e') {
|
||||
sh 'mkdir -p ./pkg/'
|
||||
setBuildDescFromFile(params.BUILD_SOURCE)
|
||||
fileOperations([
|
||||
fileDownloadOperation(
|
||||
url: params.BUILD_SOURCE,
|
||||
targetFileName: 'StatusIm-Desktop.tar.gz',
|
||||
targetLocation: './pkg/',
|
||||
userName: '',
|
||||
password: '',
|
||||
)
|
||||
])
|
||||
} } } }
|
||||
}
|
||||
|
||||
stage('Copy') {
|
||||
when { expression { ! params.BUILD_SOURCE.startsWith('http') } }
|
||||
steps { timeout(5) { script { dir('test/e2e') {
|
||||
copyArtifacts(
|
||||
projectName: params.BUILD_SOURCE,
|
||||
filter: 'pkg/*-x86_64.tar.gz',
|
||||
selector: lastWithArtifacts(),
|
||||
target: './'
|
||||
)
|
||||
setBuildDescFromFile(utils.findFile('pkg/*tar.gz'))
|
||||
} } } }
|
||||
}
|
||||
|
||||
stage('Unpack') {
|
||||
steps { timeout(5) { script { dir('test/e2e') {
|
||||
sh 'mkdir aut'
|
||||
sh "tar -zxvf '${utils.findFile('pkg/*tar.gz')}' -C './aut'"
|
||||
env.AUT_PATH = utils.findFile('aut/*.AppImage')
|
||||
} } } }
|
||||
}
|
||||
|
||||
stage('Test') {
|
||||
steps { timeout(getTestStageTimeout()) { script { dir('test/e2e') {
|
||||
def flags = []
|
||||
if (params.TEST_NAME) { flags.add("-k=${params.TEST_NAME}") }
|
||||
if (params.TEST_SCOPE_FLAG) { flags.add(params.TEST_SCOPE_FLAG) }
|
||||
if (params.LOG_LEVEL) { flags.addAll(["--log-level=${params.LOG_LEVEL}", "--log-cli-level=${params.LOG_LEVEL}"]) }
|
||||
dir ('configs') { sh 'ln -s _local.ci.py _local.py' }
|
||||
wrap([
|
||||
$class: 'Xvfb',
|
||||
autoDisplayName: true,
|
||||
parallelBuild: true,
|
||||
screen: '1920x1080x24',
|
||||
additionalOptions: '-dpi 1'
|
||||
]) {
|
||||
sh 'fluxbox &'
|
||||
withCredentials([
|
||||
usernamePassword(
|
||||
credentialsId: 'test-rail-api-devops',
|
||||
usernameVariable: 'TESTRAIL_USR',
|
||||
passwordVariable: 'TESTRAIL_PSW'
|
||||
)
|
||||
]) {
|
||||
/* Keep the --reruns flag first, or it won't work */
|
||||
sh """
|
||||
python3 -m pytest --reruns=1 --timeout=180 ${flags.join(" ")} \
|
||||
--disable-warnings \
|
||||
--alluredir=./allure-results \
|
||||
-o timeout_func_only=true
|
||||
"""
|
||||
}
|
||||
}
|
||||
} } } }
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
always { script { dir('test/e2e') {
|
||||
archiveArtifacts('aut/*.log')
|
||||
|
||||
/* Needed to categorize types of errors and add environment section in allure report. */
|
||||
sh 'cp ext/allure_files/categories.json allure-results'
|
||||
sh 'cp ext/allure_files/environment.properties allure-results'
|
||||
|
||||
allure([
|
||||
results: [[path: 'allure-results']],
|
||||
reportBuildPolicy: 'ALWAYS',
|
||||
properties: [],
|
||||
jdk: '',
|
||||
])
|
||||
updateGitHubStatus()
|
||||
} } }
|
||||
failure { script {
|
||||
discord.send(
|
||||
header: '**Desktop E2E test failure!**',
|
||||
cred: 'discord-status-desktop-e2e-webhook',
|
||||
)
|
||||
} }
|
||||
cleanup { cleanWs() }
|
||||
}
|
||||
}
|
||||
|
||||
def setNewBuildName() {
|
||||
if (currentBuild.upstreamBuilds) {
|
||||
def parent = utils.parentOrCurrentBuild()
|
||||
currentBuild.displayName = parent.getFullDisplayName().minus('status-desktop » ')
|
||||
}
|
||||
}
|
||||
|
||||
def setBuildDescFromFile(fileNameOrPath) {
|
||||
def tokens = utils.parseFilename(utils.baseName(fileNameOrPath))
|
||||
if (tokens == null) { /* Fallback for regex fail. */
|
||||
currentBuild.description = utils.baseName(fileNameOrPath)
|
||||
return
|
||||
}
|
||||
if (tokens.build && tokens.build.startsWith('pr')) {
|
||||
currentBuild.displayName = tokens.build.replace(/^pr/, 'PR-')
|
||||
}
|
||||
currentBuild.description = formatMap([
|
||||
Node: NODE_NAME,
|
||||
Build: tokens.build,
|
||||
Commit: tokens.commit,
|
||||
Version: (tokens.tstamp ?: tokens.version),
|
||||
])
|
||||
}
|
||||
|
||||
def updateGitHubStatus() {
|
||||
/* For PR builds update check status. */
|
||||
if (params.BUILD_SOURCE ==~ /.*\/PR-[0-9]+\/?$/) {
|
||||
github.statusUpdate(
|
||||
context: 'jenkins/prs/tests/e2e-new',
|
||||
commit: jenkins.getJobCommitByPath(params.BUILD_SOURCE),
|
||||
repo_url: 'https://github.com/status-im/status-desktop'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
def formatMap(Map data=[:]) {
|
||||
def text = ''
|
||||
data.each { key, val -> text += "<b>${key}</b>: ${val}</a><br>\n" }
|
||||
return text
|
||||
}
|
||||
|
||||
def getDefaultBuildSource() {
|
||||
if (JOB_NAME ==~ 'status-desktop/qa-automation/prs/.*') {
|
||||
return 'status-desktop/nightly'
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
def getDefaultTestScopeFlag() {
|
||||
if (JOB_NAME == "status-desktop/systems/linux/x86_64/tests-e2e") {
|
||||
return ''
|
||||
} else {
|
||||
return '-m=critical'
|
||||
}
|
||||
}
|
||||
|
||||
def getTestStageTimeout() { TEST_SCOPE_FLAG == '-m=critical' ? 30 : 120 }
|
@ -1,75 +0,0 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.8.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
docker {
|
||||
label 'linux'
|
||||
image 'statusteam/nim-status-client-build:1.2.1-qt5.15.2'
|
||||
}
|
||||
}
|
||||
|
||||
parameters {
|
||||
choice(
|
||||
name: 'VERBOSE',
|
||||
description: 'Level of verbosity based on nimbus-build-system setup.',
|
||||
choices: ['0', '1', '2']
|
||||
)
|
||||
string(
|
||||
name: 'NIMFLAGS',
|
||||
description: 'Extra Nim flags. Examples: --verbosity:2 --passL:"-v" --passC:"-v"',
|
||||
defaultValue: '--colors:off'
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
timestamps()
|
||||
/* Prevent Jenkins jobs from running forever */
|
||||
timeout(time: 20, unit: 'MINUTES')
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
numToKeepStr: '10',
|
||||
daysToKeepStr: '30',
|
||||
artifactNumToKeepStr: '1',
|
||||
))
|
||||
/* Abort old PR builds. */
|
||||
disableConcurrentBuilds(
|
||||
abortPrevious: isPRBuild
|
||||
)
|
||||
}
|
||||
|
||||
environment {
|
||||
PLATFORM = 'tests/nim'
|
||||
/* Improve make performance */
|
||||
MAKEFLAGS = "-j4 V=${params.VERBOSE}"
|
||||
/* Makefile assumes the compiler folder is included */
|
||||
QTDIR = "/opt/qt/5.15.2/gcc_64"
|
||||
/* Avoid weird bugs caused by stale cache. */
|
||||
QML_DISABLE_DISK_CACHE = "true"
|
||||
/* Include library in order to compile the project */
|
||||
LD_LIBRARY_PATH = "$QTDIR/lib"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Deps') {
|
||||
steps {
|
||||
sh 'make update'
|
||||
sh 'make deps'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Tests') {
|
||||
steps { sh 'make tests-nim-linux' }
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success { script { github.notifyPR(true) } }
|
||||
failure { script { github.notifyPR(false) } }
|
||||
always { script { env.PKG_URL = "${currentBuild.absoluteUrl}/consoleText" } }
|
||||
cleanup { cleanWs() }
|
||||
}
|
||||
}
|
@ -1,132 +0,0 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.8.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
label 'linux && x86_64 && qt-5.15.2'
|
||||
}
|
||||
|
||||
parameters {
|
||||
choice(
|
||||
name: 'VERBOSE',
|
||||
description: 'Level of verbosity based on nimbus-build-system setup.',
|
||||
choices: ['0', '1', '2']
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
timestamps()
|
||||
/* Prevent Jenkins jobs from running forever */
|
||||
timeout(time: 120, unit: 'MINUTES')
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
numToKeepStr: '10',
|
||||
daysToKeepStr: '30',
|
||||
artifactNumToKeepStr: '1',
|
||||
))
|
||||
/* Abort old PR builds. */
|
||||
disableConcurrentBuilds(
|
||||
abortPrevious: isPRBuild
|
||||
)
|
||||
}
|
||||
|
||||
environment {
|
||||
PLATFORM = 'tests/ui'
|
||||
/* Improve make performance */
|
||||
MAKEFLAGS = "-j4 V=${params.VERBOSE}"
|
||||
/* Makefile assumes the compiler folder is included */
|
||||
QTDIR = "/opt/qt/5.15.2/gcc_64"
|
||||
PATH = "${env.QTDIR}/bin:${env.PATH}"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Build StatusQ Tests') {
|
||||
steps {
|
||||
sh 'make statusq-tests'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build StatusQ Sanity Checker') {
|
||||
steps {
|
||||
sh 'make statusq-sanity-checker'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build Storybook') {
|
||||
steps {
|
||||
sh 'make storybook-build'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Check StatusQ Tests') {
|
||||
steps { script {
|
||||
/* Needed for QGuiApplication to import QtQuick.Dialogs */
|
||||
wrap([
|
||||
$class: 'Xvfb',
|
||||
autoDisplayName: true,
|
||||
parallelBuild: true,
|
||||
screen: '2560x1440x24',
|
||||
]) {
|
||||
sh('make run-statusq-tests')
|
||||
}
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Check StatusQ Sanity Checker') {
|
||||
steps { script {
|
||||
/* Needed for QGuiApplication to import QtQuick.Dialogs */
|
||||
wrap([
|
||||
$class: 'Xvfb',
|
||||
autoDisplayName: true,
|
||||
parallelBuild: true,
|
||||
screen: '2560x1440x24',
|
||||
]) {
|
||||
sh('make run-statusq-sanity-checker')
|
||||
}
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Check Storybook Tests') {
|
||||
steps { script {
|
||||
/* Needed for QGuiApplication to import QtQuick.Dialogs */
|
||||
wrap([
|
||||
$class: 'Xvfb',
|
||||
autoDisplayName: true,
|
||||
parallelBuild: true,
|
||||
screen: '2560x1440x24',
|
||||
]) {
|
||||
sh('make run-storybook-tests')
|
||||
}
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Check Storybook Pages Validator') {
|
||||
steps { script {
|
||||
/* Needed for QGuiApplication to import QtQuick.Dialogs */
|
||||
wrap([
|
||||
$class: 'Xvfb',
|
||||
autoDisplayName: true,
|
||||
parallelBuild: true,
|
||||
screen: '2560x1440x24',
|
||||
]) {
|
||||
sh('make run-storybook-pages-validator')
|
||||
}
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Upload') {
|
||||
steps { script {
|
||||
env.PKG_URL = "${currentBuild.absoluteUrl}/consoleText"
|
||||
} }
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success { script { github.notifyPR(true) } }
|
||||
failure { script { github.notifyPR(false) } }
|
||||
cleanup { cleanWs() }
|
||||
}
|
||||
}
|
@ -1,133 +0,0 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.8.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
pipeline {
|
||||
agent { label 'windows && x86_64 && qt-5.15.2 && go-1.21' }
|
||||
|
||||
parameters {
|
||||
booleanParam(
|
||||
name: 'RELEASE',
|
||||
description: 'Decides whether release credentials are used.',
|
||||
defaultValue: params.RELEASE ?: false
|
||||
)
|
||||
booleanParam(
|
||||
name: 'INCLUDE_DEBUG_SYMBOLS',
|
||||
description: 'Decides whether binaries are built with debug symbols.',
|
||||
defaultValue: params.INCLUDE_DEBUG_SYMBOLS ?: false
|
||||
)
|
||||
choice(
|
||||
name: 'VERBOSE',
|
||||
description: 'Level of verbosity based on nimbus-build-system setup.',
|
||||
choices: ['0', '1', '2']
|
||||
)
|
||||
string(
|
||||
name: 'NIMFLAGS',
|
||||
description: 'Extra Nim flags. Examples: --verbosity:2 --passL:"-v" --passC:"-v"',
|
||||
defaultValue: '--colors:off'
|
||||
)
|
||||
booleanParam(
|
||||
name: 'USE_MOCKED_KEYCARD_LIB',
|
||||
description: 'Decides whether the mocked status-keycard-go library is built.',
|
||||
defaultValue: false
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
timestamps()
|
||||
/* Prevent Jenkins jobs from running forever */
|
||||
timeout(time: 60, unit: 'MINUTES')
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
numToKeepStr: '10',
|
||||
daysToKeepStr: '30',
|
||||
artifactNumToKeepStr: '1',
|
||||
))
|
||||
/* Allows combined build to copy */
|
||||
copyArtifactPermission('/status-desktop/*')
|
||||
/* Abort old PR builds. */
|
||||
disableConcurrentBuilds(
|
||||
abortPrevious: isPRBuild
|
||||
)
|
||||
}
|
||||
|
||||
environment {
|
||||
PLATFORM = "windows/${getArch()}"
|
||||
/* Improve make performance */
|
||||
MAKEFLAGS = "-j${utils.getProcCount()} V=${params.VERBOSE}"
|
||||
/* Explicitly set the QT version */
|
||||
QTDIR = "/c/Qt/5.15.2/msvc2019_64"
|
||||
PATH = "${env.QTDIR}/bin:${env.PATH}"
|
||||
/* Avoid weird bugs caused by stale cache. */
|
||||
QML_DISABLE_DISK_CACHE = "true"
|
||||
/* Control output the filename */
|
||||
STATUS_CLIENT_EXE = "pkg/${utils.pkgFilename(ext: 'exe', arch: getArch())}"
|
||||
/* 7zip archive filename */
|
||||
STATUS_CLIENT_7Z = "pkg/${utils.pkgFilename(ext: '7z', arch: getArch())}"
|
||||
/* RFC 3161 timestamping URL for DigiCert */
|
||||
WINDOWS_CODESIGN_TIMESTAMP_URL = 'http://timestamp.digicert.com'
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Deps') {
|
||||
steps {
|
||||
sh 'make update'
|
||||
sh 'make deps'
|
||||
}
|
||||
}
|
||||
|
||||
stage('status-go') {
|
||||
steps {
|
||||
sh 'make status-go'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Package') {
|
||||
steps { script {
|
||||
windows.bundle("${env.STATUS_CLIENT_EXE} ${env.STATUS_CLIENT_7Z}")
|
||||
} }
|
||||
}
|
||||
|
||||
stage('Parallel Upload') {
|
||||
/* Uploads on Windows are slow. */
|
||||
parallel {
|
||||
stage('Upload 7Z') {
|
||||
steps { script {
|
||||
zip_url = s3.uploadArtifact(env.STATUS_CLIENT_7Z)
|
||||
} }
|
||||
}
|
||||
stage('Upload EXE') {
|
||||
steps { script {
|
||||
exe_url = s3.uploadArtifact(env.STATUS_CLIENT_EXE)
|
||||
} }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Archive') {
|
||||
steps { script {
|
||||
archiveArtifacts(env.STATUS_CLIENT_EXE)
|
||||
archiveArtifacts(env.STATUS_CLIENT_7Z)
|
||||
env.PKG_URL = exe_url
|
||||
jenkins.setBuildDesc(Zip: zip_url, Exe: exe_url)
|
||||
} }
|
||||
}
|
||||
}
|
||||
post {
|
||||
success { script { github.notifyPR(true) } }
|
||||
failure { script { github.notifyPR(false) } }
|
||||
// Windows workspace often becomes broken if stoped during checkout.
|
||||
// Post cleanup will fail too.
|
||||
// Use 'Wipe out repository and force clone' manual UI option to prevent it.
|
||||
cleanup { cleanWs() }
|
||||
}
|
||||
}
|
||||
|
||||
def getArch() {
|
||||
def tokens = Thread.currentThread().getName().split('/')
|
||||
for (def arch in ['x86_64', 'aarch64']) {
|
||||
if (tokens.contains(arch)) { return arch }
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user