1+ stages :
2+ - test
3+ - build and push
4+ - manifests
5+ - release
6+
7+ .common_build : &common_build
8+ image : docker:stable
9+ stage : build and push
10+ variables :
11+ DOCKER_HOST : tcp://docker:2375/
12+ DOCKER_DRIVER : overlay2
13+ services :
14+ - docker:dind
15+ except :
16+ - tags
17+ only :
18+ changes :
19+ - " Dockerfile*"
20+ - Varken.py
21+ - varken/*
22+ - .gitlab-ci.yml
23+ before_script :
24+ - mkdir $HOME/.docker
25+ - echo '{"experimental":"enabled"}' > $HOME/.docker/config.json
26+ - if [[ $CI_COMMIT_REF_NAME == "master" ]]; then
27+ export TAG=$(grep -i version varken/__init__.py | cut -d \ -f3 | tr -d \");
28+ else
29+ export TAG="develop";
30+ fi
31+ - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USER" --password-stdin
32+ - export CI_PROJECT_PATH=$(echo $CI_PROJECT_PATH | tr "[:upper:]" "[:lower:]")
33+
34+ .common_release : &common_release
35+ << : *common_build
36+ tags :
37+ - docker
38+ - shared
39+ only :
40+ refs :
41+ - master
42+
43+ flake8 :
44+ image : python:3.7.3-alpine
45+ stage : test
46+ cache :
47+ key : " varken-cache"
48+ paths :
49+ - .cache/pip
50+ - venv/
51+ variables :
52+ PIP_CACHE_DIR : " $CI_PROJECT_DIR/.cache/pip"
53+ tags :
54+ - shared
55+ before_script :
56+ - python -m venv venv
57+ - source venv/bin/activate
58+ - pip install -U flake8
59+ script :
60+ - flake8 --max-line-length 120 Varken.py varken/*.py
61+
62+ amd64 :
63+ << : *common_build
64+ tags :
65+ - docker
66+ - shared
67+ script :
68+ - docker build --pull
69+ --cache-from "$CI_PROJECT_PATH":"$TAG-amd64"
70+ -t "$CI_PROJECT_PATH":"$TAG-amd64" .
71+ - docker push "$CI_PROJECT_PATH":"$TAG-amd64"
72+
73+ armv6 :
74+ << : *common_build
75+ tags :
76+ - docker
77+ - arm
78+ script :
79+ - docker build --pull
80+ --cache-from "$CI_PROJECT_PATH":"$TAG-arm"
81+ -t "$CI_PROJECT_PATH":"$TAG-arm"
82+ -f Dockerfile.arm .
83+ - docker push "$CI_PROJECT_PATH":"$TAG-arm"
84+
85+ arm64v8 :
86+ << : *common_build
87+ tags :
88+ - docker
89+ - arm64
90+ script :
91+ - docker build --pull
92+ --cache-from "$CI_PROJECT_PATH":"$TAG-arm64"
93+ -t "$CI_PROJECT_PATH":"$TAG-arm64"
94+ -f Dockerfile.arm64 .
95+ - docker push "$CI_PROJECT_PATH":"$TAG-arm64"
96+
97+ versioned :
98+ << : *common_build
99+ stage : manifests
100+ tags :
101+ - docker
102+ - shared
103+ script :
104+ - docker manifest create "$CI_PROJECT_PATH":"$TAG"
105+ " $CI_PROJECT_PATH" :"$TAG-amd64"
106+ " $CI_PROJECT_PATH" :"$TAG-arm64"
107+ " $CI_PROJECT_PATH" :"$TAG-arm"
108+ - docker manifest push -p "$CI_PROJECT_PATH":"$TAG"
109+
110+ latest :
111+ << : *common_release
112+ stage : manifests
113+ tags :
114+ - docker
115+ script :
116+ - docker manifest create "$CI_PROJECT_PATH":latest
117+ " $CI_PROJECT_PATH" :"$TAG-amd64"
118+ " $CI_PROJECT_PATH" :"$TAG-arm64"
119+ " $CI_PROJECT_PATH" :"$TAG-arm"
120+ - docker manifest push -p "$CI_PROJECT_PATH":latest
121+
122+ .github :
123+ << : *common_release
124+ stage : release
125+ script :
126+ - apk add git
127+ -
git remote set-url origin "https://$GITHUB_USER:[email protected] /$CI_PROJECT_PATH".git" 128+ - git tag $TAG
129+ - git push --tags
0 commit comments