diff --git a/.github/workflows/sync-to-incus.yml b/.github/workflows/sync-to-incus.yml new file mode 100644 index 000000000..31a5cfe29 --- /dev/null +++ b/.github/workflows/sync-to-incus.yml @@ -0,0 +1,49 @@ +name: Sync ct/install to Incus + +# When a ct/*.sh or install/*.sh file changes on main, trigger the Incus repo's +# own sync workflow immediately instead of waiting for its daily 04:00 cron. +# +# The actual mirroring + transformation lives in community-scripts/Incus +# (.github/workflows/sync-scripts.yml): it rewrites each script's bootstrap line +# to load the engine from community-scripts/core (ProxmoxVE's misc/build.func is +# a monolith with no Incus backend), so a plain 1:1 copy would break every Incus +# script. We therefore only fire a repository_dispatch and let that single +# source of truth do the work (and auto-approve + merge its own PR). +# +# Auth: secrets.PAT_AUTOMERGE (org secret, scope ALL) - the same dedicated-PAT +# convention the Incus repo already uses to dispatch to core. It needs +# contents:write on community-scripts/Incus. + +on: + push: + branches: + - main + paths: + - "ct/**.sh" + - "install/**.sh" + workflow_dispatch: + +concurrency: + group: sync-to-incus + cancel-in-progress: false + +jobs: + dispatch: + if: github.repository == 'community-scripts/ProxmoxVE' + runs-on: ubuntu-latest + steps: + - name: Trigger Incus sync workflow + env: + GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }} + SOURCE_SHA: ${{ github.sha }} + run: | + set -euo pipefail + if [ -z "${GH_TOKEN:-}" ]; then + echo "::error::PAT_AUTOMERGE is not available to this repo." + exit 1 + fi + echo "Dispatching proxmoxve-scripts-changed to community-scripts/Incus (from ${SOURCE_SHA})" + gh api repos/community-scripts/Incus/dispatches \ + -X POST \ + -f "event_type=proxmoxve-scripts-changed" \ + -F "client_payload[sha]=${SOURCE_SHA}"