temp: delete jenkinsfiles temporarily

This commit is contained in:
Siddarth Kumar 2024-07-23 17:01:00 +05:30
parent bb4c94438f
commit 6d360b7e48
No known key found for this signature in database
GPG Key ID: 599D10112BF518DB
6 changed files with 0 additions and 901 deletions

View File

@ -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 }
}
}

View File

@ -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 }
}
}

View File

@ -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 }

View File

@ -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() }
}
}

View File

@ -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() }
}
}

View File

@ -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 }
}
}