205 lines
5.8 KiB
Groovy
205 lines
5.8 KiB
Groovy
import groovy.transform.Field
|
|
|
|
/* SETTINGS */
|
|
|
|
// in minutes
|
|
def sharness_timeout = 15
|
|
def gotest_timeout = 10
|
|
def build_timeout = 20
|
|
def check_timeout = 4
|
|
|
|
def test = 'go test -v ./...'
|
|
|
|
def fast_build_platforms = [
|
|
['linux', 'amd64'],
|
|
]
|
|
|
|
def build_platforms = [
|
|
['windows', '386'],
|
|
['windows', 'amd64'],
|
|
|
|
['linux', 'arm'],
|
|
['linux', 'arm64'],
|
|
['linux', '386'],
|
|
|
|
['darwin', '386'],
|
|
['darwin', 'amd64'],
|
|
|
|
['freebsd', 'amd64']
|
|
]
|
|
|
|
/* PIPELINE UTILS */
|
|
|
|
def setupStep(nodeLabel, f) {
|
|
node(label: nodeLabel) {
|
|
def ps = nodeLabel != 'windows' ? '/' : '\\'
|
|
def psep = nodeLabel != 'windows' ? ':' : ';'
|
|
|
|
def root = tool name: '1.11', type: 'go'
|
|
def jobNameArr = "${JOB_NAME}"
|
|
def jobName = jobNameArr.split("/")[0..1].join(nodeLabel != 'windows' ? '/' : '\\\\').toLowerCase()
|
|
def subName = jobNameArr.split("/")[2].toLowerCase()
|
|
def originalWs = "${WORKSPACE}"
|
|
|
|
ws("${originalWs}${ps}src${ps}github.com${ps}${jobName}") {
|
|
def goEnv = ["GOROOT=${root}", "GOPATH=${originalWs}", "SUBNAME=${subName}", "PATH=$PATH${psep}${root}${ps}bin${psep}${originalWs}${ps}bin"]
|
|
withEnv(goEnv) {
|
|
checkout scm
|
|
|
|
def run = nodeLabel != 'windows' ? this.&sh : this.&bat
|
|
|
|
try {
|
|
f(run)
|
|
} finally {
|
|
cleanWs()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
def gobuild_step = { list ->
|
|
setupStep('linux') { run ->
|
|
timeout(time: build_timeout, unit: 'MINUTES') {
|
|
run "make gx-deps"
|
|
|
|
list.each { platform ->
|
|
timeout(time: check_timeout, unit: 'MINUTES') {
|
|
withEnv(["GOOS=${platform[0]}", "GOARCH=${platform[1]}"]) {
|
|
run "go build -i -ldflags=\"-X github.com/ipfs/go-ipfs/repo/config.CurrentCommit=${env.SUBNAME}-${env.BUILD_NUMBER}\" -o cmd/ipfs/ipfs github.com/ipfs/go-ipfs/cmd/ipfs"
|
|
run "cp cmd/ipfs/ipfs cmd/ipfs/dist; cd cmd/ipfs/dist; tar -czvf ../go-ipfs_${env.GOOS}-${env.GOARCH}-${env.SUBNAME}-${env.BUILD_NUMBER}.tar.gz ."
|
|
archiveArtifacts artifacts: "cmd/ipfs/go-ipfs_${env.GOOS}-${env.GOARCH}-${env.SUBNAME}-${env.BUILD_NUMBER}.tar.gz", fingerprint: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
def sharness_step = { run, osname, makeargs, ignore ->
|
|
timeout(time: sharness_timeout, unit: 'MINUTES') {
|
|
run "make gx-deps"
|
|
|
|
try {
|
|
run "make -j12 ${makeargs} test/sharness/test-results/sharness.xml CONTINUE_ON_S_FAILURE=1 TEST_NO_FUSE=1 TEST_NO_DOCKER=1"
|
|
|
|
try {
|
|
// archive trash directories if any
|
|
run "tar -czf sharnessTrashDirs-${osname}.tar.gz test/sharness/trash\\ *"
|
|
archiveArtifacts artifacts: "sharnessTrashDirs-${osname}.tar.gz", fingerprint: true
|
|
} catch (_) {}
|
|
} catch (err) {
|
|
throw err
|
|
} finally {
|
|
if (!ignore) {
|
|
junit allowEmptyResults: true, testResults: 'test/sharness/test-results/sharness.xml'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* PIPELINE */
|
|
|
|
ansiColor('xterm') { withEnv(['TERM=xterm-color']) {
|
|
stage('Checks') {
|
|
parallel(
|
|
'go fmt': {
|
|
setupStep('linux') { run ->
|
|
timeout(time: check_timeout, unit: 'MINUTES') {
|
|
run 'make test_go_fmt'
|
|
}
|
|
}
|
|
},
|
|
'go vet': {
|
|
setupStep('linux') { run ->
|
|
timeout(time: check_timeout, unit: 'MINUTES') {
|
|
run 'make gx-deps'
|
|
run 'go vet ./...'
|
|
}
|
|
}
|
|
},
|
|
'go build': {
|
|
gobuild_step(fast_build_platforms)
|
|
},
|
|
'gx deps dupes': {
|
|
setupStep('linux') { run ->
|
|
timeout(time: check_timeout, unit: 'MINUTES') {
|
|
run 'make gx-deps'
|
|
run 'test -z "$(./bin/gx deps dupes)"'
|
|
}
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
stage('Tests') {
|
|
parallel(
|
|
'go build (other platforms)': {
|
|
gobuild_step(build_platforms)
|
|
},
|
|
windows: {
|
|
setupStep('windows') { run ->
|
|
timeout(time: gotest_timeout, unit: 'MINUTES') {
|
|
run 'go get -v github.com/jstemmer/go-junit-report github.com/whyrusleeping/gx github.com/whyrusleeping/gx-go'
|
|
run "gx install --global"
|
|
|
|
try {
|
|
run test + ' -tags="nofuse" > output & type output'
|
|
run 'type output | go-junit-report > junit-report-windows.xml'
|
|
} catch (err) {
|
|
throw err
|
|
} finally {
|
|
/* IGNORE TEST FAILS */
|
|
/* junit allowEmptyResults: true, testResults: 'junit-report-*.xml' */
|
|
}
|
|
}
|
|
}
|
|
},
|
|
linux: {
|
|
setupStep('linux') { run ->
|
|
timeout(time: gotest_timeout, unit: 'MINUTES') {
|
|
run 'go get -v github.com/jstemmer/go-junit-report'
|
|
run "make gx-deps"
|
|
|
|
try {
|
|
run test + ' -tags="nofuse" 2>&1 | tee output'
|
|
run 'cat output | go-junit-report > junit-report-linux.xml'
|
|
} catch (err) {
|
|
throw err
|
|
} finally {
|
|
junit allowEmptyResults: true, testResults: 'junit-report-*.xml'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
linuxSharness: {
|
|
setupStep('linux') { run ->
|
|
sharness_step(run, 'linux', '-Otarget', false)
|
|
}
|
|
},
|
|
//macOS: {
|
|
// setupStep('macos') { run ->
|
|
// sharness_step(run, 'macos', '', true)
|
|
// }
|
|
//},
|
|
//macSharness: {
|
|
// setupStep('macos') { run ->
|
|
// timeout(time: sharness_timeout, unit: 'MINUTES') {
|
|
// run 'go get -v github.com/jstemmer/go-junit-report'
|
|
// run "make gx-deps"
|
|
|
|
// try {
|
|
// run "make -j12 test/sharness/test-results/sharness.xml CONTINUE_ON_S_FAILURE=1 TEST_NO_FUSE=1"
|
|
// } catch (err) {
|
|
// throw err
|
|
// } finally {
|
|
// /* IGNORE TEST FAILS */
|
|
// /* junit allowEmptyResults: true, testResults: 'test/sharness/test-results/sharness.xml' */
|
|
// }
|
|
// }
|
|
// }
|
|
//},
|
|
)
|
|
}
|
|
}}
|