Allows MixPanel to be configured per environment. The hardcoded MixPanel app ID and token are removed from the code (see the parent issue for more details). The token can be exploited and that’s by design in most analytics tools https://developer.mixpanel.com/reference/project-token. Fixes https://github.com/status-im/status-mobile/issues/21974 Areas that may be impacted - Analytics
137 lines
4.2 KiB
Groovy
137 lines
4.2 KiB
Groovy
#!/usr/bin/env groovy
|
|
library 'status-jenkins-lib@v1.9.20'
|
|
|
|
pipeline {
|
|
agent { label params.AGENT_LABEL }
|
|
|
|
parameters {
|
|
string(
|
|
name: 'NIX_CACHE_HOST',
|
|
description: 'FQDN of Nix binary cache host.',
|
|
defaultValue: params.NIX_CACHE_HOST ?: 'cache-01.do-ams3.nix.ci.statusim.net'
|
|
)
|
|
string(
|
|
name: 'NIX_CACHE_USER',
|
|
description: 'Username for Nix binary cache host.',
|
|
defaultValue: params.NIX_CACHE_USER ?: 'nix-cache'
|
|
)
|
|
}
|
|
|
|
environment {
|
|
/* we source .bash_profile to be able to use nix-store */
|
|
NIX_SSHOPTS = "-oStrictHostKeyChecking=no"
|
|
NIX_CONF_DIR = "${env.WORKSPACE}/nix"
|
|
NIX_STORE_CMD = '/nix/var/nix/profiles/default/bin/nix-store'
|
|
NIX_SSH_REMOTE = "ssh://${params.NIX_CACHE_USER}@${params.NIX_CACHE_HOST}?remote-program=${env.NIX_STORE_CMD}"
|
|
}
|
|
|
|
options {
|
|
timestamps()
|
|
disableConcurrentBuilds()
|
|
/* Prevent Jenkins jobs from running forever */
|
|
timeout(time: 120, unit: 'MINUTES')
|
|
/* Limit builds retained */
|
|
buildDiscarder(logRotator(
|
|
numToKeepStr: '20',
|
|
daysToKeepStr: '30',
|
|
artifactNumToKeepStr: '1',
|
|
))
|
|
}
|
|
|
|
stages {
|
|
stage('Setup') {
|
|
steps { script {
|
|
nix.shell('nix-env -i openssh', sandbox: false, pure: false)
|
|
/* some build targets don't build on MacOS */
|
|
os = sh(script: 'uname', returnStdout: true).trim()
|
|
arch = sh(script: 'arch', returnStdout: true).trim()
|
|
} }
|
|
}
|
|
stage('Build status-go') {
|
|
steps { script {
|
|
def platforms = ['mobile.android', 'mobile.ios', 'library']
|
|
if (os != 'Darwin') { platforms.removeAll { it == 'mobile.ios' } }
|
|
/* FIXME: "'x86_64-darwin' with features {} is required to build" */
|
|
if (arch == 'arm64') { platforms.removeAll { it == 'mobile.android' } }
|
|
platforms.each { platform ->
|
|
/* Allow for Android builds on Apple ARM. */
|
|
env.NIXPKGS_SYSTEM_OVERRIDE = nixSysOverride(os, arch, platform)
|
|
nix.build(
|
|
attr: "targets.status-go.${platform}",
|
|
sandbox: false,
|
|
link: false
|
|
)
|
|
}
|
|
} }
|
|
}
|
|
stage('Build android jsbundle') {
|
|
steps { script {
|
|
/* Build/fetch deps required for jsbundle build. */
|
|
nix.build(
|
|
attr: 'targets.mobile.jsbundle',
|
|
sandbox: false,
|
|
pure: false,
|
|
link: false
|
|
)
|
|
} }
|
|
}
|
|
stage('Build android deps') {
|
|
steps { script {
|
|
/* Allow for Android builds on Apple ARM. */
|
|
env.NIXPKGS_SYSTEM_OVERRIDE = nixSysOverride(os, arch, 'android')
|
|
/* Build/fetch deps required to build android release. */
|
|
nix.build(
|
|
attr: 'targets.mobile.android.build.buildInputs',
|
|
sandbox: false,
|
|
pure: false,
|
|
link: false
|
|
)
|
|
} }
|
|
}
|
|
stage('Build nix shell deps') {
|
|
steps { script {
|
|
def shells = ['android', 'ios', 'fastlane', 'keytool', 'clojure', 'gradle']
|
|
if (os != 'Darwin') { shells.removeAll { it == 'ios' } }
|
|
/* FIXME: "'x86_64-darwin' with features {} is required to build" */
|
|
if (arch == 'arm64') { shells.removeAll { it == 'android' } }
|
|
/* Build/fetch deps required to start default Nix shell. */
|
|
shells.each { shell ->
|
|
/* Allow for Android builds on Apple ARM. */
|
|
env.NIXPKGS_SYSTEM_OVERRIDE = nixSysOverride(os, arch, shell)
|
|
nix.build(
|
|
attr: "shells.${shell}.buildInputs",
|
|
sandbox: false,
|
|
link: false
|
|
)
|
|
}
|
|
} }
|
|
}
|
|
stage('Upload') {
|
|
steps { script {
|
|
sshagent(credentials: ['nix-cache-ssh']) {
|
|
nix.shell("""
|
|
find /nix/store/ -mindepth 1 -maxdepth 1 -type d \
|
|
-not -name '*.links' -and -not -name '*-status-mobile-*' \
|
|
| xargs nix copy --to ${NIX_SSH_REMOTE}
|
|
""",
|
|
pure: false
|
|
)
|
|
}
|
|
} }
|
|
}
|
|
}
|
|
post {
|
|
always { script {
|
|
nix.shell('nix-store --optimize', pure: false)
|
|
} }
|
|
}
|
|
}
|
|
|
|
def nixSysOverride(os, arch, target='android') {
|
|
return (
|
|
os == 'Darwin' &&
|
|
arch == 'arm64' &&
|
|
target =~ /.*android$/
|
|
) ? 'x86_64-darwin' : ''
|
|
}
|