# Copyright (c) 2019-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. include: - .common-ci.yml stages: - image - go-checks - go-build - unit-tests - test - scan - release - build-one - build-all .build-setup: before_script: - apk update - apk upgrade - apk add coreutils build-base sed git bash make - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes # build-one jobs build packages for a single OS / ARCH combination. # # They are run during the first stage of the pipeline as a smoke test to ensure # that we can successfully build packages on all of our architectures for a # single OS. They are triggered on any change to an MR. No artifacts are # produced as part of build-one jobs. .build-one-setup: extends: - .build-setup stage: build-one rules: - if: $CI_MERGE_REQUEST_ID # build-all jobs build packages for every OS / ARCH combination we support. # # They are run under two conditions: # 1) Automatically whenever a new tag is pushed to the repo (e.g. v1.1.0) # 2) Manually by a reviewer just before merging a MR. # # Unlike build-one jobs, it takes a long time to build the full suite # OS / ARCH combinations, so this is optimized to only run once per MR # (assuming it all passes). A full set of artifacts including the packages # built for each OS / ARCH are produced as a result of these jobs. .build-all-setup: extends: - .build-setup stage: build-all timeout: 2h 30m rules: - if: $CI_COMMIT_TAG when: always - if: $CI_MERGE_REQUEST_ID when: always variables: ARTIFACTS_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}-${CI_JOB_NAME}-artifacts-${CI_PIPELINE_ID}" ARTIFACTS_DIR: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}-artifacts-${CI_PIPELINE_ID}" DIST_DIR: "${CI_PROJECT_DIR}/${ARTIFACTS_DIR}" artifacts: name: ${ARTIFACTS_NAME} paths: - ${ARTIFACTS_DIR} # The full set of build-one jobs organizes to build # ubuntu18.04 in parallel on each of our supported ARCHs. build-one-amd64: extends: - .build-one-setup script: - make ubuntu18.04-amd64 rules: - when: always build-one-ppc64le: extends: - .build-one-setup script: - make ubuntu18.04-ppc64le build-one-arm64: extends: - .build-one-setup script: - make ubuntu18.04-arm64 # The full set of build-all jobs organized to # have builds for each ARCH run in parallel. build-all-amd64: extends: - .build-all-setup script: - make docker-amd64 build-all-x86_64: extends: - .build-all-setup script: - make docker-x86_64 build-all-ppc64le: extends: - .build-all-setup script: - make docker-ppc64le build-all-arm64: extends: - .build-all-setup script: - make docker-arm64 build-all-aarch64: extends: - .build-all-setup script: - make docker-aarch64