aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/cypress.yml
blob: 2b652ff62ab60f9bd579914b2691cd50664fb334 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: Cypress

on:
  pull_request:
  push:
    branches:
      - master
      - stable*

env:
  APP_NAME: server
  BRANCH: ${{ github.base_ref }}
  TESTING: true

jobs:
  init:
    runs-on: ubuntu-latest
    outputs:
      nodeVersion: ${{ steps.versions.outputs.nodeVersion }}
      npmVersion: ${{ steps.versions.outputs.npmVersion }}

    steps:
      - name: Checkout app
        uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2

      - name: Read package.json node and npm engines version
        uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
        id: versions
        with:
          fallbackNode: "^14"
          fallbackNpm: "^7"

      - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
        uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
        with:
          cache: 'npm'
          node-version: ${{ steps.versions.outputs.nodeVersion }}

      - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
        run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"

      - name: Install dependencies & build app
        run: |
          npm ci
          TESTING=true npm run build --if-present

      - name: Save context
        uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
        with:
          key: cypress-context-${{ github.run_id }}
          path: ./

  cypress:
    runs-on: ubuntu-latest
    needs: init

    strategy:
      fail-fast: false
      matrix:
        # run multiple copies of the current job in parallel
        containers: ["component", 1, 2]

    name: runner ${{ matrix.containers }}

    steps:
      - name: Restore context
        uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
        with:
          fail-on-cache-miss: true
          key: cypress-context-${{ github.run_id }}
          path: ./

      - name: Set up node ${{ needs.init.outputs.nodeVersion }}
        uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
        with:
          cache: 'npm'
          node-version: ${{ needs.init.outputs.nodeVersion }}

      - name: Set up npm ${{ needs.init.outputs.npmVersion }}
        run: npm i -g npm@"${{ needs.init.outputs.npmVersion }}"


      - name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
        uses: cypress-io/github-action@db1693016f23ccf9043f4b2428f9b04e5d502a73 # v5.8.1
        with:
          record: true
          parallel: true
          # cypress run type
          component: ${{ matrix.containers == 'component' }}
          group: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }}
          # cypress env
          ci-build-id: ${{ github.sha }}-${{ github.run_number }}
          tag: ${{ github.event_name }}t
        env:
          # Needs to be prefixed with CYPRESS_
          CYPRESS_BRANCH: ${{ env.BRANCH }}
          CYPRESS_GH: true
          # https://github.com/cypress-io/github-action/issues/124
          COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
          # Needed for some specific code workarounds
          TESTING: true
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}

      - name: Extract NC logs
        if: failure() && matrix.containers != 'component'
        run: docker logs nextcloud-cypress-tests-server > nextcloud.log

      - name: Upload NC logs
        uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
        if: failure() && matrix.containers != 'component'
        with:
          name: nc_logs_${{ matrix.containers }}
          path: nextcloud.log

      - name: Create data dir archive
        if: failure() && matrix.containers != 'component'
        run: docker exec nextcloud-cypress-tests-server tar -cvjf - data > data.tar

      - name: Upload data dir archive
        uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
        if: failure() && matrix.containers != 'component'
        with:
          name: nc_data_${{ matrix.containers }}
          path: data.tar

  summary:
    runs-on: ubuntu-latest
    needs: [init, cypress]

    if: always()

    name: cypress-summary

    steps:
      - name: Summary status
        run: if ${{ needs.init.result != 'success' || ( needs.cypress.result != 'success' && needs.cypress.result != 'skipped' ) }}; then exit 1; fi