2021-03-17 12:31:52 +00:00
|
|
|
/*
|
|
|
|
# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2021-03-17 13:13:04 +00:00
|
|
|
podTemplate (cloud:'sw-gpu-cloudnative',
|
|
|
|
containers: [
|
|
|
|
containerTemplate(name: 'docker', image: 'docker:dind', ttyEnabled: true, privileged: true),
|
|
|
|
containerTemplate(name: 'golang', image: 'golang:1.14.2', ttyEnabled: true)
|
|
|
|
]) {
|
|
|
|
node(POD_LABEL) {
|
|
|
|
stage('checkout') {
|
|
|
|
checkout scm
|
|
|
|
}
|
|
|
|
stage('dependencies') {
|
|
|
|
container('golang') {
|
|
|
|
sh 'GO111MODULE=off go get -u github.com/client9/misspell/cmd/misspell'
|
|
|
|
sh 'GO111MODULE=off go get -u github.com/gordonklaus/ineffassign'
|
|
|
|
sh 'GO111MODULE=off go get -u golang.org/x/lint/golint'
|
2021-03-17 12:31:52 +00:00
|
|
|
}
|
2021-03-17 13:13:04 +00:00
|
|
|
container('docker') {
|
|
|
|
sh 'apk add --no-cache make bash'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stage('check') {
|
|
|
|
parallel (
|
|
|
|
getGolangStages(["assert-fmt", "lint", "vet", "ineffassign", "misspell"])
|
|
|
|
)
|
|
|
|
}
|
|
|
|
stage('test') {
|
|
|
|
parallel (
|
|
|
|
getGolangStages(["test"])
|
|
|
|
)
|
|
|
|
}
|
|
|
|
stage('build-one') {
|
|
|
|
parallel (
|
|
|
|
getSingleBuildForArchitectures(["amd64", "ppc64le", "arm64"])
|
|
|
|
)
|
|
|
|
}
|
|
|
|
stage('build-all') {
|
|
|
|
parallel (
|
|
|
|
getAllBuildForArchitectures(["amd64", "ppc64le", "arm64", "x86_64", "aarch64"])
|
|
|
|
)
|
2021-03-17 12:31:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-17 13:13:04 +00:00
|
|
|
def getGolangStages(def targets) {
|
2021-03-17 12:31:52 +00:00
|
|
|
stages = [:]
|
|
|
|
|
2021-03-17 13:13:04 +00:00
|
|
|
for (t in targets) {
|
|
|
|
stages[t] = getLintClosure(t)
|
2021-03-17 12:31:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return stages
|
|
|
|
}
|
|
|
|
|
|
|
|
def getSingleBuildForArchitectures(def architectures) {
|
|
|
|
return getBuildStagesForArchitectures(architectures, "make", "ubuntu18.04")
|
|
|
|
}
|
|
|
|
|
|
|
|
def getAllBuildForArchitectures(def architectures) {
|
|
|
|
// TODO: For the time being we only echo the command for the "all" stages
|
|
|
|
return getBuildStagesForArchitectures(architectures, "echo make", "docker")
|
|
|
|
}
|
|
|
|
|
2021-03-17 13:13:04 +00:00
|
|
|
def getBuildStagesForArchitectures(def architectures, def makeCommand, def makeTargetPrefix) {
|
|
|
|
stages = [:]
|
|
|
|
|
|
|
|
for (a in architectures) {
|
|
|
|
stages[a] = getBuildClosure(a, makeCommand, "${makeTargetPrefix}-${a}")
|
|
|
|
}
|
|
|
|
|
|
|
|
return stages
|
|
|
|
}
|
|
|
|
|
|
|
|
def getBuildClosure(def architecture, def makeCommand, def makeTarget) {
|
|
|
|
return {
|
|
|
|
container('docker') {
|
|
|
|
stage(architecture) {
|
|
|
|
sh "${makeCommand} ${makeTarget}"
|
2021-03-17 12:31:52 +00:00
|
|
|
}
|
|
|
|
}
|
2021-03-17 13:13:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
def getLintClosure(def target) {
|
|
|
|
return {
|
|
|
|
container('golang') {
|
|
|
|
stage(target) {
|
|
|
|
sh "make ${target}"
|
|
|
|
}
|
2021-03-17 12:31:52 +00:00
|
|
|
}
|
|
|
|
}
|
2021-03-17 13:13:04 +00:00
|
|
|
}
|