This patch: - Combines the shellcheck and lint stages. Free CircleCI plans allow a maximum of 4 concurrent jobs, and from the timing, the "lint" and "shellcheck" stages combined would still take less time than the other stages, so combining them keeps the same overall duration, but saving one machine "slot". - Splits some steps, so that their output can be found more easily in the CI results. For example, separating building of Docker images from running them. - Adds a "Docker info" step, because information about the environment can be useful when debugging. - Adds the "Docker info" and "Docker version" steps to all stages, so that it's possible to get that information without having to find the stage in which it's printed. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
160 lines
4.6 KiB
YAML
160 lines
4.6 KiB
YAML
version: 2
|
|
|
|
jobs:
|
|
|
|
lint:
|
|
working_directory: /work
|
|
docker: [{image: 'docker:18.09-git'}]
|
|
environment:
|
|
DOCKER_BUILDKIT: 1
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 18.09.3
|
|
reusable: true
|
|
exclusive: false
|
|
- run:
|
|
name: "Docker version"
|
|
command: docker version
|
|
- run:
|
|
name: "Docker info"
|
|
command: docker info
|
|
- run:
|
|
name: "Shellcheck - build image"
|
|
command: |
|
|
docker build --progress=plain -f dockerfiles/Dockerfile.shellcheck --tag cli-validator:$CIRCLE_BUILD_NUM .
|
|
- run:
|
|
name: "Shellcheck"
|
|
command: |
|
|
docker run --rm cli-validator:$CIRCLE_BUILD_NUM \
|
|
make shellcheck
|
|
- run:
|
|
name: "Lint - build image"
|
|
command: |
|
|
docker build --progress=plain -f dockerfiles/Dockerfile.lint --tag cli-linter:$CIRCLE_BUILD_NUM .
|
|
- run:
|
|
name: "Lint"
|
|
command: |
|
|
docker run --rm cli-linter:$CIRCLE_BUILD_NUM
|
|
|
|
cross:
|
|
working_directory: /work
|
|
docker: [{image: 'docker:18.09-git'}]
|
|
environment:
|
|
DOCKER_BUILDKIT: 1
|
|
parallelism: 3
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 18.09.3
|
|
reusable: true
|
|
exclusive: false
|
|
- run:
|
|
name: "Docker version"
|
|
command: docker version
|
|
- run:
|
|
name: "Docker info"
|
|
command: docker info
|
|
- run:
|
|
name: "Cross - build image"
|
|
command: |
|
|
docker build --progress=plain -f dockerfiles/Dockerfile.cross --tag cli-builder:$CIRCLE_BUILD_NUM .
|
|
- run:
|
|
name: "Cross"
|
|
command: |
|
|
name=cross-$CIRCLE_BUILD_NUM-$CIRCLE_NODE_INDEX
|
|
docker run \
|
|
-e CROSS_GROUP=$CIRCLE_NODE_INDEX \
|
|
--name $name cli-builder:$CIRCLE_BUILD_NUM \
|
|
make cross
|
|
docker cp \
|
|
$name:/go/src/github.com/docker/cli/build \
|
|
/work/build
|
|
- store_artifacts:
|
|
path: /work/build
|
|
|
|
test:
|
|
working_directory: /work
|
|
docker: [{image: 'docker:18.09-git'}]
|
|
environment:
|
|
DOCKER_BUILDKIT: 1
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 18.09.3
|
|
reusable: true
|
|
exclusive: false
|
|
- run:
|
|
name: "Docker version"
|
|
command: docker version
|
|
- run:
|
|
name: "Docker info"
|
|
command: docker info
|
|
- run:
|
|
name: "Unit Test with Coverage - build image"
|
|
command: |
|
|
mkdir -p test-results/unit-tests
|
|
docker build --progress=plain -f dockerfiles/Dockerfile.dev --tag cli-builder:$CIRCLE_BUILD_NUM .
|
|
- run:
|
|
name: "Unit Test with Coverage"
|
|
command: |
|
|
docker run \
|
|
-e GOTESTSUM_JUNITFILE=/tmp/junit.xml \
|
|
--name \
|
|
test-$CIRCLE_BUILD_NUM cli-builder:$CIRCLE_BUILD_NUM \
|
|
make test-coverage
|
|
docker cp \
|
|
test-$CIRCLE_BUILD_NUM:/tmp/junit.xml \
|
|
./test-results/unit-tests/junit.xml
|
|
- run:
|
|
name: "Upload to Codecov"
|
|
command: |
|
|
docker cp \
|
|
test-$CIRCLE_BUILD_NUM:/go/src/github.com/docker/cli/coverage.txt \
|
|
coverage.txt
|
|
apk add -U bash curl
|
|
curl -s https://codecov.io/bash | bash || \
|
|
echo 'Codecov failed to upload'
|
|
- store_test_results:
|
|
path: test-results
|
|
- store_artifacts:
|
|
path: test-results
|
|
|
|
validate:
|
|
working_directory: /work
|
|
docker: [{image: 'docker:18.09-git'}]
|
|
environment:
|
|
DOCKER_BUILDKIT: 1
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 18.09.3
|
|
reusable: true
|
|
exclusive: false
|
|
- run:
|
|
name: "Docker version"
|
|
command: docker version
|
|
- run:
|
|
name: "Docker info"
|
|
command: docker info
|
|
- run:
|
|
name: "Validate - build image"
|
|
command: |
|
|
rm -f .dockerignore # include .git
|
|
docker build --progress=plain -f dockerfiles/Dockerfile.dev --tag cli-builder-with-git:$CIRCLE_BUILD_NUM .
|
|
- run:
|
|
name: "Validate Vendor, Docs, and Code Generation"
|
|
command: |
|
|
docker run --rm cli-builder-with-git:$CIRCLE_BUILD_NUM \
|
|
make ci-validate
|
|
no_output_timeout: 15m
|
|
|
|
workflows:
|
|
version: 2
|
|
ci:
|
|
jobs:
|
|
- lint
|
|
- cross
|
|
- test
|
|
- validate
|