diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b099fae..cac3deb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,12 +45,116 @@ jobs: run: | pre-commit run --all-files --show-diff-on-failure + e2e: + name: ๐Ÿงช E2E tests + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + python: ["3.7", "3.12"] + steps: + - name: "โฌ‡ Checkout OctoPrint with E2E tests" + uses: actions/checkout@v4 + with: + repository: OctoPrint/OctoPrint + path: OctoPrint + + - name: โฌ‡ Download build result + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + + - name: ๐Ÿ— Set up Python ${{ matrix.python }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} + + - name: ๐Ÿ— Install OctoPrint + run: | + pip install dist/*.whl + + cd OctoPrint + pip install . + + - name: ๐Ÿ— Create base config for test server + run: | + mkdir e2econfig + cp -r OctoPrint/.github/fixtures/with_acl/* e2econfig + + - name: ๐Ÿ— Install dummy mfa plugin + run: | + mkdir -p e2econfig/plugins + cp -r .github/fixtures/mfa_dummy e2econfig/plugins/mfa_dummy + + - name: ๐Ÿ— Prepare Playwright env + working-directory: ./OctoPrint/tests/playwright + run: | + npm ci + PLAYWRIGHT_VERSION=$(npm ls --json @playwright/test | jq --raw-output '.dependencies["@playwright/test"].version') + echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV + + - name: ๐Ÿงฐ Cache Playwright browser binaries + uses: actions/cache@v4 + id: playwright-cache + with: + path: "~/.cache/ms-playwright" + key: "${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}" + restore-keys: | + ${{ runner.os }}-playwright- + + - name: ๐Ÿ— Install Playwright browser binaries & OS dependencies + if: steps.playwright-cache.outputs.cache-hit != 'true' + working-directory: ./OctoPrint/tests/playwright + run: | + sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + npx playwright install --with-deps + + - name: ๐Ÿ— Install Playwright OS dependencies + if: steps.playwright-cache.outputs.cache-hit == 'true' + working-directory: ./OctoPrint/tests/playwright + run: | + sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + npx playwright install-deps + + - name: ๐ŸŽญ Run Playwright + working-directory: ./OctoPrint/tests/playwright + run: | + npx playwright test + env: + OCTOPRINT_SERVER_BASE: ${{ github.workspace }}/e2econfig + TEST_MFA: true + + - name: ๐Ÿ”Ž Check octoprint.log for errors + run: | + log=${{ github.workspace }}/e2econfig/logs/octoprint.log + if grep "\- ERROR \-" $log; then + echo "::error::Errors were logged to octoprint.log" + grep -Pazo '(?m)^\N+\- ERROR \-\N*\n(^\N*?\n)*?(?=\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \- )' $log + exit 1 + fi + + - name: โฌ† Upload Playwright report + uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report-py${{ matrix.python }} + path: tests/playwright/playwright-report + + - name: โฌ† Upload OctoPrint logs + uses: actions/upload-artifact@v4 + if: failure() + with: + name: octoprint-logs-py${{ matrix.python }} + path: ${{ github.workspace }}/e2econfig/logs + publish-on-testpypi: name: ๐Ÿ“ฆ Publish on TestPyPI if: github.event_name == 'release' needs: - build - pre-commit + - e2e runs-on: ubuntu-latest steps: - name: โฌ‡ Download build result