Merge pull request #368 from LeaYeh/ci-reusable-workflow #680
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# .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: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
test_script: ${{ fromJson(needs.prepare_test_matrix.outputs.test_matrix) }} | |
steps: | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: Set up test environment | |
uses: ./.github/actions/setup | |
- 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 memory leaks | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh va > ${{ env.HOME }}/leak_result.txt | |
env: | |
GH_BRANCH: IGNORE | |
continue-on-error: true | |
- name: Save tester output to home directory | |
run: mv -f tester_output* ${{ env.HOME }}/tester_output || true | |
- name: 📝 Print all test cases that leaked on source branch | |
run: ${{ env.SCRIPTS_DIR }}/print_leak_test_cases.sh | |
env: | |
RESULT_FILE: ${{ env.HOME }}/leak_result.txt | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
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" | |
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 | |
- test_mode: d | |
test_name: Hardcore | |
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" |