diff --git a/ci/Jenkinsfile.linux b/ci/Jenkinsfile.linux
deleted file mode 100644
index 872402d65f..0000000000
--- a/ci/Jenkinsfile.linux
+++ /dev/null
@@ -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 }
- }
-}
diff --git a/ci/Jenkinsfile.macos b/ci/Jenkinsfile.macos
deleted file mode 100644
index a088c8ef98..0000000000
--- a/ci/Jenkinsfile.macos
+++ /dev/null
@@ -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 }
- }
-}
diff --git a/ci/Jenkinsfile.tests-e2e b/ci/Jenkinsfile.tests-e2e
deleted file mode 100644
index ae723a02fc..0000000000
--- a/ci/Jenkinsfile.tests-e2e
+++ /dev/null
@@ -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 += "${key}: ${val}
\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 }
diff --git a/ci/Jenkinsfile.tests-nim b/ci/Jenkinsfile.tests-nim
deleted file mode 100644
index 12f64f2912..0000000000
--- a/ci/Jenkinsfile.tests-nim
+++ /dev/null
@@ -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() }
- }
-}
diff --git a/ci/Jenkinsfile.tests-ui b/ci/Jenkinsfile.tests-ui
deleted file mode 100644
index d6d6200e00..0000000000
--- a/ci/Jenkinsfile.tests-ui
+++ /dev/null
@@ -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() }
- }
-}
diff --git a/ci/Jenkinsfile.windows b/ci/Jenkinsfile.windows
deleted file mode 100644
index 75208b3de0..0000000000
--- a/ci/Jenkinsfile.windows
+++ /dev/null
@@ -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 }
- }
-}