# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: MIT name: Update 3rdparty command on: issue_comment: types: created permissions: contents: read jobs: rebase: runs-on: ubuntu-latest permissions: contents: none pull-requests: read # On pull requests and if the comment starts with `/update-3rdparty` if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/update-3rdparty') steps: - name: Add reaction on start uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v3.0.1 with: token: ${{ secrets.COMMAND_BOT_PAT }} repository: ${{ github.event.repository.full_name }} comment-id: ${{ github.event.comment.id }} reactions: '+1' # issue_comment events carry no pull_request context in their payload, so we # must fetch the PR via the API. This also gives us base.ref for free, avoiding # a second API call. The GITHUB_TOKEN needs pull-requests:read (granted above). - name: Get pull request metadata uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 id: get-pr with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const pull = await github.rest.pulls.get({ owner: context.repo.owner, repo: context.repo.repo, pull_number: context.issue.number, }); core.setOutput('head_repo', pull.data.head.repo?.full_name ?? ''); core.setOutput('base_ref', pull.data.base.ref); - name: Disabled on forks if: steps.get-pr.outputs.head_repo != github.repository run: | echo 'Can not execute /update-3rdparty on forks' exit 1 - name: Init branch uses: xt0rted/pull-request-comment-branch@e8b8daa837e8ea7331c0003c9c316a64c6d8b0b1 # v1 id: comment-branch - name: Checkout ${{ steps.comment-branch.outputs.head_ref }} uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false fetch-depth: 0 token: ${{ secrets.COMMAND_BOT_PAT }} ref: ${{ steps.comment-branch.outputs.head_ref }} - name: Register server reference to fallback to master branch run: | base_ref="${{ steps.get-pr.outputs.base_ref }}" if [[ "$base_ref" == "main" || "$base_ref" == "master" ]]; then echo "server_ref=master" >> "$GITHUB_ENV" echo "Setting server_ref to master" elif [[ "$base_ref" =~ ^stable[0-9]+$ ]]; then echo "server_ref=$base_ref" >> "$GITHUB_ENV" echo "Setting server_ref to $base_ref" else echo "Not based on master/main/stable*, so skipping pull 3rdparty command" fi - name: Setup git run: | git config --local user.email 'nextcloud-command@users.noreply.github.com' git config --local user.name 'nextcloud-command' - name: Add reaction on failure uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v3.0.1 if: ${{ env.server_ref == '' }} with: token: ${{ secrets.COMMAND_BOT_PAT }} repository: ${{ github.event.repository.full_name }} comment-id: ${{ github.event.comment.id }} reactions: '-1' - name: Pull 3rdparty if: ${{ env.server_ref != '' }} run: git submodule foreach 'if [ "$sm_path" == "3rdparty" ]; then git pull origin '"'"'${{ env.server_ref }}'"'"'; fi' - name: Commit and push changes if: ${{ env.server_ref != '' }} run: | git add 3rdparty git commit -s -m 'Update submodule 3rdparty to latest ${{ env.server_ref }}' git push - name: Add reaction on failure uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v3.0.1 if: failure() with: token: ${{ secrets.COMMAND_BOT_PAT }} repository: ${{ github.event.repository.full_name }} comment-id: ${{ github.event.comment.id }} reactions: '-1'