[1.x] Replace GLOB_BRACE
with more robust solutions
#13217
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
name: 🔥 Parallel Smoke Tests | |
on: | |
pull_request: | |
jobs: | |
run-smoke-tests: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
path: src | |
- name: Cache Composer packages | |
id: composer-cache | |
uses: actions/cache@v4 | |
with: | |
path: src/vendor | |
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} | |
restore-keys: | | |
${{ runner.os }}-php- | |
- name: Install Composer Dependencies | |
run: | | |
cd src && composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist | |
- name: Prepare test directories | |
run: | | |
setup_directory() { | |
local suite=$1 | |
mkdir -p "${suite}_tests" | |
cp -al src/. "${suite}_tests/" | |
} | |
# Create hard links for all suites | |
for suite in unit feature_hyde feature_framework publications realtime_compiler; do | |
setup_directory $suite | |
done | |
# Move the .git directory out of src | |
mv src/.git . | |
- name: Execute Tests in Parallel | |
run: | | |
mkdir -p test_results | |
mkdir -p test_outputs | |
# Function to run tests | |
run_tests() { | |
local suite=$1 | |
local testsuite=$2 | |
echo "${suite^} tests started" | |
cd ${suite}_tests | |
if vendor/bin/pest --colors=always --compact --log-junit="../test_results/${suite}_junit.xml" --testsuite="$testsuite" > "../test_outputs/${suite}.log" 2>&1; then | |
echo "${suite^} tests completed successfully" | |
else | |
echo "${suite^} tests failed" | |
return 1 | |
fi | |
} | |
# Run tests in parallel and capture exit codes | |
run_tests unit UnitFramework & pid1=$! | |
run_tests feature_hyde FeatureHyde & pid2=$! | |
run_tests feature_framework FeatureFramework & pid3=$! | |
run_tests publications Publications & pid4=$! | |
run_tests realtime_compiler "Realtime Compiler" & pid5=$! | |
# Wait for all background jobs to finish and capture exit codes | |
wait $pid1 || echo "Unit tests failed" >> test_failures | |
wait $pid2 || echo "Feature Hyde tests failed" >> test_failures | |
wait $pid3 || echo "Feature Framework tests failed" >> test_failures | |
wait $pid4 || echo "Publications tests failed" >> test_failures | |
wait $pid5 || echo "Realtime Compiler tests failed" >> test_failures | |
# Check if any tests failed | |
if [ -f test_failures ]; then | |
echo "The following test suites failed:" | |
cat test_failures | |
exit 1 | |
fi | |
- name: Display Unit Tests Output | |
if: always() | |
run: | | |
cat test_outputs/unit.log | |
grep -q "Unit tests failed" test_failures && exit 1 || exit 0 | |
- name: Display Feature Hyde Tests Output | |
if: always() | |
run: | | |
cat test_outputs/feature_hyde.log | |
grep -q "Feature Hyde tests failed" test_failures && exit 1 || exit 0 | |
- name: Display Feature Framework Tests Output | |
if: always() | |
run: | | |
cat test_outputs/feature_framework.log | |
grep -q "Feature Framework tests failed" test_failures && exit 1 || exit 0 | |
- name: Display Publications Tests Output | |
if: always() | |
run: | | |
cat test_outputs/publications.log | |
grep -q "Publications tests failed" test_failures && exit 1 || exit 0 | |
- name: Display Realtime Compiler Tests Output | |
if: always() | |
run: | | |
cat test_outputs/realtime_compiler.log | |
grep -q "Realtime Compiler tests failed" test_failures && exit 1 || exit 0 | |
- name: Merge JUnit XML Reports | |
if: always() | |
run: | | |
php -r ' | |
$files = glob("test_results/*_junit.xml"); | |
$totalTests = $totalAssertions = $totalTime = 0; | |
foreach ($files as $file) { | |
$xml = simplexml_load_file($file); | |
$totalTests += (int)$xml->testsuite["tests"]; | |
$totalAssertions += (int)$xml->testsuite["assertions"]; | |
$totalTime += (float)$xml->testsuite["time"]; | |
} | |
$output = sprintf( | |
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites>\n <testsuite name=\"%s\" tests=\"%d\" assertions=\"%d\" errors=\"0\" failures=\"0\" skipped=\"0\" time=\"%.6f\">\n </testsuite>\n</testsuites>", | |
"H:\\monorepo\\phpunit.xml.dist", | |
$totalTests, | |
$totalAssertions, | |
$totalTime | |
); | |
file_put_contents("report.xml", $output); | |
' | |
- name: Ping statistics server with test results | |
if: always() | |
run: | | |
curl https://raw.githubusercontent.com/hydephp/develop/6e9d17f31879f4ccda13a3fec4029c9663bccec0/monorepo/scripts/ping-openanalytics-testrunner.php -o ping.php | |
php ping.php "Monorepo Smoke Tests" ${{ secrets.OPENANALYTICS_TOKEN }} ${{ github.ref_name }} |