name: Test @notesnook/web on: workflow_dispatch: push: branches: - "master" paths: - "apps/web/**" # re-run workflow if workflow file changes - ".github/workflows/web.tests.yml" pull_request: types: - "ready_for_review" - "opened" - "synchronize" - "reopened" jobs: build: name: Build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Setup Node uses: actions/setup-node@v3 with: node-version: 16.x cache: "npm" cache-dependency-path: | apps/mobile/package-lock.json apps/web/package-lock.json packages/core/package-lock.json packages/crypto/package-lock.json packages/crypto-worker/package-lock.json packages/editor-mobile/package-lock.json packages/editor/package-lock.json packages/logger/package-lock.json packages/streamable-fs/package-lock.json packages/theme/package-lock.json - name: Install packages run: | npm i --ignore-scripts --prefer-offline --no-audit npx lerna bootstrap --ignore=@notesnook/mobile -- --prefer-offline --no-audit - name: Setup environment run: | echo "NX_CLOUD_ACCESS_TOKEN=${{ secrets.NX_CLOUD_ACCESS_TOKEN }}" >> $GITHUB_ENV - name: Generate test build run: npm run build:test:web - name: Archive build artifact uses: actions/upload-artifact@v2 with: name: build path: apps/web/build/**/* test: needs: build name: 🧪 Test (${{ matrix.shard }}/${{ strategy.job-total }}) strategy: matrix: shard: [1, 2, 3, 4] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Download build uses: actions/download-artifact@v3 with: name: build path: ./apps/web/build - name: Setup Node uses: actions/setup-node@v3 with: node-version: 16.x cache: "npm" cache-dependency-path: | apps/mobile/package-lock.json apps/web/package-lock.json packages/core/package-lock.json packages/crypto/package-lock.json packages/crypto-worker/package-lock.json packages/editor-mobile/package-lock.json packages/editor/package-lock.json packages/logger/package-lock.json packages/streamable-fs/package-lock.json packages/theme/package-lock.json - name: Install packages run: | npm i --ignore-scripts --prefer-offline --no-audit npm install -D @playwright/test otplib - name: Validate build extraction run: ls -ld ./apps/web/build/index.html - name: Install Playwright Browsers run: npx playwright install chromium --with-deps working-directory: apps/web - name: Add environment variables run: | echo "USER_EMAIL=${{ secrets.USER_EMAIL }}" >> $GITHUB_ENV echo "USER_PASSWORD=${{ secrets.USER_PASSWORD }}" >> $GITHUB_ENV echo "USER_TOTP_SECRET=${{ secrets.USER_TOTP_SECRET }}" >> $GITHUB_ENV echo "USER_KEY=${{ secrets.USER_KEY }}" >> $GITHUB_ENV - name: Run tests run: npx playwright test --shard=${{ matrix.shard }}/${{ strategy.job-total }} working-directory: apps/web - name: Upload test results uses: actions/upload-artifact@v3 if: failure() with: name: test-results-${{ matrix.shard }} path: apps/web/test-results retention-days: 5