Varken/.gitlab-ci.yml
2020-01-02 10:22:15 -06:00

128 lines
No EOL
2.9 KiB
YAML

stages:
- test
- build and push
- manifests
- release
.common_build: &common_build
image: docker:stable
stage: build and push
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
except:
- tags
only:
changes:
- "Dockerfile*"
- Varken.py
- varken/*
- .gitlab-ci.yml
before_script:
- mkdir $HOME/.docker
- echo '{"experimental":"enabled"}' > $HOME/.docker/config.json
- if [[ $CI_COMMIT_REF_NAME == "master" ]]; then
export TAG=$(grep -i version varken/__init__.py | cut -d \ -f3 | tr -d \");
else
export TAG="develop";
fi
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USER" --password-stdin
- export CI_PROJECT_PATH=$(echo $CI_PROJECT_PATH | tr "[:upper:]" "[:lower:]")
.common_release: &common_release
<<: *common_build
tags:
- docker
- shared
only:
refs:
- master
flake8:
image: python:3.7.3-alpine
stage: test
cache:
key: "varken-cache"
paths:
- .cache/pip
- venv/
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
tags:
- shared
before_script:
- python -m venv venv
- source venv/bin/activate
- pip install -U flake8
script:
- flake8 --max-line-length 120 Varken.py varken/*.py
amd64:
<<: *common_build
tags:
- docker
- shared
script:
- docker build --pull
--cache-from "$CI_PROJECT_PATH":"$TAG-amd64"
-t "$CI_PROJECT_PATH":"$TAG-amd64" .
- docker push "$CI_PROJECT_PATH":"$TAG-amd64"
armv6:
<<: *common_build
tags:
- docker
- arm
script:
- docker build --pull
--cache-from "$CI_PROJECT_PATH":"$TAG-arm"
-t "$CI_PROJECT_PATH":"$TAG-arm"
-f Dockerfile.arm .
- docker push "$CI_PROJECT_PATH":"$TAG-arm"
arm64v8:
<<: *common_build
tags:
- docker
- arm64
script:
- docker build --pull
--cache-from "$CI_PROJECT_PATH":"$TAG-arm64"
-t "$CI_PROJECT_PATH":"$TAG-arm64"
-f Dockerfile.arm64 .
- docker push "$CI_PROJECT_PATH":"$TAG-arm64"
versioned:
<<: *common_build
stage: manifests
tags:
- docker
- shared
script:
- docker manifest create "$CI_PROJECT_PATH":"$TAG"
"$CI_PROJECT_PATH":"$TAG-amd64"
"$CI_PROJECT_PATH":"$TAG-arm64"
"$CI_PROJECT_PATH":"$TAG-arm"
- docker manifest push -p "$CI_PROJECT_PATH":"$TAG"
latest:
<<: *common_release
stage: manifests
tags:
- docker
script:
- docker manifest create "$CI_PROJECT_PATH":latest
"$CI_PROJECT_PATH":"$TAG-amd64"
"$CI_PROJECT_PATH":"$TAG-arm64"
"$CI_PROJECT_PATH":"$TAG-arm"
- docker manifest push -p "$CI_PROJECT_PATH":latest
github:
<<: *common_release
stage: release
script:
- apk add git
- git remote set-url origin "https://$GITHUB_USER:$GITHUB_TOKEN@github.com/$CI_PROJECT_PATH.git"
- git tag $TAG
- git push --tags