chore: setup linux ci for .deb

This commit is contained in:
Richard Ramos 2022-12-06 14:00:59 -04:00 committed by RichΛrd
parent 98c14b5f68
commit 62e1f59d4f
5 changed files with 224 additions and 46 deletions

99
ci/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,99 @@
library 'status-jenkins-lib@v1.4.3'
pipeline {
agent { label 'linux' }
options {
timestamps()
disableConcurrentBuilds()
/* Prevent Jenkins jobs from running forever */
timeout(time: 40, unit: 'MINUTES')
/* Limit builds retained */
buildDiscarder(logRotator(
numToKeepStr: '10',
daysToKeepStr: '30',
artifactNumToKeepStr: '10',
))
}
/* WARNING: Defining parameters here with the ?: trick causes them to remember last value. */
parameters {
booleanParam(
name: 'PUBLISH',
description: 'Trigger publishing of build results for nightly or release.',
defaultValue: getPublishDefault(params.PUBLISH),
)
}
stages {
stage('Build') {
parallel {
stage('iOS') { steps { script {
ios = jenkins.Build('go-waku/platforms/ios')
} } }
stage('Android') { steps { script {
android = jenkins.Build('go-waku/platforms/android')
} } }
stage('Linux') { steps { script {
linux = jenkins.Build('go-waku/platforms/linux')
} } }
}
}
stage('Archive') {
steps { script {
sh('rm -f pkg/*')
jenkins.copyArts(ios)
jenkins.copyArts(android)
jenkins.copyArts(linux)
sha = "pkg/${utils.pkgFilename(ext: 'sha256')}"
dir('pkg') {
/* generate sha256 checksums for upload */
sh "sha256sum * | tee ../${sha}"
archiveArtifacts('*')
}
} }
}
stage('Upload') {
steps { script {
/* object for easier URLs handling */
urls = [
/* mobile */
Android: utils.pkgUrl(android),
iOS: utils.pkgUrl(ios),
Linux: utils.pkgUrl(linux),
/* upload the sha256 checksums file too */
SHA: s3.uploadArtifact(sha),
]
/* add URLs to the build description */
jenkins.setBuildDesc(urls)
} }
}
stage('Publish') {
when { expression { params.PUBLISH } }
steps { script {
github.publishReleaseFiles(repo: 'status-desktop');
} }
}
}
}
/* Helper that generates list of available choices for a parameter
* but re-orders them based on the currently set value. First is default. */
def List genChoices(String previousChoice, List defaultChoices) {
if (previousChoice == null) {
return defaultChoices
}
choices = defaultChoices.minus(previousChoice)
choices.add(0, previousChoice)
return choices
}
/* Helper that makes PUBLISH default to 'false' unless:
* - The build is for a release branch
* - A user explicitly specified a value
* Since release builds create and re-create GitHub drafts every time. */
def Boolean getPublishDefault(Boolean previousValue) {
if (env.JOB_NAME.startsWith('go-waku/release')) { return true }
if (previousValue != null) { return previousValue }
return false
}

78
ci/Jenkinsfile.linux Normal file
View File

@ -0,0 +1,78 @@
library 'status-jenkins-lib@v1.3.3'
pipeline {
agent {
dockerfile {
label 'linux'
dir 'src/github.com/waku-org/go-waku/scripts/linux'
}
}
options {
timestamps()
disableConcurrentBuilds()
/* Prevent Jenkins jobs from running forever */
timeout(time: 30, unit: 'MINUTES')
/* Go requires a certain directory structure */
checkoutToSubdirectory('src/github.com/waku-org/go-waku')
/* Limit builds retained */
buildDiscarder(logRotator(
numToKeepStr: '10',
daysToKeepStr: '20',
artifactNumToKeepStr: '10',
))
/* Allows combined build to copy */
copyArtifactPermission('/go-waku/*')
}
environment {
BUILD_PLATFORM = 'linux'
/* Other stuff */
TARGET = 'linux'
REPO = "${env.WORKSPACE}/src/github.com/waku-org/go-waku"
GOPATH = "${env.WORKSPACE}"
PATH = "/usr/local/go/bin:${env.PATH}:${env.GOPATH}/bin"
}
stages {
stage('Prep') { steps { dir(env.REPO) { script {
env.DEB_ARTIFACT = "${env.REPO}/pkg/" + utils.pkgFilename(
name: "go-waku",
type: "x86_64",
ext: "deb"
)
} } } }
stage('Build') { steps { dir(env.REPO) {
sh "make"
dir('./scripts/linux') {
sh "./fpm-build.sh"
}
dir('build') {
sh "cp gowaku*.deb ${env.DEB_ARTIFACT}"
}
} } }
stage('Parallel Upload') {
parallel {
stage('Archive') {
steps { script {
archiveArtifacts(env.DEB_ARTIFACT.minus("${env.WORKSPACE}/"))
} }
}
stage('Upload') {
steps { script {
env.PKG_URL = s3.uploadArtifact(env.DEB_ARTIFACT)
jenkins.setBuildDesc(x86_64_deb: env.PKG_URL)
} }
}
}
}
}
post {
success { script { github.notifyPR(true) } }
failure { script { github.notifyPR(false) } }
always { cleanWs() }
}
}

View File

@ -10,7 +10,7 @@ LABEL description="go-waku: deb/rpm builder"
RUN export DEBIAN_FRONTEND=noninteractive \ RUN export DEBIAN_FRONTEND=noninteractive \
&& apt update -yq \ && apt update -yq \
&& apt install -yq ruby wget git rpm build-essential && apt install -yq ruby wget git rpm build-essential s3cmd curl
# Installing Golang # Installing Golang
RUN GOLANG_SHA256="74b9640724fd4e6bb0ed2a1bc44ae813a03f1e72a4c76253e2d5c015494430ba" \ RUN GOLANG_SHA256="74b9640724fd4e6bb0ed2a1bc44ae813a03f1e72a4c76253e2d5c015494430ba" \

View File

@ -5,48 +5,4 @@ make
cd /go-waku/scripts/linux cd /go-waku/scripts/linux
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )/../../ ./fpm-build.sh
VERSION=`cat ${parent_path}/VERSION`
if [ ! -f ${parent_path}/build/waku ]
then
echo "waku binary does not exist. Execute make first"
exit
fi
tmpdir=`mktemp -d`
chmod 777 ${tmpdir}
cp ${parent_path}/build/waku ${tmpdir}
strip --strip-unneeded ${tmpdir}/waku
pushd ${tmpdir}
fpm_build () {
fpm \
-s dir -t $1 \
-p gowaku-${VERSION}-x86_64.$1 \
--name go-waku \
--license "MIT, Apache 2.0" \
--version ${VERSION} \
--architecture x86_64 \
--depends libc6 \
--description "Go implementation of Waku v2 protocol" \
--url "https://github.com/waku-org/go-waku" \
--maintainer "Richard Ramos <richard@status.im>" \
waku=/usr/bin/waku
}
fpm_build "deb"
fpm_build "rpm"
echo "./././.asasdasd"
ls
mv *.deb *.rpm ${parent_path}/build/.
popd

45
scripts/linux/fpm-build.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/bash
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )/../../
VERSION=`cat ${parent_path}/VERSION`
if [ ! -f ${parent_path}/build/waku ]
then
echo "waku binary does not exist. Execute make first"
exit
fi
tmpdir=`mktemp -d`
chmod 777 ${tmpdir}
cp ${parent_path}/build/waku ${tmpdir}
strip --strip-unneeded ${tmpdir}/waku
pushd ${tmpdir}
fpm_build () {
fpm \
-s dir -t $1 \
-p gowaku-${VERSION}-x86_64.$1 \
--name go-waku \
--license "MIT, Apache 2.0" \
--version ${VERSION} \
--architecture x86_64 \
--depends libc6 \
--description "Go implementation of Waku v2 protocol" \
--url "https://github.com/waku-org/go-waku" \
--maintainer "Richard Ramos <richard@status.im>" \
waku=/usr/bin/waku
}
fpm_build "deb"
fpm_build "rpm"
ls
mv *.deb *.rpm ${parent_path}/build/.
popd