Skip to content

[REFACTOR] Exit for SIGPIPE signal without leaks #587

[REFACTOR] Exit for SIGPIPE signal without leaks

[REFACTOR] Exit for SIGPIPE signal without leaks #587

Workflow file for this run

# .github/workflows/test.yaml
name: Test Workflow
on:
pull_request:
workflow_dispatch:
push:
tags:
- 'v*'
branches:
- main
- evaluation
env:
home: /home/runner
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
- name: Prepare matrix
id: prep_matrix
run: |
FILES=$(find 42_minishell_tester/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.home }}/42_minishell_tester/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.home }}/42_minishell_tester/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.home }}/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.home }}/42_minishell_tester/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.home }}/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.home }}/42_minishell_tester/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.home }}/42_minishell_tester/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.home }}/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.home }}/42_minishell_tester/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.home }}/42_minishell_tester/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.home }}/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.home }}/42_minishell_tester/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.home }}/42_minishell_tester/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.home }}/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.home }}/42_minishell_tester/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