# Copyright (c) 2019-2022, 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 build-dev-image: stage: image script: - apk --no-cache add make bash - make .build-image - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" - make .push-build-image rules: - !reference [.main-or-manual, rules] - if: $CI_PIPELINE_SOURCE == 'merge_request_event' when: manual - when: always .requires-build-image: image: "${BUILDIMAGE}" .go-check: extends: - .requires-build-image stage: go-checks fmt: extends: - .go-check script: - make assert-fmt vet: extends: - .go-check script: - make vet lint: extends: - .go-check script: - make lint allow_failure: true ineffassign: extends: - .go-check script: - make ineffassign allow_failure: true misspell: extends: - .go-check script: - make misspell go-build: extends: - .requires-build-image stage: go-build script: - make build unit-tests: extends: - .requires-build-image stage: unit-tests script: - make coverage # Define the package build helpers .multi-arch-build: before_script: - apk add --no-cache coreutils build-base sed git bash make - '[[ -n "${SKIP_QEMU_SETUP}" ]] || docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes' .package-artifacts: variables: ARTIFACTS_NAME: "toolkit-container-${CI_PIPELINE_ID}" ARTIFACTS_ROOT: "toolkit-container-${CI_PIPELINE_ID}" DIST_DIR: ${CI_PROJECT_DIR}/${ARTIFACTS_ROOT} .package-build: extends: - .multi-arch-build - .package-artifacts stage: package-build timeout: 3h script: - ./scripts/build-packages.sh ${DIST}-${ARCH} artifacts: name: ${ARTIFACTS_NAME} paths: - ${ARTIFACTS_ROOT} # Define the package build targets package-amazonlinux2-aarch64: extends: - .package-build - .dist-amazonlinux2 - .arch-aarch64 package-amazonlinux2-x86_64: extends: - .package-build - .dist-amazonlinux2 - .arch-x86_64 package-centos7-x86_64: extends: - .package-build - .dist-centos7 - .arch-x86_64 package-centos8-aarch64: extends: - .package-build - .dist-centos8 - .arch-aarch64 package-centos8-ppc64le: extends: - .package-build - .dist-centos8 - .arch-ppc64le package-centos8-x86_64: extends: - .package-build - .dist-centos8 - .arch-x86_64 package-debian10-amd64: extends: - .package-build - .dist-debian10 - .arch-amd64 package-opensuse-leap15.1-x86_64: extends: - .package-build - .dist-opensuse-leap15.1 - .arch-x86_64 package-ubuntu18.04-amd64: extends: - .package-build - .dist-ubuntu18.04 - .arch-amd64 package-ubuntu18.04-arm64: extends: - .package-build - .dist-ubuntu18.04 - .arch-arm64 package-ubuntu18.04-ppc64le: extends: - .package-build - .dist-ubuntu18.04 - .arch-ppc64le .buildx-setup: before_script: - export BUILDX_VERSION=v0.6.3 - apk add --no-cache curl - mkdir -p ~/.docker/cli-plugins - curl -sSLo ~/.docker/cli-plugins/docker-buildx "https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64" - chmod a+x ~/.docker/cli-plugins/docker-buildx - docker buildx create --use --platform=linux/amd64,linux/arm64 - '[[ -n "${SKIP_QEMU_SETUP}" ]] || docker run --rm --privileged multiarch/qemu-user-static --reset -p yes' # Define the image build targets .image-build: stage: image-build variables: IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit" VERSION: "${CI_COMMIT_SHORT_SHA}" PUSH_ON_BUILD: "true" before_script: - !reference [.buildx-setup, before_script] - apk add --no-cache bash make git - 'echo "Logging in to CI registry ${CI_REGISTRY}"' - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" script: - make -f build/container/Makefile build-${DIST} image-centos7: extends: - .image-build - .package-artifacts - .dist-centos7 needs: - package-centos7-x86_64 image-ubi8: extends: - .image-build - .package-artifacts - .dist-ubi8 needs: # Note: The ubi8 image uses the centos8 packages - package-centos8-aarch64 - package-centos8-x86_64 - package-centos8-ppc64le image-ubuntu20.04: extends: - .image-build - .package-artifacts - .dist-ubuntu20.04 needs: - package-ubuntu18.04-amd64 - package-ubuntu18.04-arm64 - job: package-ubuntu18.04-ppc64le optional: true # The DIST=packaging target creates an image containing all built packages image-packaging: extends: - .image-build - .package-artifacts - .dist-packaging needs: - job: package-centos8-aarch64 - job: package-centos8-x86_64 - job: package-ubuntu18.04-amd64 - job: package-ubuntu18.04-arm64 - job: package-amazonlinux2-aarch64 optional: true - job: package-amazonlinux2-x86_64 optional: true - job: package-centos7-x86_64 optional: true - job: package-centos8-ppc64le optional: true - job: package-debian10-amd64 optional: true - job: package-opensuse-leap15.1-x86_64 optional: true - job: package-ubuntu18.04-ppc64le optional: true # Define publish test helpers .test:toolkit: extends: - .integration variables: TEST_CASES: "toolkit" .test:docker: extends: - .integration variables: TEST_CASES: "docker" .test:containerd: # TODO: The containerd tests fail due to issues with SIGHUP. # Until this is resolved with retry up to twice and allow failure here. retry: 2 allow_failure: true extends: - .integration variables: TEST_CASES: "containerd" .test:crio: extends: - .integration variables: TEST_CASES: "crio" # Define the test targets test-toolkit-ubuntu20.04: extends: - .test:toolkit - .dist-ubuntu20.04 needs: - image-ubuntu20.04 test-containerd-ubuntu20.04: extends: - .test:containerd - .dist-ubuntu20.04 needs: - image-ubuntu20.04 test-crio-ubuntu20.04: extends: - .test:crio - .dist-ubuntu20.04 needs: - image-ubuntu20.04 test-docker-ubuntu20.04: extends: - .test:docker - .dist-ubuntu20.04 needs: - image-ubuntu20.04