forked from paritytech/substrate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
143 lines (112 loc) · 3.38 KB
/
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# .gitlab-ci.yml
#
stages:
- test
- build
- publish
image: parity/rust:nightly
variables:
CI_SERVER_NAME: "GitLab CI"
CARGO_HOME: "${CI_PROJECT_DIR}/.cargo"
# have OS based build containers in the future
DOCKER_OS: "ubuntu:xenial"
ARCH: "x86_64"
cache:
key: "${CI_JOB_NAME}"
paths:
- ./.cargo/
.collect_artifacts: &collect_artifacts
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: on_success
expire_in: 7 days
paths:
- artifacts/
#### stage: test
test:rust:stable: &test
stage: test
variables:
RUST_TOOLCHAIN: stable
TARGET: native
only:
- triggers
- tags
- master
- schedules
- web
- /^pr-[0-9]+$/
- /^[0-9]+$/
tags:
- linux-docker
before_script:
- ./scripts/build.sh
script:
- time cargo test --all --release --verbose --locked
.optional_test: &optional_test
<<: *test
allow_failure: true
only:
- master
#### stage: build
build:rust:linux:release: &build
stage: build
<<: *collect_artifacts
only:
- master
- tags
- web
tags:
- linux-docker
before_script:
- ./scripts/build.sh
script:
- time cargo build --release --verbose;
- mkdir -p ./artifacts
- mv ./target/release/substrate ./artifacts/.
- echo -n "Substrate version = "
- ./artifacts/substrate --version |
sed -n -r 's/^substrate ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p' |
tee ./artifacts/VERSION
- sha256sum ./artifacts/substrate | tee ./artifacts/substrate.sha256
#### stage: publish
.publish: &publish
stage: publish
dependencies:
- build:rust:linux:release
cache: {}
only:
- master
- tags
- web
publish:docker:release:
<<: *publish
tags:
- shell
variables:
GIT_STRATEGY: none
DOCKERFILE: scripts/docker/Dockerfile
CONTAINER_IMAGE: parity/substrate
script:
- VERSION="$(cat ./artifacts/VERSION)"
- 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
- docker build --tag $CONTAINER_IMAGE:$VERSION --tag $CONTAINER_IMAGE:latest -f $DOCKERFILE ./artifacts/
- docker push $CONTAINER_IMAGE:$VERSION
- docker push $CONTAINER_IMAGE:latest
after_script:
- docker logout
publish:s3:release:
<<: *publish
image: parity/awscli:latest
variables:
GIT_STRATEGY: none
BUCKET: "releases.parity.io"
PREFIX: "substrate/${ARCH}-${DOCKER_OS}"
script:
- aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/$(cat ./artifacts/VERSION)/
after_script:
- aws s3 ls s3://${BUCKET}/${PREFIX}/
tags:
- linux-docker