name: Integration tests on: pull_request: {} push: paths-ignore: - '*.md' - '**/*.md' branches: - main env: GH_ANNOTATION: true DOCKER_BUILDKIT: 1 jobs: docker_build: runs-on: ubuntu-18.04 strategy: matrix: # Keep in sync with release.yaml matrix build target: [proxy, controller, web, cni-plugin, debug, cli-bin, grafana, jaeger-webhook] name: Docker build (${{ matrix.target }}) timeout-minutes: 30 steps: - name: Checkout code # actions/checkout@v2 uses: actions/checkout@722adc6 - name: Set environment variables from scripts run: | . bin/_tag.sh echo "TAG=$(CI_FORCE_CLEAN=1 bin/root-tag)" >> $GITHUB_ENV . bin/_docker.sh echo "DOCKER_REGISTRY=$DOCKER_REGISTRY" >> $GITHUB_ENV echo "DOCKER_BUILDKIT_CACHE=${{ runner.temp }}/.buildx-cache" >> $GITHUB_ENV - name: Cache docker layers # actions/cache@v2.0.0 uses: actions/cache@b820478 with: path: ${{ env.DOCKER_BUILDKIT_CACHE }} key: ${{ runner.os }}-buildx-${{ matrix.target }}-${{ env.TAG }} restore-keys: | ${{ runner.os }}-buildx-${{ matrix.target }}- - name: Build docker images env: DOCKER_TRACE: 1 run: | docker buildx create --driver docker-container --use bin/docker-build-${{ matrix.target }} - name: Prune docker layers cache # changes generate new images while the existing ones don't get removed # so we manually do that to avoid bloating the cache run: bin/docker-cache-prune - name: Create artifact with CLI and image archives env: ARCHIVES: /home/runner/archives run: | mkdir -p $ARCHIVES docker save "$DOCKER_REGISTRY/${{ matrix.target }}:$TAG" > $ARCHIVES/${{ matrix.target }}.tar # save windows cli into artifacts if [ '${{ matrix.target }}' == 'cli-bin' ]; then cp -r ./target/cli/windows/linkerd $ARCHIVES/linkerd-windows.exe fi # `with.path` values do not support environment variables yet, so an # absolute path is used here. # # https://github.com/actions/upload-artifact/issues/8 - name: Upload artifact # actions/upload-artifact@v1 uses: actions/upload-artifact@3446296 with: name: image-archives path: /home/runner/archives # todo: Keep in sync with `release.yml` windows_static_cli_tests: name: Static CLI tests (windows) runs-on: windows-latest needs: [docker_build] timeout-minutes: 30 steps: - name: Checkout code # actions/checkout@v2 uses: actions/checkout@722adc6 - name: Try to load cached Go modules # actions/cache@v1.1.2 uses: actions/cache@70655ec with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download image archives # actions/download-artifact@v1 uses: actions/download-artifact@18f0f59 with: name: image-archives - name: Run CLI Integration tests run: | go test --failfast --mod=readonly ".\test\cli" --linkerd=$PWD\image-archives\linkerd-windows.exe --cli-tests -v integration_tests: strategy: matrix: integration_test: - cluster-domain - deep - external-issuer - helm-deep - helm-upgrade - multicluster - uninstall - upgrade-edge - upgrade-stable - cni-calico-deep needs: [docker_build] name: Integration tests (${{ matrix.integration_test }}) runs-on: ubuntu-18.04 timeout-minutes: 30 steps: - name: Checkout code # actions/checkout@v2 uses: actions/checkout@722adc6 - name: Try to load cached Go modules # actions/cache@v1.1.2 uses: actions/cache@70655ec with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Set environment variables from scripts run: | . bin/_tag.sh echo "TAG=$(CI_FORCE_CLEAN=1 bin/root-tag)" >> $GITHUB_ENV . bin/_docker.sh echo "DOCKER_REGISTRY=$DOCKER_REGISTRY" >> $GITHUB_ENV - name: Download image archives # actions/download-artifact@v1 uses: actions/download-artifact@18f0f59 with: name: image-archives - name: Load cli-bin image into local docker images run: docker load < image-archives/cli-bin.tar - name: Install CLI run: | # Copy the CLI out of the local cli-bin container. container_id=$(docker create "$DOCKER_REGISTRY/cli-bin:$TAG") docker cp $container_id:/out/linkerd-linux-amd64 "$HOME/.linkerd" # Validate the CLI version matches the current build tag. [[ "$TAG" == "$($HOME/.linkerd version --short --client)" ]] - name: Run integration tests run: | bin/tests --images archive --name ${{ matrix.integration_test }} "$HOME/.linkerd"