From 6a9d39838c4f78bb30f431f3616024250041e3ee Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Sat, 17 Jan 2026 15:02:11 +0100 Subject: [PATCH] build: don't run e2e tests every --- .github/workflows/build.yml | 12 --- .github/workflows/e2e-scheduled.yml | 104 +++++++++++++++++++++++++ .github/workflows/lint-and-test-pr.yml | 12 --- 3 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/e2e-scheduled.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a7ebf3d50..5b907cf17 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,21 +59,9 @@ jobs: - name: Test Unit run: npm run test - - name: Start WebDAV Server - run: | - docker compose up -d webdav - - # Wait for WebDAV server to be ready - chmod +x ./scripts/wait-for-webdav.sh - ./scripts/wait-for-webdav.sh - - name: Test E2E run: npm run e2e - - name: Print WebDAV logs on failure - if: ${{ failure() }} - run: docker compose logs webdav - - name: 'Upload E2E results on failure' if: ${{ failure() }} uses: actions/upload-artifact@v6 diff --git a/.github/workflows/e2e-scheduled.yml b/.github/workflows/e2e-scheduled.yml new file mode 100644 index 000000000..b9718b577 --- /dev/null +++ b/.github/workflows/e2e-scheduled.yml @@ -0,0 +1,104 @@ +name: 'E2E Tests (Scheduled)' + +on: + schedule: + - cron: '0 2 * * *' # 2 AM UTC daily + + workflow_dispatch: + + push: + branches: [master, release/*] + paths: + - 'src/app/imex/sync/**' + - 'src/app/op-log/**' + - 'e2e/tests/**' + - 'docker-compose.yaml' + - 'docker-compose.supersync.yaml' + +permissions: + contents: read + +jobs: + e2e-tests: + runs-on: ubuntu-latest + timeout-minutes: 60 + env: + UNSPLASH_KEY: ${{ secrets.UNSPLASH_KEY }} + UNSPLASH_CLIENT_ID: ${{ secrets.UNSPLASH_CLIENT_ID }} + + steps: + - uses: actions/setup-node@v6 + with: + node-version: 20 + + - name: Check out Git repository + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Reconfigure git to use HTTP authentication + run: > + git config --global url."https://github.com/".insteadOf + ssh://git@github.com/ + + - name: Get npm cache directory + id: npm-cache-dir + run: | + echo "::set-output name=dir::$(npm config get cache)" + + - uses: actions/cache@v5 + id: npm-cache + with: + path: ${{ steps.npm-cache-dir.outputs.dir }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install npm Packages + run: npm i + + - name: Install Playwright Browsers + run: | + npx playwright install --with-deps chromium + npx playwright install-deps chromium + + - run: npm run env + + - name: Start Docker Services (WebDAV + SuperSync) + run: | + docker compose up -d webdav + docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml up -d --build supersync + + # Wait for WebDAV + chmod +x ./scripts/wait-for-webdav.sh + ./scripts/wait-for-webdav.sh + + # Wait for SuperSync + echo "⏳ Waiting for SuperSync server..." + until curl -s http://localhost:1901/health > /dev/null 2>&1; do sleep 1; done + echo "✓ SuperSync server ready!" + + - name: Run E2E Tests + run: npm run e2e + + - name: Stop Docker Services + if: always() + run: | + docker compose down + docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml down supersync + + - name: Print Docker Logs on Failure + if: ${{ failure() }} + run: | + echo "=== WebDAV Logs ===" + docker compose logs webdav + echo "=== SuperSync Logs ===" + docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml logs supersync + + - name: Upload E2E Results on Failure + if: ${{ failure() }} + uses: actions/upload-artifact@v6 + with: + name: e2e-results-${{ github.run_id }} + path: .tmp/e2e-test-results/**/*.* + retention-days: 30 diff --git a/.github/workflows/lint-and-test-pr.yml b/.github/workflows/lint-and-test-pr.yml index 8328eff70..ac1cd6a76 100644 --- a/.github/workflows/lint-and-test-pr.yml +++ b/.github/workflows/lint-and-test-pr.yml @@ -50,18 +50,6 @@ jobs: - run: npm run lint - run: npm run int:test # Validate i18n JSON files - run: npm run test - - name: Start WebDAV Server - run: | - docker compose up -d webdav - - # Wait for WebDAV server to be ready - chmod +x ./scripts/wait-for-webdav.sh - ./scripts/wait-for-webdav.sh - - run: npm run e2e - - name: Print WebDAV logs on failure - if: ${{ failure() }} - run: docker compose logs webdav - - name: 'Upload E2E results on failure' if: ${{ failure() }} uses: actions/upload-artifact@v6