-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
iutest.cue
137 lines (125 loc) · 4.1 KB
/
iutest.cue
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
package iutest
// 必要なパッケージをインポートする
// docker alpine image でビルドするのでそれらをインポート
import (
"dagger.io/dagger"
"dagger.io/dagger/core"
"universe.dagger.io/alpine"
"universe.dagger.io/bash"
"universe.dagger.io/docker"
)
// cmake_build_dir は mounts して cache する
// テスト結果を client に書き出したいので mounts path 以外にテスト結果を出力する
// mounts 配下の path を client に write する方法は不明
iutest_root_dir: "/iutest"
test_result_dir: "/iutest/TestResults"
cmake_build_dir: "/dagger-cmake-build"
// パイプラインは Plan に書く
dagger.#Plan & {
// 共通設定をまとめておく
_cmakeBuildDirConfig: {
// cmake での out-of-source build のパスをマウント
mounts: (cmake_build_dir): {
dest: (cmake_build_dir)
type: "cache"
contents: core.#CacheDir & {
id: "iutest-cmake-builddir-cache"
}
}
// 作業ディレクトリを out-of-source build のパスにセット
workdir: mounts[(cmake_build_dir)].dest
// 必要な環境変数をセット
env: {
// string は () で囲んで展開する
IUTEST_ROOT_DIR: (iutest_root_dir)
// 文字列の中で変数展開する場合は ( をエスケープする
IUTEST_OUTPUT_DIR: "\(test_result_dir)"
}
}
// dagger の実行環境定義
client: {
filesystem: {
"./": read: {
contents: dagger.#FS
exclude: [
"README.md",
"build",
"cmake-build",
"dagger-out",
".ci",
".circleci",
".git",
".github",
".idea",
".semaphore",
".vscode",
"cue.mod",
]
}
// ctest の結果を client に書き出し
"./dagger-out/TestResults": write: contents: actions.ctest.contents.output
}
}
actions: {
// build alpine image
deps: docker.#Build & {
steps: [
alpine.#Build & {
// iutest のビルドに必要な追加パッケージ
packages: {
bash: _
make: _
cmake: _
"g++": _
clang: _
}
},
// client から container に copy
docker.#Copy & {
contents: client.filesystem."./".read.contents
dest: (iutest_root_dir)
},
]
}
// cmake generate project
cmake: bash.#Run & {
_cmakeBuildDirConfig
input: deps.output
script: contents: """
cmake "${IUTEST_ROOT_DIR}/projects/cmake" -DTEST_OUTPUT_DIR=${IUTEST_OUTPUT_DIR}
"""
}
// cmake build
cmake_build: bash.#Run & {
_cmakeBuildDirConfig
input: cmake.output
script: contents: """
cmake --build . -j 4
"""
}
// ctest
ctest: {
run: bash.#Run & {
_cmakeBuildDirConfig
input: cmake_build.output
script: contents: """
rm -rf "${IUTEST_OUTPUT_DIR}"
mkdir -p "${IUTEST_OUTPUT_DIR}"
ctest -C Debug --output-on-failure || :
"""
exit: 0
}
test_result: bash.#Run & {
input: run.output
workdir: (test_result_dir)
script: contents: """
ls
"""
}
contents: core.#Subdir & {
input: test_result.output.rootfs
path: (test_result_dir)
}
}
}
}