diff --git a/.github/workflows/command-playwright-update.yml b/.github/workflows/command-playwright-update.yml new file mode 100644 index 0000000000..2ed296f636 --- /dev/null +++ b/.github/workflows/command-playwright-update.yml @@ -0,0 +1,103 @@ +# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT +name: Command L10n Update +on: + issue_comment: + types: [created] + +jobs: + init: + runs-on: ubuntu-latest + + # On pull requests and if the comment starts with `/update-snapshots` + if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/update-snapshots') + + outputs: + arg1: ${{ steps.command.outputs.arg1 }} + head_ref: ${{ steps.comment-branch.outputs.head_ref }} + + steps: + - name: Add reaction on start + uses: peter-evans/create-or-update-comment@v4 + with: + token: ${{ secrets.COMMAND_BOT_PAT }} + repository: ${{ github.event.repository.full_name }} + comment-id: ${{ github.event.comment.id }} + reaction-type: "+1" + + - name: Parse command + uses: skjnldsv/parse-command-comment@master + id: command + + - name: Init branch + uses: xt0rted/pull-request-comment-branch@v2 + id: comment-branch + + process: + runs-on: ubuntu-latest + needs: init + + steps: + - name: Checkout ${{ needs.init.outputs.head_ref }} + uses: actions/checkout@v4 + with: + token: ${{ secrets.COMMAND_BOT_PAT }} + fetch-depth: 0 + ref: ${{ needs.init.outputs.head_ref }} + + - name: Setup git + run: | + git config --local user.email "nextcloud-command@users.noreply.github.com" + git config --local user.name "nextcloud-command" + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@v3 + id: package-engines-versions + with: + fallbackNode: '^20' + fallbackNpm: '^10' + + - name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }} + uses: actions/setup-node@v4 + with: + node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }} + cache: npm + + - name: Set up npm ${{ steps.package-engines-versions.outputs.npmVersion }} + run: npm i -g npm@"${{ steps.package-engines-versions.outputs.npmVersion }}" + + - name: Install dependencies + run: npm ci + + - name: Update snapshots + run: npm run update:snapshots + + - name: Commit and push default + if: ${{ needs.init.outputs.arg1 != 'fixup' && needs.init.outputs.arg1 != 'amend' }} + run: | + git add . + git commit --signoff -m 'Updating l10n asset' + git push origin ${{ needs.init.outputs.head_ref }} + + - name: Commit and push fixup + if: ${{ needs.init.outputs.arg1 == 'fixup' }} + run: | + git add . + git commit --fixup=HEAD --signoff + git push origin ${{ needs.init.outputs.head_ref }} + + - name: Commit and push amend + if: ${{ needs.init.outputs.arg1 == 'amend' }} + run: | + git add . + git commit --amend --no-edit --signoff + git push --force origin ${{ needs.init.outputs.head_ref }} + + - name: Add reaction on failure + uses: peter-evans/create-or-update-comment@v4 + if: failure() + with: + token: ${{ secrets.COMMAND_BOT_PAT }} + repository: ${{ github.event.repository.full_name }} + comment-id: ${{ github.event.comment.id }} + reaction-type: "-1" diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 8439a9db7f..f81da923b2 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -18,6 +18,9 @@ jobs: shardIndex: [1, 2] shardTotal: [2] + outputs: + nodeVersion: ${{ steps.versions.outputs.nodeVersion }} + steps: - uses: actions/checkout@v4 @@ -43,7 +46,7 @@ jobs: run: npx playwright install --with-deps - name: Run Playwright tests - run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + run: npm run test:component -- --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} - name: Upload blob report to GitHub Actions Artifacts if: ${{ !cancelled() }} @@ -52,3 +55,35 @@ jobs: name: blob-report-${{ matrix.shardIndex }} path: blob-report retention-days: 1 + + merge-reports: + # Merge reports after playwright-tests, even if some shards have failed + if: ${{ !cancelled() }} + needs: [playwright-tests] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ needs.playwright-tests.outputs.nodeVersion }} + + - name: Install dependencies + run: npm ci + + - name: Download blob reports from GitHub Actions Artifacts + uses: actions/download-artifact@v4 + with: + path: all-blob-reports + pattern: blob-report-* + merge-multiple: true + + - name: Merge into HTML Report + run: npx playwright merge-reports --reporter html ./all-blob-reports + + - name: Upload HTML report + uses: actions/upload-artifact@v4 + with: + name: html-report--attempt-${{ github.run_attempt }} + path: playwright-report + retention-days: 7 \ No newline at end of file diff --git a/package.json b/package.json index 1ac770bb6f..a8057953e1 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "stylelint:fix": "stylelint src/**/*.vue src/**/*.scss src/**/*.css --fix", "styleguide": "vue-styleguidist --config styleguide.config.cjs server", "styleguide:build": "vue-styleguidist --config styleguide.config.cjs build", - "update:snapshots": "playwright test -c playwright.config.ts --update-snapshots" + "update:snapshots": "npm run test:component -- --update-snapshots" }, "exports": { ".": { diff --git a/playwright.config.ts b/playwright.config.ts index 016fe5a9e9..34663cf442 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -41,9 +41,10 @@ export default defineConfig({ retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + + // On CI we are using the github annotations + blob which will be merged by workflow to a downloadable HTML report (like the one we receive locally) + reporter: process.env.CI ? [['blob'], ['github']] : 'html', + use: { /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry',