-
Notifications
You must be signed in to change notification settings - Fork 2
/
.gitlab-ci.yml
178 lines (164 loc) · 5.12 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
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
172
173
174
175
176
177
178
# .gitlab-ci.yml
#
# tidechain-client
stages:
- test
- test-tidechain
- build
- publish
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
variables:
GIT_STRATEGY: fetch
GIT_DEPTH: 100
CI_SERVER_NAME: "GitLab CI"
CI_IMAGE: "tidelabs/tidechain-ci:latest"
TIDECHAIN_URL: https://releases.tidefi.io/builds/tidechain/x86_64-debian:stretch/dev/tidechain
default:
cache: {}
.collect-artifacts: &collect-artifacts
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: on_success
expire_in: 28 days
paths:
- ./artifacts/
.docker-env: &docker-env
image: "${CI_IMAGE}"
retry:
max: 2
when:
- runner_system_failure
- unknown_failure
- api_failure
interruptible: true
tags:
- dv-Docker
.compiler-info: &compiler-info
before_script:
- rustup show
- cargo --version
- sccache -s
.auth-github: &auth-github
before_script:
- eval $(ssh-agent)
- ssh-add - <<< ${GITHUB_SSH_PRIV_KEY}
- mkdir ~/.ssh && touch ~/.ssh/known_hosts
- ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
.rules-test: &rules-test # these jobs run always*
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "dev"
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs (Github issues)
- if: $CI_COMMIT_BRANCH =~ /^feat/ # Features
- if: $CI_COMMIT_BRANCH =~ /^chore/ # Chore
- if: $CI_COMMIT_BRANCH =~ /^fix/ # Fix
cargo-fmt:
stage: test
<<: *docker-env
<<: *rules-test
script:
- cargo +nightly --version
- cargo +nightly fmt --all -- --check
allow_failure: true
test-build-linux-stable:
stage: test-tidechain
image: tidelabs/tools:latest
<<: *rules-test
<<: *docker-env
<<: *compiler-info
variables:
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
RUST_TOOLCHAIN: stable
# Enable debug assertions since we are running optimized builds for testing
# but still want to have debug assertions.
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
# Use binary built in previous step
TIDECHAIN_NODE_PATH: "$CI_PROJECT_DIR/tidechain"
script:
- curl $TIDECHAIN_URL --output tidechain --location
- chmod +x tidechain
- test -s ./tidechain || exit 1
- ./scripts/gitlab/test_linux_stable.sh
- sccache -s
spellcheck:
stage: test
<<: *docker-env
<<: *rules-test
script:
- cargo spellcheck --version
# compare with the commit parent to the PR, given it's from a default branch
- git fetch origin +${CI_DEFAULT_BRANCH}:${CI_DEFAULT_BRANCH}
- echo "___Spellcheck is going to check your diff___"
- cargo spellcheck list-files -vvv $(git diff --diff-filter=AM --name-only $(git merge-base ${CI_COMMIT_SHA} ${CI_DEFAULT_BRANCH}))
- time cargo spellcheck check -vvv --cfg=scripts/gitlab/spellcheck.toml --checkers hunspell --code 1
$(git diff --diff-filter=AM --name-only $(git merge-base ${CI_COMMIT_SHA} ${CI_DEFAULT_BRANCH}))
allow_failure: true
build-rustdoc:
stage: build
<<: *docker-env
<<: *rules-test
variables:
SKIP_WASM_BUILD: 1
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}-doc"
when: on_success
expire_in: 7 days
paths:
- ./crate-docs/
script:
# FIXME: it fails with `RUSTDOCFLAGS="-Dwarnings"` and `--all-features`
- time cargo doc -p tidext --verbose --all-features
- rm -f ./target/doc/.lock
- mv ./target/doc ./crate-docs
# FIXME: remove me after CI image gets nonroot
- chown -R nonroot:nonroot ./crate-docs
# Redirect to tidechain_service by default
- echo "<meta http-equiv=refresh content=0;url=tidext/>" > ./crate-docs/index.html
- sccache -s
publish-rustdoc:
stage: publish
#<<: *kubernetes-env
<<: *docker-env
<<: *auth-github
image: tidelabs/tools:latest
variables:
GIT_DEPTH: 100
rules:
- if: $CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_REF_NAME == "dev"
- if: $CI_COMMIT_REF_NAME == "dev"
# `needs:` can be removed after CI image gets nonroot. In this case `needs:` stops other
# artifacts from being dowloaded by this job.
needs:
- job: build-rustdoc
artifacts: true
script:
# Set git config
- git clone "git@github.com:/tidelabs/tidext.git" gh-pages
# Save README and docs
- rm -rf /tmp/doc/
- cp -r ./crate-docs/ /tmp/doc/
- cp README.md /tmp/doc/
# Checkout gh-pages
- pushd gh-pages
- git checkout gh-pages
- git config user.email "tidechain.ci@gmail.com"
- git config user.name "${GITHUB_USER}"
# Remove everything and restore generated docs and README
- rm -rf ./*
- mv /tmp/doc/* .
# Upload files
- git add --all --force
# `git commit` has an exit code of > 0 if there is nothing to commit.
# This causes GitLab to exit immediately and marks this job failed.
# We don't want to mark the entire job failed if there's nothing to
# publish though, hence the `|| true`.
- git commit -m "Updated docs for ${CI_COMMIT_REF_NAME}" ||
echo "___Nothing to commit___"
- git push origin gh-pages --force
- echo "___Rustdoc was successfully published to https://tidelabs.github.io/tidext/___"
after_script:
- rm -rf ./gh-pages
- rm -rf /tmp/doc/