pr_ci_playwright_e2e #23
Workflow file for this run
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: pr_ci_playwright_e2e | |
on: | |
workflow_dispatch: | |
jobs: | |
frontend: | |
name: Run PR Frontend Check | |
runs-on: ubuntu-latest | |
environment: dev | |
steps: | |
- name: cleanup old checkout | |
run: chmod +w -R ${GITHUB_WORKSPACE}; rm -rf ${GITHUB_WORKSPACE}/*; | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Clean up any existing containers | |
run: | | |
docker stop $(docker ps -aq) || true | |
docker rm $(docker ps -aq) || true | |
- name: Check Port Availability | |
run: | | |
! nc -z localhost 3000 && \ | |
! nc -z localhost 8000 && \ | |
! nc -z localhost 5432 | |
- name: Run Docker Compose | |
run: docker compose --env-file .env.dev up --build -d | |
- name: Check Docker Container Logs | |
run: docker compose --env-file .env.dev logs | |
- name: Setup Node environment | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Clean Yarn cache | |
working-directory: ./frontend | |
run: | | |
sudo yarn cache clean | |
- name: Install dependencies via Yarn | |
working-directory: ./frontend | |
run: | | |
sudo yarn install | |
- name: Cache Playwright browsers | |
uses: actions/cache@v3 | |
id: playwright-cache | |
with: | |
path: ~/.cache/ms-playwright | |
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} | |
restore-keys: | | |
playwright-browsers-${{ runner.os }}- | |
- name: Install Playwright Browsers | |
if: steps.playwright-cache.outputs.cache-hit != 'true' | |
working-directory: ./frontend | |
run: sudo yarn playwright install --with-deps | |
- name: Ensure gh-pages branch exists | |
if: always() | |
run: | | |
git fetch origin gh-pages | |
if git rev-parse --verify origin/gh-pages; then | |
git checkout gh-pages | |
git reset --hard origin/gh-pages | |
else | |
git checkout --orphan gh-pages | |
git rm -rf . | |
echo "# GitHub Pages" > index.html | |
git add index.html | |
git -c user.name='github-actions[bot]' -c user.email='github-actions[bot]@users.noreply.github.com' commit -m "Initial commit" | |
git push origin gh-pages | |
fi | |
- name: Wait for web server to be ready with retry | |
run: | | |
MAX_ATTEMPTS=3 | |
WAIT_TIME=90 | |
ATTEMPT=1 | |
while [[ $ATTEMPT -le $MAX_ATTEMPTS ]] | |
do | |
echo "Attempt $ATTEMPT of $MAX_ATTEMPTS" | |
if yarn wait-on http://localhost:3000 --timeout ${WAIT_TIME}000; then | |
echo "Server is ready!" | |
break | |
else | |
echo "Server not ready, restarting Docker Compose..." | |
docker compose --env-file .env.dev down | |
docker compose --env-file .env.dev up --build -d | |
ATTEMPT=$((ATTEMPT + 1)) | |
if [[ $ATTEMPT -gt $MAX_ATTEMPTS ]]; then | |
echo "Server failed to start after $MAX_ATTEMPTS attempts." | |
exit 1 | |
fi | |
sleep 10 | |
fi | |
done | |
- name: Run Playwright tests | |
working-directory: ./frontend | |
run: | | |
sudo yarn playwright test --reporter=html | |
- name: Upload Playwright report | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: playwright-report | |
path: frontend/playwright-report/ | |
retention-days: 30 | |
- name: Deploy Playwright Report to GitHub Pages | |
if: always() | |
run: | | |
# Configuring git | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
# Cloning the repository to the gh-pages branch | |
git clone --branch=gh-pages https://github.com/${{ github.repository }} gh-pages | |
cd gh-pages | |
# Copying the Playwright report to the gh-pages branch | |
rm -rf ./* | |
cp -r ../frontend/playwright-report/* . | |
# Committing and pushing the changes | |
git add . | |
git -c user.name='github-actions[bot]' -c user.email='github-actions[bot]@users.noreply.github.com' commit -m "Update Playwright report" | |
git push origin gh-pages |