-
Notifications
You must be signed in to change notification settings - Fork 3
169 lines (160 loc) · 5.06 KB
/
test.yaml
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
# .github/workflows/test.yaml
name: Test Workflow
on:
pull_request:
workflow_dispatch:
push:
tags:
- 'v*'
branches:
- main
- evaluation
env:
HOME: /home/runner
TESTER_DIR: /home/runner/42_minishell_tester
SCRIPTS_DIR: /home/runner/scripts
jobs:
compilation_test:
name: Compilation Test
runs-on: ubuntu-latest
timeout-minutes: 2
strategy:
fail-fast: false
matrix:
compiler: [gcc, clang, clang-12]
steps:
- name: Checkout source branch of pull request
uses: actions/checkout@v4
- name: Set up test environment
uses: ./.github/actions/setup
- name: 🔨 Compile with Makefile
run: make CC="${{ matrix.compiler }}"
combine_compilation_test_results:
name: Combine Compilation Test Results
needs: compilation_test
runs-on: ubuntu-latest
steps:
- name: Combine compilation test results
run: echo "All compilation tests finished"
prepare_test_matrix:
name: Prepare Test Matrix
needs: compilation_test
runs-on: ubuntu-latest
outputs:
test_matrix: ${{ steps.prep_matrix.outputs.TEST_MATRIX }}
steps:
- name: Clone tester repository
run: git clone https://github.com/LeaYeh/42_minishell_tester.git ${{ env.TESTER_DIR }}
- name: Prepare matrix
id: prep_matrix
run: |
FILES=$(find ${{ env.TESTER_DIR }}/cmds/**/*.sh \
-exec basename {} \; | jq -R -s -c 'split("\n")[:-1]')
echo "TEST_MATRIX=${FILES}" >> "$GITHUB_OUTPUT"
memory_leak_test:
name: Memory Leak Test
needs: prepare_test_matrix
runs-on: ubuntu-latest
timeout-minutes: 5
strategy:
fail-fast: false
matrix:
test_script: ${{ fromJson(needs.prepare_test_matrix.outputs.test_matrix) }}
env:
TESTER_OUTPUT_DIR: /home/runner/tester_output
LOG_FILE: /home/runner/leak_test.log
steps:
- name: Checkout source branch of pull request
uses: actions/checkout@v4
- name: Set up test environment
uses: ./.github/actions/setup
with:
tester_dir: ${{ env.TESTER_DIR }}
scripts_dir: ${{ env.SCRIPTS_DIR }}
- name: Delete all but one test script
run: |
for file in ${{ env.TESTER_DIR }}/cmds/**/*.sh; do
if [[ "$(basename "$file")" != "${{ matrix.test_script }}" ]]; then
rm "$file"
fi
done
- name: 💧 Check for memory leaks
run: |
make re CC=clang-12
${{ env.TESTER_DIR }}/tester.sh --no-update va > ${{ env.LOG_FILE }}
env:
GH_BRANCH: IGNORE
continue-on-error: true
- name: Save tester output
run: mv -f mstest_output* ${{ env.TESTER_OUTPUT_DIR }} || true
- name: 📝 Print all test cases that leaked on source branch
run: ${{ env.SCRIPTS_DIR }}/print_failed_test_cases.sh -v
combine_memory_leak_test_results:
name: Combine Memory Leak Test Results
needs: memory_leak_test
runs-on: ubuntu-latest
steps:
- name: Combine memory leak test results
run: echo "All memory leak tests finished"
crash_test:
name: Crash Test
needs: compilation_test
runs-on: ubuntu-latest
timeout-minutes: 5
strategy:
fail-fast: false
matrix:
test_mode: [a, a --no-env]
env:
TESTER_OUTPUT_DIR: /home/runner/tester_output
LOG_FILE: /home/runner/crash_test.log
steps:
- name: Checkout source branch of pull request
uses: actions/checkout@v4
- name: Set up test environment
uses: ./.github/actions/setup
with:
tester_dir: ${{ env.TESTER_DIR }}
scripts_dir: ${{ env.SCRIPTS_DIR }}
- name: 💥 Check for crashes
run: |
make re CC=clang-12
${{ env.TESTER_DIR }}/tester.sh --no-update ${{ matrix.test_mode }} > ${{ env.LOG_FILE }}
env:
GH_BRANCH: IGNORE
continue-on-error: true
- name: Save tester output
run: mv -f mstest_output* ${{ env.TESTER_OUTPUT_DIR }} || true
- name: 📝 Print all test cases that crashed on source branch
run: ${{ env.SCRIPTS_DIR }}/print_failed_test_cases.sh -c
combine_crash_test_results:
name: Combine Crash Test Results
needs: crash_test
runs-on: ubuntu-latest
steps:
- name: Combine crash test results
run: echo "All crash tests finished"
regression_test:
name: Regression Test
needs: compilation_test
strategy:
fail-fast: false
matrix:
include:
- test_mode: m
test_name: Mandatory Part
- test_mode: b
test_name: Bonus Part
- test_mode: ne
test_name: Empty Env
uses: ./.github/workflows/regression_test.yaml
with:
test_mode: ${{ matrix.test_mode }}
test_name: ${{ matrix.test_name }}
combine_regression_test_results:
name: Combine Regression Test Results
needs: regression_test
runs-on: ubuntu-latest
steps:
- name: Combine regression test results
run: echo "All regression tests finished"