-
Notifications
You must be signed in to change notification settings - Fork 1
/
.gitlab-ci.yml
183 lines (167 loc) · 5.22 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
179
180
181
182
# File: .gitlab-ci.yml
# License: Part of the PIRA proect. Licensed under BSD 3 clause license. See LICENSE.txt file at https://github.com/jplehr/pira/LICENSE.txt
# Description: File to configure our Gitlab CI
# PIRA stages
# download-test and pira unit test are always carried out. For every branch.
stages:
- download-test
- unit-test
- dependence-build-test
- prepare-integration-test
- integration-test
- prepare-release-test
- release-test
# Setting up the environment on the Lichtenberg system
.lb-setup: &lb-setup
- eval $(ssh-agent -s)
- ssh-add ~/.ssh/gitlab_rsa
- module use /home/groups/sc/modules/modulefiles
- module load gcc/8 git clang/9.0 cmake python/3 openmpi
.lb-tear-down: &lb-tear-down
- rm -rf $(dirname $(echo $SSH_AUTH_SOCK))
- ssh-agent -k
# To be executed after the all integration tests have run
# TODO Find a better way to do this.
.rm-bear-directory: &rm-bear-directory
- rm -rf test/integration/bear
# Pull-in the git submodules that are used during development
.get-submodules: &get-submodules
- git submodule init;
- git submodule update extern/src/cgcollector;
- git submodule update extern/src/llvm-instrumenter;
- git submodule update --force extern/src/scorep-mod;
- git submodule update extern/src/PGIS;
# Only test that the submodules configured in here are accessible, so we do not block the Pipeline unneccessary long
# GIT_STRATEGY: clone is used to always start with a clean checkout of the repository.
# GIT_SUBMODULE_STRATEGY: none (default), i.e., git submodules need to be handled manually
download:
stage: download-test
tags:
- hlb0001
before_script: *lb-setup
variables:
GIT_STRATEGY: clone
script:
- *get-submodules
- *lb-tear-down
# Download repositories again, but this time we use git fetch to reduce the amount of time needed to get updates
# (if the repo content after the download stage is still there, if not, clone again).
# Run the automated build script to build all PIRA related software
# This job builds: LLVM-instrumenter, Score-P, CGCollector, Extra-P
build-dependencies:
stage: dependence-build-test
tags:
- hlb0001
before_script: *lb-setup
variables:
GIT_STRATEGY: fetch
script:
- cd resources
- ./remove_builds.sh
- ./build_submodules.sh $(cat /proc/cpuinfo | grep processor | wc -l)
- *lb-tear-down
# Runs the unit tests
# Also uses the GIT_STRATEGY fetch.
# XXX should this be split into multiple, i.e., 1 job per unit test suite?
run-unit-tests:
stage: unit-test
tags:
- hlb0001
before_script: *lb-setup
coverage: /^TOTAL.+?(\d+\%)$/
script:
- export PATH=`pwd`/extern/install/scorep/bin:`pwd`/extern/install/extrap/bin:$PATH
- ./run_tests.sh
- *lb-tear-down
# Runs the larger integration tests
# XXX we might be able to re-use the still-available software builds from the build-dependencies stage?
# This would *significantly* reduce the time this stage requires.
run-prepare-integration:
stage: prepare-integration-test
tags:
- hlb0001
before_script: *lb-setup
variables:
GIT_STRATEGY: none
script:
- cd resources
- ./build_submodules.sh $(cat /proc/cpuinfo | grep processor | wc -l) # This should not do anything, as all dependencies are already built.
- cd ..
- cd test/integration
- . prepare_environment.sh
- *lb-tear-down
# Actually run the integration tests
run-gameoflife-test:
stage: integration-test
tags:
- hlb0001
before_script: *lb-setup
variables:
GIT_STRATEGY: none
script:
- echo 'Running GameOfLife (PIRA II) integration test'
- cd test/integration/GameOfLife
- ./run.sh
- *lb-tear-down
run-amg2013-test:
stage: integration-test
tags:
- hlb0001
before_script: *lb-setup
variables:
GIT_STRATEGY: none
script:
- echo 'Running AMG integration test'
- cd test/integration/AMG2013
- ./run.sh
- *lb-tear-down
run-gameoflife-v1-test:
stage: integration-test
tags:
- hlb0001
before_script: *lb-setup
variables:
GIT_STRATEGY: none
script:
- echo 'Running GameOfLife (PIRA I) integration test'
- cd test/integration/GameOfLifePiraVersion1
- ./run.sh
- *lb-tear-down
# The release tests should only run on release staging branches.
# Uses git clone strategy, to start with a clean working copy of the PIRA repository. This is important for the .tar.gz parts.
# Fetches the dependencies as .tar.gz from github instead of initializing the sub modules
# This is the preferred way (and the one documented in release notes) for end users.
run-release-prepare:
stage: prepare-release-test
tags:
- hlb0001
only:
- /^rel.*$/
before_script: *lb-setup
variables:
GIT_STRATEGY: clone
script:
- cd resources
- ./get_externals.sh
- ./build_submodules.sh $(cat /proc/cpuinfo | grep processor | wc -l) --without-mpi
- *lb-tear-down
# TODO: Split up the two integration tests into multiple jobs
run-release-tests:
stage: release-test
tags:
- hlb0001
only:
- /^rel.*$/
before_script: *lb-setup
variables:
GIT_STRATEGY: none
script:
- ./run_tests.sh
- echo 'Running release tests'
- cd test/integration
- . prepare_environment.sh
- cd GameOfLife
- ./run.sh
- cd ../AMG2013
- ./run.sh
- *lb-tear-down