diff --git a/.github/workflows/cypress.yaml b/.github/workflows/cypress.yaml deleted file mode 100644 index 9ca0c45c98..0000000000 --- a/.github/workflows/cypress.yaml +++ /dev/null @@ -1,84 +0,0 @@ -# Triggers after the layered build has finished, taking the artifact and running cypress on it -name: Run Cypress tests -on: - workflow_run: - workflows: [ "Element Web - Build" ] - types: - - completed -jobs: - prdetails: - name: ℹ️ PR Details - if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' - uses: matrix-org/matrix-js-sdk/.github/workflows/pr_details.yml@develop - with: - owner: ${{ github.event.workflow_run.head_repository.owner.login }} - branch: ${{ github.event.workflow_run.head_branch }} - - cypress: - name: "Cypress End to End Tests" - needs: prdetails - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - # There's a 'download artifact' action, but it hasn't been updated for the workflow_run action - # (https://github.com/actions/download-artifact/issues/60) so instead we get this mess: - - name: 📥 Download artifact - uses: dawidd6/action-download-artifact@v2 - with: - workflow: element-build-and-test.yaml - run_id: ${{ github.event.workflow_run.id }} - name: previewbuild - path: webapp - - - name: Resolve command-prefix for Percy - id: percy - if: | - contains(fromJSON(needs.prdetails.outputs.data).labels.*.name, 'X-Needs-Percy') - || github.ref == 'refs/heads/develop' - run: | - echo "::set-output name=command-prefix::yarn percy exec --" - - - name: Run Cypress tests - uses: cypress-io/github-action@v2 - with: - # The built-in Electron runner seems to grind to a halt trying - # to run the tests, so use chrome. - browser: chrome - start: npx serve -p 8080 webapp - record: true - command-prefix: ${{ steps.percy.outputs.command-prefix }} - env: - # pass the Dashboard record key as an environment variable - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - # pass the Percy token as an environment variable - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} - # Use existing chromium rather than downloading another - PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true - PERCY_BROWSER_EXECUTABLE: /usr/bin/chromium-browser - # pass GitHub token to allow accurately detecting a build vs a re-run build - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Upload Artifact - if: failure() - uses: actions/upload-artifact@v2 - with: - name: cypress-results - path: | - cypress/screenshots - cypress/videos - cypress/synapselogs - - - name: Store benchmark result - if: github.ref == 'refs/heads/develop' - uses: matrix-org/github-action-benchmark@jsperfentry-1 - with: - name: Cypress measurements - tool: 'jsperformanceentry' - output-file-path: cypress/performance/measurements.json - # The dashboard is available at https://matrix-org.github.io/matrix-react-sdk/cypress/bench/ - benchmark-data-dir-path: cypress/bench - fail-on-alert: false - comment-on-alert: false - github-token: ${{ secrets.DEPLOY_GH_PAGES }} - auto-push: ${{ github.ref == 'refs/heads/develop' }} diff --git a/.github/workflows/element-build-and-test.yaml b/.github/workflows/element-build-and-test.yaml new file mode 100644 index 0000000000..a104709415 --- /dev/null +++ b/.github/workflows/element-build-and-test.yaml @@ -0,0 +1,122 @@ +# Produce a build of element-web with this version of react-sdk +# and any matching branches of element-web and js-sdk, output it +# as an artifact and run integration tests. +name: Element Web - Build and Test +on: + pull_request: { } + push: + branches: [ develop, master ] + repository_dispatch: + types: [ upstream-sdk-notify ] +env: + # These must be set for fetchdep.sh to get the right branch + REPOSITORY: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} +jobs: + build: + name: "Build Element-Web" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v3 + with: + cache: 'yarn' + + - name: Fetch layered build + id: layered_build + run: | + scripts/ci/layered.sh + JSSDK_SHA=$(git -C matrix-js-sdk rev-parse --short=12 HEAD) + REACT_SHA=$(git rev-parse --short=12 HEAD) + VECTOR_SHA=$(git -C element-web rev-parse --short=12 HEAD) + echo "::set-output name=VERSION::$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA" + + - name: Copy config + run: cp element.io/develop/config.json config.json + working-directory: ./element-web + + - name: Build + env: + CI_PACKAGE: true + VERSION: "${{ steps.layered_build.outputs.VERSION }}" + run: yarn build + working-directory: ./element-web + + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: previewbuild + path: element-web/webapp + # We'll only use this in a triggered job, then we're done with it + retention-days: 1 + + cypress: + name: "Cypress End to End Tests" + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Download build + uses: actions/download-artifact@v3 + with: + name: previewbuild + path: webapp + + - name: Run Cypress tests + uses: cypress-io/github-action@v2 + with: + # The built-in Electron runner seems to grind to a halt trying + # to run the tests, so use chrome. + browser: chrome + start: npx serve -p 8080 webapp + record: true + command-prefix: 'yarn percy exec --' + env: + # pass the Dashboard record key as an environment variable + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + # pass the Percy token as an environment variable + PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} + # Use existing chromium rather than downloading another + PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true + PERCY_BROWSER_EXECUTABLE: /usr/bin/chromium-browser + # pass GitHub token to allow accurately detecting a build vs a re-run build + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload Artifact + if: failure() + uses: actions/upload-artifact@v2 + with: + name: cypress-results + path: | + cypress/screenshots + cypress/videos + cypress/synapselogs + + - name: Store benchmark result + if: github.ref == 'refs/heads/develop' + uses: matrix-org/github-action-benchmark@jsperfentry-1 + with: + name: Cypress measurements + tool: 'jsperformanceentry' + output-file-path: cypress/performance/measurements.json + # The dashboard is available at https://matrix-org.github.io/matrix-react-sdk/cypress/bench/ + benchmark-data-dir-path: cypress/bench + fail-on-alert: false + comment-on-alert: false + github-token: ${{ secrets.DEPLOY_GH_PAGES }} + auto-push: ${{ github.ref == 'refs/heads/develop' }} + + app-tests: + name: Element Web Integration Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v3 + with: + cache: 'yarn' + + - name: Run tests + run: "./scripts/ci/app-tests.sh" diff --git a/.github/workflows/element-web.yaml b/.github/workflows/element-web.yaml deleted file mode 100644 index 315c8bdcf2..0000000000 --- a/.github/workflows/element-web.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# Produce a build of element-web with this version of react-sdk -# and any matching branches of element-web and js-sdk, output it -# as an artifact and run integration tests. -name: Element Web - Build -on: - pull_request: { } - push: - branches: [ develop, master ] - repository_dispatch: - types: [ upstream-sdk-notify ] -env: - # These must be set for fetchdep.sh to get the right branch - REPOSITORY: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} -jobs: - build: - name: "Build Element-Web" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - - - name: Fetch layered build - id: layered_build - run: | - scripts/ci/layered.sh - JSSDK_SHA=$(git -C matrix-js-sdk rev-parse --short=12 HEAD) - REACT_SHA=$(git rev-parse --short=12 HEAD) - VECTOR_SHA=$(git -C element-web rev-parse --short=12 HEAD) - echo "::set-output name=VERSION::$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA" - - - name: Copy config - run: cp element.io/develop/config.json config.json - working-directory: ./element-web - - - name: Build - env: - CI_PACKAGE: true - VERSION: "${{ steps.layered_build.outputs.VERSION }}" - run: yarn build - working-directory: ./element-web - - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: previewbuild - path: element-web/webapp - # We'll only use this in a triggered job, then we're done with it - retention-days: 1 diff --git a/.github/workflows/netlify.yaml b/.github/workflows/netlify.yaml index 409edd0c42..b8298c7924 100644 --- a/.github/workflows/netlify.yaml +++ b/.github/workflows/netlify.yaml @@ -3,7 +3,7 @@ name: Upload Preview Build to Netlify on: workflow_run: - workflows: [ "Element Web - Build" ] + workflows: [ "Element Web - Build and Test" ] types: - completed jobs: diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 11660e68ba..95b06bab6b 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -5,7 +5,7 @@ on: types: - completed concurrency: - group: ${{ github.workflow }}-${{ github.event.workflow_run.head_branch }} + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: prdetails: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f2b97bd189..9fa7a6f7cf 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -35,16 +35,3 @@ jobs: path: | coverage !coverage/lcov-report - - app-tests: - name: Element Web Integration Tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - - - name: Run tests - run: "./scripts/ci/app-tests.sh"