# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: MIT name: Block merging with outdated 3rdparty/ on: pull_request: types: [opened, ready_for_review, reopened, synchronize] permissions: contents: read concurrency: group: block-outdated-3rdparty-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: block-outdated-3rdparty: name: Block merging with outdated 3rdparty/ runs-on: ubuntu-latest-low steps: - name: Check requirement uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 id: changes continue-on-error: true with: filters: | src: - '3rdparty' - 'version.php' - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: 3rdparty commit hash on current branch id: actual run: | echo "commit=$(git submodule status | grep ' 3rdparty' | egrep -o '[a-f0-9]{40}')" >> "$GITHUB_OUTPUT" - name: Register server reference to fallback to master branch uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | const baseRef = context.payload.pull_request.base.ref if (baseRef === 'main' || baseRef === 'master') { core.exportVariable('server_ref', 'master'); console.log('Setting server_ref to master'); } else { const regex = /^stable(\d+)$/ const match = baseRef.match(regex) if (match) { core.exportVariable('server_ref', match[0]); console.log('Setting server_ref to ' + match[0]); } else { console.log('Not based on master/main/stable*, so skipping outdated 3rdparty check'); } } - name: Last 3rdparty commit on target branch if: ${{ env.server_ref != '' }} id: target run: | echo "commit=$(git ls-remote https://github.com/nextcloud/3rdparty refs/heads/${{ env.server_ref }} | awk '{ print $1}')" >> "$GITHUB_OUTPUT" - name: Compare if 3rdparty commits are different if: ${{ env.server_ref != '' }} run: | echo '3rdparty/ seems to not point to the last commit of the dedicated branch:' echo 'Branch has: ${{ steps.actual.outputs.commit }}' echo '${{ env.server_ref }} has: ${{ steps.target.outputs.commit }}' - name: Fail if 3rdparty commits are different if: ${{ env.server_ref != '' && steps.changes.outputs.src != 'false' && steps.actual.outputs.commit != steps.target.outputs.commit }} run: | exit 1