From 321fbe071bf89c7188bf6fe95feec418ca26243a Mon Sep 17 00:00:00 2001 From: Yuri Volkov <0@mcornholio.ru> Date: Mon, 30 Oct 2023 11:49:15 +0100 Subject: [PATCH 1/2] Adding gitspiegel-trigger workflow (#2661) Using a workflow to trigger mirroring instead of a webhook allows us to reuse "Approving workflow runs from public forks" GitHub feature to somewhat protect us from malicious PRs --- .github/workflows/gitspiegel-trigger.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/gitspiegel-trigger.yml diff --git a/.github/workflows/gitspiegel-trigger.yml b/.github/workflows/gitspiegel-trigger.yml new file mode 100644 index 0000000000..86980756ef --- /dev/null +++ b/.github/workflows/gitspiegel-trigger.yml @@ -0,0 +1,20 @@ +name: gitspiegel sync + +on: + pull_request: + types: + - opened + - synchronize + - unlocked + - ready_for_review + - reopened + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: Trigger sync via API + run: | + curl --fail-with-body -XPOST "https://gitspiegel.parity-prod.parity.io/api/v1/mirror/${{ github.repository }}/pull/${{ github.event.number }}" \ + -H "Content-Type: application/json" \ + -H "x-auth: ${{ secrets.GITSPIEGEL_TOKEN }}" From bf95ea0781fb036db789b17f0c17558f1c084b49 Mon Sep 17 00:00:00 2001 From: Yuri Volkov <0@mcornholio.ru> Date: Wed, 8 Nov 2023 14:20:13 +0100 Subject: [PATCH 2/2] Fixing gitspiegel trigger workflow (#2679) The first attept to use a workflow to protect GitLab CI from untrusted contributors failed, because GitHub doesn't pass secrets to workflows for PRs that originate from forks. This uses a different approach: instead of triggerring gitspiegel API directly from the workflow, we're just spawning an empty workflow with a specific path, and gitspiegel listens for `workflow_run` event to start mirroring. The idea is the same: for the first-time contributors, running workflows would require manual aciton and that would block mirroring. But this time, we don't need any secrets to make it work. --- .github/workflows/gitspiegel-trigger.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gitspiegel-trigger.yml b/.github/workflows/gitspiegel-trigger.yml index 86980756ef..dce3aaf2fe 100644 --- a/.github/workflows/gitspiegel-trigger.yml +++ b/.github/workflows/gitspiegel-trigger.yml @@ -1,5 +1,10 @@ name: gitspiegel sync +# This workflow doesn't do anything, it's only use is to trigger "workflow_run" +# webhook, that'll be consumed by gitspiegel +# This way, gitspiegel won't do mirroring, unless this workflow runs, +# and running the workflow is protected by GitHub + on: pull_request: types: @@ -13,8 +18,5 @@ jobs: sync: runs-on: ubuntu-latest steps: - - name: Trigger sync via API - run: | - curl --fail-with-body -XPOST "https://gitspiegel.parity-prod.parity.io/api/v1/mirror/${{ github.repository }}/pull/${{ github.event.number }}" \ - -H "Content-Type: application/json" \ - -H "x-auth: ${{ secrets.GITSPIEGEL_TOKEN }}" + - name: Do nothing + run: echo "let's go"