aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/integration-dav.yml
blob: 66ced72a1e25048d0bc31c8d1f803baf14d45c43 (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
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: DAV integration tests
on:
  pull_request:

concurrency:
  group: integration-caldav-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  changes:
    runs-on: ubuntu-latest-low

    outputs:
      src: ${{ steps.changes.outputs.src}}

    steps:
      - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
        id: changes
        continue-on-error: true
        with:
          filters: |
            src:
              - '.github/workflows/**'
              - '3rdparty/**'
              - '**/*.php'
              - '**/lib/**'
              - '**/tests/**'
              - '**/vendor-bin/**'
              - 'build/integration/**'
              - '.php-cs-fixer.dist.php'
              - 'composer.json'
              - 'composer.lock'

  integration-caldav:
    runs-on: ubuntu-latest
    needs: changes

    if: needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh'

    strategy:
      # do not stop on another job's failure
      fail-fast: false
      matrix:
        php-versions: ['8.3']
        endpoint: ['old', 'new']
        service: ['CalDAV', 'CardDAV']

    name: ${{ matrix.service }} (${{ matrix.endpoint }} endpoint) php${{ matrix.php-versions }}

    steps:
        - name: Checkout server
          uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
          with:
            submodules: true

        - name: Set up php ${{ matrix.php-versions }}
          uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b #v2.31.0
          with:
            php-version: ${{ matrix.php-versions }}
            # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
            extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
            coverage: 'none'
            ini-file: development
          env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

        - name: Set up Python
          uses: LizardByte/setup-python-action@master
          with:
            python-version: '2.7'

        - name: Set up CalDAVTester
          run: |
            git clone --depth=1 https://github.com/apple/ccs-caldavtester.git CalDAVTester
            git clone --depth=1 https://github.com/apple/ccs-pycalendar.git pycalendar

        - name: Set up Nextcloud
          run: |
            mkdir data
            ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
            # disable the trashbin, so recurrent deletion of the same object works
            ./occ config:app:set dav calendarRetentionObligation --value=0
            # Prepare users
            OC_PASS=user01 ./occ user:add --password-from-env user01
            OC_PASS=user02 ./occ user:add --password-from-env user02
            # Prepare calendars
            ./occ dav:create-calendar user01 calendar
            ./occ dav:create-calendar user01 shared
            ./occ dav:create-calendar user02 calendar
            # Prepare address books
            ./occ dav:create-addressbook user01 addressbook
            ./occ dav:create-addressbook user02 addressbook

        - name: Run Nextcloud
          run: |
            php -S localhost:8888 &

        - name: Run CalDAVTester
          run: |
            cp "apps/dav/tests/travis/caldavtest/serverinfo-${{ matrix.endpoint }}${{ matrix.endpoint == 'old' && (matrix.service == 'CardDAV' && '-carddav' || '-caldav') || '' }}-endpoint.xml" "apps/dav/tests/travis/caldavtest/serverinfo.xml"
            pushd CalDAVTester
            PYTHONPATH="../pycalendar/src" python testcaldav.py --print-details-onfail --basedir "../apps/dav/tests/travis/caldavtest" -o cdt.txt \
              "${{ matrix.service }}/current-user-principal.xml" \
              "${{ matrix.service }}/sync-report.xml" \
              ${{ matrix.endpoint == 'new' && format('{0}/sharing-{1}.xml', matrix.service, matrix.service == 'CalDAV' && 'calendars' || 'addressbooks') || ';' }}
            popd

        - name: Print Nextcloud logs
          if: always()
          run: |
            cat data/nextcloud.log

  caldav-integration-summary:
    permissions:
      contents: none
    runs-on: ubuntu-latest-low
    needs: [changes, integration-caldav]

    if: always()

    steps:
      - name: Summary status
        run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-caldav.result != 'success' }}; then exit 1; fi