Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ci)_: build on windows and macos #5840

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions _assets/ci/Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ pipeline {
stage('Linux') { steps { script {
linux = jenkins.Build('status-go/platforms/linux')
} } }
stage('MacOS') { steps { script {
linux = jenkins.Build('status-go/platforms/macos')
} } }
stage('Windows') { steps { script {
linux = jenkins.Build('status-go/platforms/windows')
} } }
stage('Docker') { steps { script {
dock = jenkins.Build('status-go/platforms/docker')
} } }
Expand Down
135 changes: 135 additions & 0 deletions _assets/ci/Jenkinsfile.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
#!/usr/bin/env groovy
library 'status-jenkins-lib@s5cmd-windows'

pipeline {
/* This way we run the same Jenkinsfile on different platforms. */
agent { label "${params.AGENT_LABEL}" }

parameters {
string(
name: 'BRANCH',
defaultValue: 'ci/develop',
description: 'Name of branch to build.'
)
string(
name: 'AGENT_LABEL',
description: 'Label for targetted CI slave host.',
defaultValue: params.AGENT_LABEL ?: getAgentLabel(),
)
booleanParam(
name: 'RELEASE',
defaultValue: false,
description: 'Enable to create build for release.',
)
}

options {
timestamps()
ansiColor('xterm')
/* Prevent Jenkins jobs from running forever */
timeout(time: 10, unit: 'MINUTES')
disableConcurrentBuilds()
/* manage how many builds we keep */
buildDiscarder(logRotator(
numToKeepStr: '5',
daysToKeepStr: '30',
artifactNumToKeepStr: '1',
))
}

environment {
PLATFORM = getPlatformFromLabel(params.AGENT_LABEL)
TMPDIR = "${WORKSPACE_TMP}"
GOPATH = "${WORKSPACE_TMP}/go"
GOCACHE = "${WORKSPACE_TMP}/gocache"
PATH = "${PATH}:${GOPATH}/bin"
REPO_SRC = "${GOPATH}/src/github.com/status-im/status-go"
VERSION = sh(script: "./_assets/scripts/version.sh", returnStdout: true)
ARTIFACT = utils.pkgFilename(
name: 'status-go',
type: env.PLATFORM,
version: env.VERSION,
ext: 'zip',
)
}

stages {
stage('Setup') {
steps {
script {
if (env.PLATFORM != 'windows') {
sh "mkdir -p \$(dirname ${REPO_SRC})"
sh "ln -s ${WORKSPACE} ${REPO_SRC}"
siddarthkay marked this conversation as resolved.
Show resolved Hide resolved
}
}
}
}
/* Sanity-check C bindings */
stage('Build Static Lib') {
steps {
script {
shell('make statusgo-library')
}
}
}

stage('Build Shared Lib') {
steps {
script {
shell('make statusgo-shared-library')
}
}
}

stage('Archive') {
steps {
zip zipFile: "${ARTIFACT}", archive: true, dir: 'build/bin'
}
}

stage('Upload') {
steps {
script {
env.PKG_URL = s5cmd.upload(ARTIFACT)
}
}
}
} // stages
post {
success { script { github.notifyPR(true) } }
failure { script { github.notifyPR(false) } }
cleanup { sh 'make deep-clean' }
} // post
} // pipeline

/* This allows us to use one Jenkinsfile and run
* jobs on different platforms based on job name. */
def getAgentLabel() {
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', 'windows', 'x86_64', 'aarch64', 'arm64'].each {
if (tokens.contains(it)) { labels.add(it) }
}
return labels.join(' && ')
}

/* This function extracts the platform from the AGENT_LABEL */
def getPlatformFromLabel(label) {
for (platform in ['linux', 'macos', 'windows']) {
if (label.contains(platform)) {
return platform
}
}
}

def shell(cmd) {
if (env.PLATFORM == 'windows') {
sh "${cmd} SHELL=/bin/sh"
} else {
nix.shell(cmd, pure: false) // Use nix.shell for Linux/macOS
}
}
89 changes: 0 additions & 89 deletions _assets/ci/Jenkinsfile.linux

This file was deleted.

1 change: 1 addition & 0 deletions _assets/ci/Jenkinsfile.linux
1 change: 1 addition & 0 deletions _assets/ci/Jenkinsfile.macos
1 change: 1 addition & 0 deletions _assets/ci/Jenkinsfile.windows
1 change: 1 addition & 0 deletions nix/pkgs/codecov-cli/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ in stdenv.mkDerivation rec {
url = "https://cli.codecov.io/v${version}/${platform}/codecov";
hash = lib.getAttr builtins.currentSystem {
aarch64-darwin = "sha256-CB1D8/zYF23Jes9sd6rJiadDg7nwwee9xWSYqSByAlU=";
x86_64-darwin = "sha256-CB1D8/zYF23Jes9sd6rJiadDg7nwwee9xWSYqSByAlU=";
siddarthkay marked this conversation as resolved.
Show resolved Hide resolved
x86_64-linux = "sha256-65AgCcuAD977zikcE1eVP4Dik4L0PHqYzOO1fStNjOw=";
aarch64-linux = "sha256-hALtVSXY40uTIaAtwWr7EXh7zclhK63r7a341Tn+q/g=";
};
Expand Down
Loading