diff --git a/.github/workflows/files-external.yml b/.github/workflows/files-external.yml index c1822f30d859e..e9c0464de0b97 100644 --- a/.github/workflows/files-external.yml +++ b/.github/workflows/files-external.yml @@ -2,9 +2,7 @@ # SPDX-License-Identifier: MIT name: PHPUnit files_external generic on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read @@ -48,9 +46,8 @@ jobs: files-external-generic: runs-on: ubuntu-latest - needs: changes - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} strategy: fail-fast: false diff --git a/.github/workflows/integration-s3-primary.yml b/.github/workflows/integration-s3-primary.yml index 00169985999d5..bdff128a05594 100644 --- a/.github/workflows/integration-s3-primary.yml +++ b/.github/workflows/integration-s3-primary.yml @@ -2,15 +2,11 @@ # SPDX-License-Identifier: MIT name: S3 primary storage integration tests on: - pull_request: + workflow_call: permissions: contents: read -concurrency: - group: integration-s3-primary-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -47,9 +43,8 @@ jobs: integration-s3-primary: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh' + if: github.repository_owner != 'nextcloud-gmbh' strategy: fail-fast: false @@ -118,16 +113,3 @@ jobs: cat data/nextcloud.log 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 - - - s3-primary-integration-summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, integration-s3-primary] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-s3-primary.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/object-storage-azure.yml b/.github/workflows/object-storage-azure.yml index 68e90b020349a..98ba3260d781c 100644 --- a/.github/workflows/object-storage-azure.yml +++ b/.github/workflows/object-storage-azure.yml @@ -2,17 +2,11 @@ # SPDX-License-Identifier: MIT name: Object storage azure on: - pull_request: - schedule: - - cron: "15 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: object-storage-azure-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -48,9 +42,8 @@ jobs: azure-primary-tests: runs-on: ubuntu-latest - needs: changes - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} strategy: fail-fast: false @@ -124,13 +117,3 @@ jobs: 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 - - azure-primary-summary: - runs-on: ubuntu-latest-low - needs: [changes, azure-primary-tests] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.azure-primary-tests.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/object-storage-s3.yml b/.github/workflows/object-storage-s3.yml index 0bf9538b6c344..abe861386eb18 100644 --- a/.github/workflows/object-storage-s3.yml +++ b/.github/workflows/object-storage-s3.yml @@ -2,17 +2,11 @@ # SPDX-License-Identifier: MIT name: Object storage S3 on: - pull_request: - schedule: - - cron: "15 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: object-storage-s3-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -48,9 +42,8 @@ jobs: s3-primary-tests-minio: runs-on: ubuntu-latest - needs: changes - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} strategy: fail-fast: false @@ -129,13 +122,3 @@ jobs: 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 - - s3-primary-summary: - runs-on: ubuntu-latest-low - needs: [changes,s3-primary-tests-minio] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.s3-primary-tests-minio.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/object-storage-swift.yml b/.github/workflows/object-storage-swift.yml index 15152ac4f114b..2d25c0fd36189 100644 --- a/.github/workflows/object-storage-swift.yml +++ b/.github/workflows/object-storage-swift.yml @@ -2,17 +2,11 @@ # SPDX-License-Identifier: MIT name: Object storage Swift on: - pull_request: - schedule: - - cron: "15 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: object-storage-swift-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -48,9 +42,8 @@ jobs: swift-primary-tests: runs-on: ubuntu-latest - needs: changes - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} strategy: fail-fast: false @@ -120,13 +113,3 @@ jobs: 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-low - 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 diff --git a/.github/workflows/phpunit-kvstore.yml b/.github/workflows/phpunit-kvstore.yml index 3e8c4eba19bd3..f1a46bcb71757 100644 --- a/.github/workflows/phpunit-kvstore.yml +++ b/.github/workflows/phpunit-kvstore.yml @@ -4,15 +4,11 @@ name: PHPUnit key-value store on: - pull_request: + workflow_call: permissions: contents: read -concurrency: - group: phpunit-kvstore-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - env: VALKEY_IMAGE: valkey/valkey:8 @@ -38,9 +34,6 @@ jobs: phpunit-kvstore: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -125,17 +118,3 @@ jobs: if: always() run: | cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-kvstore] - - if: always() - - name: phpunit-kvstore-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-kvstore.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-mariadb.yml b/.github/workflows/phpunit-mariadb.yml index ea9bfc7677ee7..6651bad0e03f0 100644 --- a/.github/workflows/phpunit-mariadb.yml +++ b/.github/workflows/phpunit-mariadb.yml @@ -9,17 +9,11 @@ name: PHPUnit MariaDB on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-mariadb-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -53,9 +47,6 @@ jobs: phpunit-mariadb: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: diff --git a/.github/workflows/phpunit-memcached.yml b/.github/workflows/phpunit-memcached.yml index fba4cbc7fb151..453734cad7567 100644 --- a/.github/workflows/phpunit-memcached.yml +++ b/.github/workflows/phpunit-memcached.yml @@ -9,17 +9,11 @@ name: PHPUnit memcached on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-memcached-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -50,9 +44,6 @@ jobs: phpunit-memcached: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -110,17 +101,3 @@ jobs: if: always() run: | cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-memcached] - - if: always() - - name: phpunit-memcached-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-memcached.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-mysql-sharding.yml b/.github/workflows/phpunit-mysql-sharding.yml index 32771ecca0bce..da75241e07388 100644 --- a/.github/workflows/phpunit-mysql-sharding.yml +++ b/.github/workflows/phpunit-mysql-sharding.yml @@ -9,17 +9,11 @@ name: PHPUnit sharding on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-mysql-sharding-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -50,9 +44,6 @@ jobs: phpunit-mysql: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -171,17 +162,3 @@ jobs: if: always() run: | cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-mysql] - - if: always() - - name: phpunit-mysql-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml index 7ee46ef61ed84..e524f22193778 100644 --- a/.github/workflows/phpunit-mysql.yml +++ b/.github/workflows/phpunit-mysql.yml @@ -9,17 +9,11 @@ name: PHPUnit mysql on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-mysql-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -53,9 +47,6 @@ jobs: phpunit-mysql: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -139,17 +130,3 @@ jobs: if: always() run: | cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-mysql] - - if: always() - - name: phpunit-mysql-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-nodb.yml b/.github/workflows/phpunit-nodb.yml index 1cb395073021a..70ddce4d105c5 100644 --- a/.github/workflows/phpunit-nodb.yml +++ b/.github/workflows/phpunit-nodb.yml @@ -11,17 +11,11 @@ name: PHPUnit nodb on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-nodb-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -53,9 +47,6 @@ jobs: phpunit-nodb: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -117,17 +108,3 @@ jobs: if: always() run: | cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-nodb] - - if: always() - - name: phpunit-nodb-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-nodb.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-object-store-primary.yml b/.github/workflows/phpunit-object-store-primary.yml index 406890432fe0d..0a72b71c67886 100644 --- a/.github/workflows/phpunit-object-store-primary.yml +++ b/.github/workflows/phpunit-object-store-primary.yml @@ -2,17 +2,11 @@ # SPDX-License-Identifier: MIT name: PHPUnit primary object store on: - pull_request: - schedule: - - cron: "15 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-object-store-primary-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -42,9 +36,8 @@ jobs: object-store-primary-tests-minio: runs-on: ubuntu-latest - needs: changes - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} strategy: fail-fast: false diff --git a/.github/workflows/phpunit-oci.yml b/.github/workflows/phpunit-oci.yml index 994be7e8f32ae..84a4b92d7c05b 100644 --- a/.github/workflows/phpunit-oci.yml +++ b/.github/workflows/phpunit-oci.yml @@ -9,17 +9,11 @@ name: PHPUnit OCI on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-oci-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -53,8 +47,7 @@ jobs: phpunit-oci: runs-on: ubuntu-latest - needs: changes - if: ${{ needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh' }} + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} strategy: fail-fast: false @@ -135,17 +128,3 @@ jobs: - name: Run repair steps run: | ./occ maintenance:repair --include-expensive - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-oci] - - if: always() - - name: phpunit-oci-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-oci.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml index 9bf971afbbf00..5bd51a895cf62 100644 --- a/.github/workflows/phpunit-pgsql.yml +++ b/.github/workflows/phpunit-pgsql.yml @@ -9,17 +9,11 @@ name: PHPUnit PostgreSQL on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-pgsql-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -53,9 +47,6 @@ jobs: phpunit-pgsql: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -135,17 +126,3 @@ jobs: if: always() run: | cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-pgsql] - - if: always() - - name: phpunit-pgsql-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-pgsql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index 9e4fcc871c76c..33e46c649048d 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -9,17 +9,11 @@ name: PHPUnit SQLite on: - pull_request: - schedule: - - cron: "5 2 * * *" + workflow_call: permissions: contents: read -concurrency: - group: phpunit-sqlite-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - jobs: changes: runs-on: ubuntu-latest-low @@ -53,9 +47,6 @@ jobs: phpunit-sqlite: runs-on: ubuntu-latest - needs: changes - if: needs.changes.outputs.src != 'false' - strategy: fail-fast: false matrix: @@ -136,17 +127,3 @@ jobs: gs --version cat /etc/ImageMagick-6/policy.xml cat data/nextcloud.log - - summary: - permissions: - contents: none - runs-on: ubuntu-latest-low - needs: [changes, phpunit-sqlite] - - if: always() - - name: phpunit-sqlite-summary - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml new file mode 100644 index 0000000000000..60d8b05977fa3 --- /dev/null +++ b/.github/workflows/phpunit.yml @@ -0,0 +1,121 @@ +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: PHPUnit + +on: + pull_request: + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: phpunit-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +# GitHub allows a maximum of 20 reusable workflows per caller +jobs: + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src }} + resources: ${{ steps.changes.outputs.resources }} + kvstore: ${{ steps.changes.outputs.kvstore }} + + steps: + - uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3 + 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' + resources: + - 'resources/**' + kvstore: + - '.github/workflows/phpunit-kvstore.yml' + - '3rdparty/**' + - '**/appinfo/**' + - '**.php' + + mariadb: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-mariadb.yml + + memcached: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-memcached.yml + + mysql: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-mysql.yml + + mysql-sharding: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-mysql-sharding.yml + + object-store-primary: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-object-store-primary.yml + + oci: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-oci.yml + + pgsql: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-pgsql.yml + + sqlite: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/phpunit-sqlite.yml + + nodb: + needs: changes + if: needs.changes.outputs.src != 'false' || needs.changes.outputs.resources != 'false' + uses: ./.github/workflows/phpunit-nodb.yml + + kvstore: + needs: changes + if: needs.changes.outputs.kvstore != 'false' + uses: ./.github/workflows/phpunit-kvstore.yml + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, mariadb, memcached, mysql, mysql-sharding, object-store-primary, oci, pgsql, sqlite, nodb, kvstore] + + if: always() + + name: phpunit-summary + + steps: + # Skipped jobs are fine, they mean no relevant changes were detected + - name: Summary status + run: if ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}; then exit 1; fi diff --git a/.github/workflows/storage.yml b/.github/workflows/storage.yml new file mode 100644 index 0000000000000..6f88e3beb5c7e --- /dev/null +++ b/.github/workflows/storage.yml @@ -0,0 +1,102 @@ +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Storage + +on: + pull_request: + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: storage-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +# GitHub allows a maximum of 20 reusable workflows per caller +jobs: + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src }} + files-external: ${{ steps.changes.outputs.files-external }} + integration: ${{ steps.changes.outputs.integration }} + + steps: + - uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3 + id: changes + continue-on-error: true + with: + filters: | + shared: &shared + - '3rdparty/**' + - 'vendor/**' + - 'vendor-bin/**' + - 'composer.json' + - 'composer.lock' + - 'apps/files/lib/**' + - 'apps/files/tests/**' + - 'apps/files_external/**' + - 'apps/files_sharing/lib/**' + - 'apps/files_sharing/tests/**' + - 'apps/files_trashbin/lib/**' + - 'apps/files_trashbin/tests/**' + - 'apps/files_versions/lib/**' + - 'apps/files_versions/tests/**' + - 'lib/private/Files/**' + - 'lib/public/Files/**' + - 'tests/lib/Files/**' + src: + - *shared + - '.github/workflows/**' + files-external: + - *shared + - '.github/workflows/files-external.yml' + integration: + - 'build/integration/**' + + files-external: + needs: changes + if: needs.changes.outputs.files-external != 'false' + uses: ./.github/workflows/files-external.yml + + object-storage-azure: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/object-storage-azure.yml + + object-storage-s3: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/object-storage-s3.yml + + object-storage-swift: + needs: changes + if: needs.changes.outputs.src != 'false' + uses: ./.github/workflows/object-storage-swift.yml + + integration-s3-primary: + needs: changes + if: needs.changes.outputs.src != 'false' || needs.changes.outputs.integration != 'false' + uses: ./.github/workflows/integration-s3-primary.yml + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, files-external, object-storage-azure, object-storage-s3, object-storage-swift, integration-s3-primary] + + if: always() + + name: storage-summary + + steps: + # Skipped jobs are fine, they mean no relevant changes were detected + - name: Summary status + run: if ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}; then exit 1; fi