Newer
Older
gabriel klawitter
committed
# .gitlab-ci.yml
#
# pipelines can be triggered manually in the web
# setting POLKADOT_BRANCH to v0.2 will result in a poc2 build
# setting DEPLOY_TAG will only deploy the tagged image
gabriel klawitter
committed
- publish
- deploy
gabriel klawitter
committed
# default release in rust:nightly image is stable
image: parity/rust:nightly
variables:
CI_SERVER_NAME: "GitLab CI"
CARGO_HOME: "${CI_PROJECT_DIR}/.cargo"
gabriel klawitter
committed
SUBSTRATE_REPO: "https://github.com/paritytech/substrate.git"
.collect_artifacts: &collect_artifacts
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: on_success
expire_in: 7 days
paths:
gabriel klawitter
committed
- target/release/
.kubernetes_build: &kubernetes_build
tags:
- kubernetes-parity-build
environment:
name: gke-build
gabriel klawitter
committed
# disabled as there are bugs
# before_script:
# - ./scripts/build.sh
#### stage: merge-test
check:merge:conflict:
stage: merge-test
image: parity/tools:latest
cache: {}
<<: *kubernetes_build
only:
- /^[0-9]+$/
variables:
GITHUB_API: "https://api.github.com"
GITLAB_API: "https://gitlab.parity.io/api/v4"
GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api"
script:
- ./scripts/gitlab/check_merge_conflict.sh
gabriel klawitter
committed
# test will be run for ci on the current repo
# for version v0.2 branch tests are located in substrate repository and
# therefore not generically testable
test:rust:release:
cache:
key: "${CI_JOB_NAME}-test"
paths:
- ${CARGO_HOME}
- ./target
only:
- triggers
- tags
- master
- schedules
- web
gabriel klawitter
committed
- /^[0-9]+$/
except:
variables:
- $POLKADOT_BRANCH == "v0.2"
- $DEPLOY_TAG
gabriel klawitter
committed
- rust
script:
- time cargo test --all --release --verbose
gabriel klawitter
committed
build:rust:linux:release:
cache:
key: "${CI_JOB_NAME}-build"
paths:
- ${CARGO_HOME}
- ./target
gabriel klawitter
committed
<<: *collect_artifacts
only:
- master
- tags
- web
except:
variables:
- $DEPLOY_TAG
tags:
- rust
gabriel klawitter
committed
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
- >
set -x;
if [ "${POLKADOT_BRANCH}" = "v0.2" ]; then
if [ -z "${TAG}" ]; then
time cargo install --verbose --root ./target/release/ --git "${SUBSTRATE_REPO}" --branch "${POLKADOT_BRANCH}" polkadot;
else
time cargo install --verbose --root ./target/release/ --git "${SUBSTRATE_REPO}" --tag "${TAG}" polkadot;
fi;
mv ./target/release/bin/polkadot ./target/release/polkadot;
rm -d ./target/release/bin;
else
time cargo build --release --verbose;
fi;
set +x
- ./target/release/polkadot --version
dockerize:release:
stage: publish
dependencies:
- build:rust:linux:release
cache: {}
only:
- master
- tags
- web
except:
variables:
- $DEPLOY_TAG
tags:
- shell
variables:
DOCKERFILE: scripts/docker/Dockerfile
CONTAINER_IMAGE: parity/polkadot
before_script:
- test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity"
|| ( echo "no docker credentials provided"; exit 1 )
- docker login -u "$Docker_Hub_User_Parity" -p "$Docker_Hub_Pass_Parity"
- docker info
- VERSION="$(./target/release/polkadot --version | sed -n -r 's/^polkadot ([0-9.]+-[0-9a-f]+)-.*$/\1/p')"
- export VERSION
- echo "Polkadot version = ${VERSION}"
script:
- test -z "${VERSION}" && exit 1
- docker build --tag $CONTAINER_IMAGE:$VERSION --tag $CONTAINER_IMAGE:latest -f $DOCKERFILE ./target/release/
- docker push $CONTAINER_IMAGE:$VERSION
- docker push $CONTAINER_IMAGE:latest
- rm -f ./target/release/polkadot
- echo "${VERSION}" > ./target/release/VERSION
after_script:
- docker logout
# use artifacts here to transport the version to the next stage
gabriel klawitter
committed
.deploy:template: &deploy
stage: deploy
when: manual
cache: {}
retry: 1
image: dtzar/helm-kubectl:$HELM_VERSION
gabriel klawitter
committed
- web
# this is the runner that is used to deploy it
- kubernetes-parity-build
gabriel klawitter
committed
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
before_script:
- test -z "${DEPLOY_TAG}" &&
test -f ./target/release/VERSION &&
DEPLOY_TAG="$(cat ./target/release/VERSION)"
- test "${DEPLOY_TAG}" || ( echo "Neither DEPLOY_TAG nor VERSION information available"; exit 1 )
script:
- echo "Polkadot version = ${DEPLOY_TAG}"
# or use helm to render the template
- helm template
--values ./scripts/kubernetes/values.yaml
--set image.tag=${DEPLOY_TAG}
./scripts/kubernetes | kubectl apply -f - --dry-run=true
- echo "# polkadot namespace"
- kubectl -n polkadot get all
- echo "# polkadot's nodes' external ip addresses:"
- kubectl get nodes -l node=polkadot
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range @.status.addresses[?(@.type=="ExternalIP")]}{.address}{"\n"}{end}'
- echo "# polkadots' nodes"
- kubectl -n polkadot get pods
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\n"}{end}'
# have environment:url eventually point to the logs
deploy:ew3:
<<: *deploy
environment:
gabriel klawitter
committed
deploy:ue1:
<<: *deploy
environment:
gabriel klawitter
committed