-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
.gitlab-ci.yml
125 lines (115 loc) · 6.75 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
# Copyright © 2020-2021 Jeremy Carter <jeremy@jeremycarter.ca>
#
# By using this software, you agree to the LICENSE TERMS
# outlined in the file titled LICENSE.md contained in the
# top-level directory of this project. If you don't agree
# to the LICENSE TERMS, you aren't allowed to use this
# software.
# The GitLab CI/CD pipeline configuration lives in this
# file.
image: "rust:latest"
# NOTE: Install some compilers and build tools if necessary.
# You may need this if your project depends on C code.
# before_script:
# - apt-get update
# - apt-get install -y build-essential
# These are the GitLab CI/CD pipeline stages we want to run.
stages:
- test
- docs
- debug-linux-x86_64
- debug-windows-x86_64
- release-linux-x86_64
- release-windows-x86_64
# Pipeline "test" stage - Use cargo to test the project, and kcov to generate a
# test coverage report.
test:
stage: test
script:
- apt-get update && apt-get install -y lsb-release bash binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev build-essential cmake
- lsb_release -a
- git clone https://github.com/SimonKagstrom/kcov.git
- cd kcov && mkdir build && cd build && cmake .. && make -j2 && make install && cd ../..
- rustc --version && cargo --version # Display rustc and cargo versions.
- RUSTFLAGS='-C link-dead-code' cargo test --workspace --verbose # Run the project's test suite with cargo. If any of these tests fail, we stop here.
- for i in `ls -rt target/debug/deps/signal_gen_cjds66_lib-* | sed '/\./d' | tail -n 1`; do kcov --exclude-pattern=/usr target/cov $i; done # Generate the test coverage report with kcov for library.
- for i in `find target/cov -maxdepth 1 -type l`; do unlink $i; done # Remove bad symlinks which are made by kcov for some reason.
- "COVERAGE=$(grep -Po 'percent_covered\":\\s+\\\"\\d+.\\d+\\\"' target/cov/signal_gen_cjds66_lib*/coverage.json | grep -Po '\\d+.\\d+' | tail -n 1)"
- echo "Coverage:" $COVERAGE # Output the amount of test coverage in percent. This exact output format is expected by a setting we set on the GitLab CI/CD website.
artifacts:
expire_in: never # Keep this stage's output artifacts forever.
paths: # The files found at these paths will be added to the artifacts archive for this pipeline stage.
- target/cov
# Pipeline "docs" stage - Use cargo to auto-generate the docs for this project.
docs:
stage: docs
needs: [ # Wait for a previous stage to finish before running this stage.
"test",
]
script:
- rustc --version && cargo --version # Display rustc and cargo versions.
- cargo doc --workspace --verbose # Generate the project's docs with the cargo doc command.
artifacts:
expire_in: never # Keep this stage's output artifacts forever.
paths: # The files found at these paths will be added to the artifacts archive for this pipeline stage.
- target/doc
# Pipeline "debug-linux-x86_64" stage - Use cargo to build the Linux x86_64 debug binary for this project.
debug-linux-x86_64:
stage: debug-linux-x86_64
needs: [ # Wait for a previous stage to finish before running this stage.
"test",
]
script:
- rustc --version && cargo --version # Display rustc and cargo versions.
- RUSTFLAGS="--emit asm -C llvm-args=-x86-asm-syntax=intel --emit obj" cargo build --verbose # Build the project with the cargo build command.
artifacts:
expire_in: never # Keep this stage's output artifacts forever.
paths: # The files found at these paths will be added to the artifacts archive for this pipeline stage.
- target/debug
# Pipeline "debug-windows-x86_64" - Use cargo to build the cross-compiled Windows x86_64 debug binary for this project.
debug-windows-x86_64:
stage: debug-windows-x86_64
needs: [ # Wait for a previous stage to finish before running this stage.
"test",
]
script:
- apt-get update && apt-get install -y mingw-w64 # Install the mingw-w64 cross-compiler toolchain so we can build Windows binaries from Linux.
- rustup target add x86_64-pc-windows-gnu # Add the mingw-w64 Rust target to cargo with the rustup command.
- rustup toolchain install stable-x86_64-pc-windows-gnu # Install the Rust Windows cross-compiling tools for cargo with the rustup command.
- rustc --version && cargo --version # Display rustc and cargo versions.
- RUSTFLAGS="--emit asm -C llvm-args=-x86-asm-syntax=intel --emit obj" cargo build --target x86_64-pc-windows-gnu --verbose # Cross-compile the project for Windows, from Linux, with the cargo build command.
artifacts:
expire_in: never # Keep this stage's output artifacts forever.
paths: # The files found at these paths will be added to the artifacts archive for this pipeline stage.
- target/x86_64-pc-windows-gnu/debug
# Pipeline "release-linux-x86_64" stage - Use cargo to build the Linux x86_64 release binary for this project.
release-linux-x86_64:
stage: release-linux-x86_64
needs: [ # Wait for a previous stage to finish before running this stage.
"test",
]
script:
- rustc --version && cargo --version # Display rustc and cargo versions.
- RUSTFLAGS="--emit asm -C llvm-args=-x86-asm-syntax=intel --emit obj" cargo build --release --verbose # Build the project with the cargo build command.
- strip -s target/release/signal-gen-cjds66
artifacts:
expire_in: never # Keep this stage's output artifacts forever.
paths: # The files found at these paths will be added to the artifacts archive for this pipeline stage.
- target/release
# Pipeline "release-windows-x86_64" - Use cargo to build the cross-compiled Windows x86_64 release binary for this project.
release-windows-x86_64:
stage: release-windows-x86_64
needs: [ # Wait for a previous stage to finish before running this stage.
"test",
]
script:
- apt-get update && apt-get install -y mingw-w64 # Install the mingw-w64 cross-compiler toolchain so we can build Windows binaries from Linux.
- rustup target add x86_64-pc-windows-gnu # Add the mingw-w64 Rust target to cargo with the rustup command.
- rustup toolchain install stable-x86_64-pc-windows-gnu # Install the Rust Windows cross-compiling tools for cargo with the rustup command.
- rustc --version && cargo --version # Display rustc and cargo versions.
- RUSTFLAGS="--emit asm -C llvm-args=-x86-asm-syntax=intel --emit obj" cargo build --release --target x86_64-pc-windows-gnu --verbose # Cross-compile the project for Windows, from Linux, with the cargo build command.
- strip -s target/x86_64-pc-windows-gnu/release/signal-gen-cjds66.exe
artifacts:
expire_in: never # Keep this stage's output artifacts forever.
paths: # The files found at these paths will be added to the artifacts archive for this pipeline stage.
- target/x86_64-pc-windows-gnu/release