name: E2E # Running E2E test multiple times to confirm test stability. # E2E test could be randomly failed due to the batch update mechanism of React. # Robust E2E test could help improving dev experience. on: push: branches: [master] paths: - 'e2e-tests/**' pull_request: branches: [master] paths: - 'e2e-tests/**' env: CLOJURE_VERSION: '1.10.1.727' # setup-java@v2 dropped support for legacy Java version syntax. # This is the same as 1.8. JAVA_VERSION: '8' # This is the latest node version we can run. NODE_VERSION: '16' BABASHKA_VERSION: '1.0.168' jobs: e2e-test-build: name: Build Test Artifact runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Set up Node uses: actions/setup-node@v2 with: node-version: ${{ env.NODE_VERSION }} cache: 'yarn' cache-dependency-path: | yarn.lock static/yarn.lock - name: Set up Java uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ env.JAVA_VERSION }} - name: Set up Clojure uses: DeLaGuardo/setup-clojure@master with: cli: ${{ env.CLOJURE_VERSION }} - name: Clojure cache uses: actions/cache@v2 id: clojure-deps with: path: | ~/.m2/repository ~/.gitlibs key: ${{ runner.os }}-clojure-deps-${{ hashFiles('deps.edn') }} restore-keys: ${{ runner.os }}-clojure-deps- - name: Fetch Clojure deps if: steps.clojure-deps.outputs.cache-hit != 'true' run: clojure -A:cljs -P - name: Shadow-cljs cache uses: actions/cache@v2 with: path: .shadow-cljs # ensure update cache every time key: ${{ runner.os }}-shadow-cljs-${{ github.sha }} # will match most recent upload restore-keys: | ${{ runner.os }}-shadow-cljs- - name: Fetch yarn deps run: yarn install env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: true # NOTE: require the app to be build with DEV-RELEASE flag - name: Prepare E2E test build run: | yarn gulp:build && clojure -M:cljs release app electron --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug # NOTE: should include .shadow-cljs if in dev mode(compile) - name: Create Archive for build run: tar czf static.tar.gz static - name: Upload Artifact uses: actions/upload-artifact@v3 with: name: logseq-e2e-artifact path: static.tar.gz retention-days: 1 e2e-test-run: needs: [ e2e-test-build ] name: Test Shard ${{ matrix.shard }} Repeat ${{ matrix.repeat }} runs-on: ubuntu-latest strategy: matrix: repeat: [1, 2] shard: [1, 2, 3] steps: - name: Repeat message run: echo ::info title=StartUp::E2E testing shard ${{ matrix.shard}}/3 repeat ${{ matrix.repeat }} - name: Checkout uses: actions/checkout@v2 - name: Download test build artifact uses: actions/download-artifact@v3 with: name: logseq-e2e-artifact - name: Extract test Artifact run: tar xzf static.tar.gz - name: Set up Node uses: actions/setup-node@v2 with: node-version: ${{ env.NODE_VERSION }} cache: 'yarn' cache-dependency-path: | yarn.lock static/yarn.lock - name: Fetch yarn deps for E2E test run: | yarn install (cd static && yarn install && yarn rebuild:all) env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: true - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - name: Run Playwright test run: xvfb-run -- npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Save e2e artifacts if: ${{ failure() }} uses: actions/upload-artifact@v3 with: name: e2e-repeat-report-${{ matrix.shard}}-${{ matrix.repeat }} path: e2e-dump/* retention-days: 1