mirror of
https://github.com/status-im/status-web.git
synced 2026-08-30 22:01:15 +00:00
Referenced issue: * https://github.com/status-im/status-web/issues/946 Signed-off-by: markoburcul <marko@status.im>
191 lines
4.5 KiB
Groovy
191 lines
4.5 KiB
Groovy
#!/usr/bin/env groovy
|
|
library 'status-jenkins-lib@v1.9.39'
|
|
|
|
def changesDetected = false
|
|
|
|
pipeline {
|
|
agent {
|
|
docker {
|
|
label 'linuxcontainer'
|
|
image 'harbor.status.im/infra/ci-build-containers:linux-base-1.0.0'
|
|
args '--volume=/nix:/nix ' +
|
|
'--volume=/etc/nix:/etc/nix '
|
|
}
|
|
}
|
|
|
|
options {
|
|
timestamps()
|
|
/* Prevent Jenkins jobs from running forever */
|
|
timeout(time: 10, unit: 'MINUTES')
|
|
/* manage how many builds we keep */
|
|
buildDiscarder(logRotator(
|
|
numToKeepStr: '20',
|
|
daysToKeepStr: '30',
|
|
))
|
|
disableConcurrentBuilds()
|
|
}
|
|
|
|
parameters {
|
|
choice(
|
|
name: 'APP_NAME',
|
|
description: 'Name of app from apps folder.',
|
|
choices: choiceFromJobName(params.APP_NAME, ['connector', 'wallet']),
|
|
)
|
|
booleanParam(
|
|
name: 'FORCE_BUILD',
|
|
description: 'Build even if no changes detected.',
|
|
defaultValue: params.FORCE_BUILD ?: false
|
|
)
|
|
}
|
|
|
|
environment {
|
|
PLATFORM = "${params.APP_NAME}"
|
|
ZIP_NAME = utils.pkgFilename(
|
|
name: 'StatusWeb',
|
|
type: params.APP_NAME,
|
|
version: 'none',
|
|
arch: 'chrome',
|
|
ext: 'zip',
|
|
)
|
|
}
|
|
|
|
stages {
|
|
stage('Check Connector Changes') {
|
|
when {
|
|
anyOf {
|
|
changeset "flake.*"
|
|
changeset "Jenkinsfile"
|
|
changeset "apps/${params.APP_NAME}/**"
|
|
changeset "packages/colors/**"
|
|
changeset "packages/eslint-config/**"
|
|
}
|
|
}
|
|
steps {
|
|
script {
|
|
changesDetected = true
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Check Wallet Changes') {
|
|
when {
|
|
anyOf {
|
|
changeset "flake.*"
|
|
changeset "Jenkinsfile"
|
|
changeset "apps/${params.APP_NAME}/**"
|
|
changeset "packages/colors/**"
|
|
changeset "packages/eslint-config/**"
|
|
changeset "packages/components/**"
|
|
changeset "packages/icons/**"
|
|
changeset "packages/wallet/**"
|
|
}
|
|
}
|
|
steps {
|
|
script {
|
|
changesDetected = true
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Install') {
|
|
when { expression { changesDetected || params.FORCE_BUILD } }
|
|
steps {
|
|
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
|
|
script {
|
|
nix.develop(
|
|
'pnpm install --frozen-lockfile --aggregate-output',
|
|
pure: false,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Build') {
|
|
when { expression { changesDetected || params.FORCE_BUILD } }
|
|
steps {
|
|
dir("${env.WORKSPACE}") {
|
|
script {
|
|
nix.develop(
|
|
"pnpm turbo run build --filter=${params.APP_NAME}",
|
|
pure: false,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Zip') {
|
|
when { expression { changesDetected || params.FORCE_BUILD } }
|
|
steps {
|
|
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
|
|
zip(
|
|
zipFile: env.ZIP_NAME,
|
|
dir: getBuildDir(params.APP_NAME),
|
|
archive: false,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Archive') {
|
|
when { expression { changesDetected || params.FORCE_BUILD } }
|
|
steps {
|
|
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
|
|
archiveArtifacts(
|
|
artifacts: env.ZIP_NAME,
|
|
fingerprint: true,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Upload') {
|
|
when { expression { changesDetected || params.FORCE_BUILD } }
|
|
steps {
|
|
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
|
|
script {
|
|
env.PKG_URL = s5cmd.upload(env.ZIP_NAME)
|
|
jenkins.setBuildDesc(ZIP: env.PKG_URL)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success { script { if (changesDetected && env.CHANGE_ID) { github.notifyPR(true) } } }
|
|
failure { script { if (changesDetected && env.CHANGE_ID) { github.notifyPR(false) } } }
|
|
cleanup { cleanWs() }
|
|
}
|
|
}
|
|
|
|
List<String> moveToStart(List<String> original, String input) {
|
|
original.split {it.equals(input)}.flatten()
|
|
}
|
|
|
|
/* If job name contains one of choices make that the default(first). */
|
|
def choiceFromJobName(String previousChoice, List defaultChoices) {
|
|
if (previousChoice != null) {
|
|
return moveToStart(defaultChoices, previousChoice)
|
|
}
|
|
def tokens = env.JOB_NAME.split('/')
|
|
for (choice in defaultChoices) {
|
|
if (tokens.contains(choice)) {
|
|
return moveToStart(defaultChoices, choice)
|
|
}
|
|
}
|
|
return defaultChoices
|
|
}
|
|
|
|
def getBuildDir(String appName) {
|
|
switch(appName) {
|
|
case 'connector':
|
|
return 'build/chrome-mv3-prod'
|
|
case 'wallet':
|
|
return '.output/chrome-mv3'
|
|
default:
|
|
error("Unknown app: ${appName}.")
|
|
}
|
|
}
|