Test Workflow #690
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 }}" | |
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 }} || 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" | |
mand_regression_test: | |
name: Mandatory Part Regression Test | |
runs-on: ubuntu-latest | |
needs: compilation_test | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: Set up test environment | |
uses: ./.github/actions/setup | |
- name: 🌱 Test source branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh m > ${{ env.HOME }}/source_test_result.txt | |
env: | |
GH_BRANCH: SOURCE_FAILED_COUNT | |
- name: Save tester output to home directory | |
run: mv -f tester_output ${{ env.HOME }} || true | |
- name: 📝 Print all test cases that failed on source branch | |
run: ${{ env.SCRIPTS_DIR }}/print_all_failed_test_cases.sh | |
env: | |
RESULT_FILE: ${{ env.HOME }}/source_test_result.txt | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
- name: Checkout target branch of pull request | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.base_ref }} | |
- name: 🎯 Test target branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh m > ${{ env.HOME }}/target_test_result.txt | |
env: | |
GH_BRANCH: TARGET_FAILED_COUNT | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: 📜 Summarize regression test result | |
uses: ./.github/actions/summary_test_result | |
env: | |
SOURCE_FAILED_COUNT: ${{ env.SOURCE_FAILED_COUNT }} | |
TARGET_FAILED_COUNT: ${{ env.TARGET_FAILED_COUNT }} | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
bonus_regression_test: | |
name: Bonus Part Regression Test | |
runs-on: ubuntu-latest | |
needs: compilation_test | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: Set up test environment | |
uses: ./.github/actions/setup | |
- name: 🌱 Test source branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh b > ${{ env.HOME }}/source_test_result.txt | |
env: | |
GH_BRANCH: SOURCE_FAILED_COUNT | |
- name: Save tester output to home directory | |
run: mv -f tester_output ${{ env.HOME }} || true | |
- name: 📝 Print all test cases that failed on source branch | |
run: ${{ env.SCRIPTS_DIR }}/print_all_failed_test_cases.sh | |
env: | |
RESULT_FILE: ${{ env.HOME }}/source_test_result.txt | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
- name: Checkout target branch of pull request | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.base_ref }} | |
- name: 🎯 Test target branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh b > ${{ env.HOME }}/target_test_result.txt | |
env: | |
GH_BRANCH: TARGET_FAILED_COUNT | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: 📜 Summarize regression test result | |
uses: ./.github/actions/summary_test_result | |
env: | |
SOURCE_FAILED_COUNT: ${{ env.SOURCE_FAILED_COUNT }} | |
TARGET_FAILED_COUNT: ${{ env.TARGET_FAILED_COUNT }} | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
empty_env_regression_test: | |
name: Empty Env Regression Test | |
runs-on: ubuntu-latest | |
needs: compilation_test | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: Set up test environment | |
uses: ./.github/actions/setup | |
- name: 🌱 Test source branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh ne > ${{ env.HOME }}/source_test_result.txt | |
env: | |
GH_BRANCH: SOURCE_FAILED_COUNT | |
- name: Save tester output to home directory | |
run: mv -f tester_output ${{ env.HOME }} || true | |
- name: 📝 Print all test cases that failed on source branch | |
run: ${{ env.SCRIPTS_DIR }}/print_all_failed_test_cases.sh | |
env: | |
RESULT_FILE: ${{ env.HOME }}/source_test_result.txt | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
- name: Checkout target branch of pull request | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.base_ref }} | |
- name: 🎯 Test target branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh ne > ${{ env.HOME }}/target_test_result.txt | |
env: | |
GH_BRANCH: TARGET_FAILED_COUNT | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: 📜 Summarize regression test result | |
uses: ./.github/actions/summary_test_result | |
env: | |
SOURCE_FAILED_COUNT: ${{ env.SOURCE_FAILED_COUNT }} | |
TARGET_FAILED_COUNT: ${{ env.TARGET_FAILED_COUNT }} | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
hardcore_regression_test: | |
name: Hardcore Regression Test | |
runs-on: ubuntu-latest | |
needs: compilation_test | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: Set up test environment | |
uses: ./.github/actions/setup | |
- name: 🌱 Test source branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh d > ${{ env.HOME }}/source_test_result.txt | |
env: | |
GH_BRANCH: SOURCE_FAILED_COUNT | |
- name: Save tester output to home directory | |
run: mv -f tester_output ${{ env.HOME }} || true | |
- name: 📝 Print all test cases that failed on source branch | |
run: ${{ env.SCRIPTS_DIR }}/print_all_failed_test_cases.sh | |
env: | |
RESULT_FILE: ${{ env.HOME }}/source_test_result.txt | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output | |
- name: Checkout target branch of pull request | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.base_ref }} | |
- name: 🎯 Test target branch of pull request | |
run: | | |
make re CC=clang-12 | |
${{ env.TESTER_DIR }}/tester.sh d > ${{ env.HOME }}/target_test_result.txt | |
env: | |
GH_BRANCH: TARGET_FAILED_COUNT | |
- name: Checkout source branch of pull request | |
uses: actions/checkout@v4 | |
- name: 📜 Summarize regression test result | |
uses: ./.github/actions/summary_test_result | |
env: | |
SOURCE_FAILED_COUNT: ${{ env.SOURCE_FAILED_COUNT }} | |
TARGET_FAILED_COUNT: ${{ env.TARGET_FAILED_COUNT }} | |
TESTER_OUTPUT_DIR: ${{ env.HOME }}/tester_output |