aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/object-storage-swift.yml
blob: 0179e50d4fb693dff2f2306409f2c77440e1c1c6 (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
name: Object storage Swift
on:
  pull_request:
    paths:
      - '.github/workflows/**'
      - '3rdparty/**'
      - '**/*.php'
      - '**/lib/**'
      - '**/tests/**'
      - '**/vendor-bin/**'
      - '.php-cs-fixer.dist.php'
      - 'composer.json'
      - 'composer.lock'

concurrency:
  group: object-storage-swift-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  changes:
    runs-on: ubuntu-latest

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

    steps:
      - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
        id: changes
        continue-on-error: true
        with:
          filters: |
            src:
              - '.github/workflows/**'
              - '3rdparty/**'
              - '**/appinfo/**'
              - '**/lib/**'
              - '**/templates/**'
              - '**/tests/**'
              - 'vendor/**'
              - 'vendor-bin/**'
              - '.php-cs-fixer.dist.php'
              - 'composer.json'
              - 'composer.lock'
              - '**.php'

  swift-primary-tests:
    runs-on: ubuntu-latest
    needs: changes

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

    strategy:
      matrix:
        php-versions: ['8.0', '8.1', '8.2', '8.3']
        include:
          - php-versions: '8.3'
            coverage: true

    name: php${{ matrix.php-versions }}-swift

    services:
      cache:
        image: ghcr.io/nextcloud/continuous-integration-redis:latest
        ports:
          - 6379:6379/tcp
        options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3

      swift:
        image: ghcr.io/cscfi/docker-keystone-swift
        ports:
          - 5000:5000
          - 8080:8080

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

      - name: Set up php ${{ matrix.php-versions }}
        uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
        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: ${{ matrix.coverage && 'xdebug' || 'none' }}
          ini-file: development
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Set up Nextcloud
        env:
          OBJECT_STORE: swift
          OBJECT_STORE_SECRET: veryfast
        run: |
          composer install
          cp tests/redis.config.php config/
          cp tests/preseed-config.php config/config.php
          ./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 password
          php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0

      - name: PHPUnit
        env:
          OBJECT_STORE: swift
          OBJECT_STORE_SECRET: veryfast
        run: composer run test -- --group PRIMARY-swift ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}

      - name: Upload code coverage
        if: ${{ !cancelled() && matrix.coverage }}
        uses: codecov/codecov-action@v3
        with:
          files: ./clover.xml
          flags: phpunit-swift

      - name: Swift logs
        if: always()
        run: |
          docker ps -a
          docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done

  swift-primary-summary:
    runs-on: ubuntu-latest
    needs: [changes,swift-primary-tests]

    if: always()

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