Files
webzine/.gitea/workflows/pr-endpoint-check.yml

140 lines
5.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: PR Endpoint Performance Check
on: [pull_request]
jobs:
endpoint-performance-check:
name: Test All Endpoints (< 1s)
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@v4
- name: Configure environment for CI
run: |
echo "ASPNETCORE_ENVIRONMENT=Development" >> "${GITHUB_ENV:-$ACT_ENV}"
echo "Repository=Db" >> "${GITHUB_ENV:-$ACT_ENV}"
- name: Setup .NET 10
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: Restore dependencies
run: dotnet restore Webzine.sln
- name: Build solution
run: dotnet build Webzine.sln --no-restore --configuration Release
- name: Run unit tests
run: |
dotnet test Webzine.Entity.Tests/Webzine.Entity.Tests.csproj \
--no-build \
--configuration Release
- name: Start Webzine application
run: |
dotnet run \
--project Webzine.WebApplication/Webzine.WebApplication.csproj \
--configuration Release \
--no-build \
-- --urls "http://localhost:5038" &
echo "Attente du démarrage de l'application..."
timeout 60 bash -c '
until curl -sf http://localhost:5038 > /dev/null 2>&1; do
sleep 1
done
'
echo "Application prête!"
- name: Test endpoint response times
id: perf_test
run: |
chmod +x scripts/test-endpoints.sh
bash scripts/test-endpoints.sh http://localhost:5038 1000 2>&1 | tee /tmp/webzine_endpoint_output.txt
EXIT_CODE=${PIPESTATUS[0]}
# Count failures
FAIL_COUNT=$(grep -cE "^\[ÉCHEC\]" /tmp/webzine_endpoint_output.txt 2>/dev/null || echo 0)
SLOW_COUNT=$(grep -cE "^\[LENT\]" /tmp/webzine_endpoint_output.txt 2>/dev/null || echo 0)
echo "failed=$FAIL_COUNT" >> "$GITHUB_OUTPUT"
echo "slow=$SLOW_COUNT" >> "$GITHUB_OUTPUT"
# Échoue sil y a DES problèmes (échecs OU lents)
if [ $FAIL_COUNT -gt 0 ] || [ $SLOW_COUNT -gt 0 ]; then
echo "❌ Performance check failed: $FAIL_COUNT endpoint(s) failed, $SLOW_COUNT endpoint(s) exceeded threshold (1000ms)"
exit 1
fi
echo "✅ All endpoints passed performance check (< 1000ms)"
- name: Post performance report as PR comment
if: always() # Always post comment, even on failure
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_SERVER_URL: ${{ gitea.server_url }}
REPO: ${{ gitea.repository }}
PR_NUMBER: ${{ gitea.event.pull_request.number }}
run: |
RAW_REPORT=$(cat /tmp/webzine_endpoint_output.txt 2>/dev/null || echo "Aucune sortie capturée.")
FAILED_COUNT="${{ steps.perf_test.outputs.failed }}"
SLOW_COUNT="${{ steps.perf_test.outputs.slow }}"
# Determine if the check passed or failed
if [ "$FAILED_COUNT" -gt 0 ] || [ "$SLOW_COUNT" -gt 0 ]; then
STATUS_HEADER="❌ **PERFORMANCE CHECK FAILED**"
STATUS_ICON="❌"
else
STATUS_HEADER="✅ **PERFORMANCE CHECK PASSED**"
STATUS_ICON="✅"
fi
# Convert report to Markdown with colors
CLEAN_REPORT=$(echo "$RAW_REPORT" | sed 's/\x1b\[[0-9;]*m//g')
# Generate formatted report
FORMATTED_REPORT=$(echo "$CLEAN_REPORT" | sed \
-e 's/^\[OK\] /✅ /' \
-e 's/^\[LENT\] /⚠️ /' \
-e 's/^\[ÉCHEC\] /❌ /' \
-e 's/^→ \[LENT\] / • ⚠️ /' \
-e 's/^→ \[ÉCHEC\] / • ❌ /' \
-e 's/^→ / • /' \
-e 's/^── \(.*\)$/\n### ── \1/' \
-e 's/^\(Total.*\)$/\n**\1**/' \
-e 's/^\(Réussis.*\)$/**✅ \1**/' \
-e 's/^\(Échecs.*\)$/**❌ \1**/' \
-e 's/^\(⚠️ ENDPOINTS LENTS.*\)$/\n### \1/' \
-e 's/^\(❌ ENDPOINTS EN ÉCHEC.*\)$/\n### \1/' \
-e 's/^\(La PR doit.*\)$/\n**❌ \1**/')
BODY=$(cat <<EOF
$STATUS_HEADER
$FORMATTED_REPORT
---
**Seuil**: 1000ms
**Statistiques**:
- ✅ Endpoints rapides: \$(grep -c "^\[OK\]" /tmp/webzine_endpoint_output.txt 2>/dev/null || echo 0)
- ⚠️ Endpoints lents (>1000ms): $SLOW_COUNT
- ❌ Endpoints en échec: $FAILED_COUNT
**Vérifié par**: Workflow PR Endpoint Performance
EOF
)
curl -s -X POST \
-H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg body "$BODY" '{body: $body}')" \
"$GITEA_SERVER_URL/api/v1/repos/$REPO/issues/$PR_NUMBER/comments"
- name: Fail job if performance issues detected
if: steps.perf_test.outputs.failed > 0 || steps.perf_test.outputs.slow > 0
run: |
echo "❌ Job failed due to performance issues"
exit 1