Switch to side-by-side view

--- a
+++ b/.github/workflows/update-pledge.yml
@@ -0,0 +1,48 @@
+---
+name: "Create PR to update `bin/pledge`"
+
+on:
+  workflow_dispatch:
+  schedule:
+    - cron:  "33 2 * * *"
+
+jobs:
+  create_pr_to_update_pledge:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - uses: opensafely-core/setup-action@v1
+        with:
+          install-just: true
+          python-version: "3.11"
+
+      - name: "Ensure `bin/pledge` is at latest version"
+        run: just update-pledge
+
+      - name: Generate app token
+        uses: actions/create-github-app-token@v1
+        id: generate-token
+        with:
+          app-id: 1031449  # opensafely-core Create PR app
+          private-key: ${{ secrets.CREATE_PR_APP_PRIVATE_KEY }}
+
+      - name: "Create a Pull Request if there are any changes"
+        id: create_pr
+        uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
+        with:
+          add-paths: bin/*
+          branch: bot/update-pledge
+          base: main
+          author: "opensafely-github-bot <opensafely-github-bot@users.noreply.github.com>"
+          committer: "opensafely-github-bot <opensafely-github-bot@users.noreply.github.com>"
+          commit-message: "fix: Update `bin/pledge`"
+          title: "Update `bin/pledge`"
+          token: ${{ steps.generate-token.outputs.token }}
+
+      # The PR will still require manual approval, this just reduces it to a one-click process
+      - name: Enable automerge
+        if: steps.create_pr.outputs.pull-request-operation == 'created'
+        run: gh pr merge --auto --squash ${{ steps.create_pr.outputs.pull-request-number }}
+        env:
+          GH_TOKEN: ${{ steps.generate-token.outputs.token }}