Add validated repository patch transport
This commit is contained in:
@@ -0,0 +1,71 @@
|
|||||||
|
---BEGIN WORKFLOW---
|
||||||
|
ame: AzerothAI Validated Patch
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
patch_file:
|
||||||
|
description: Patch file under ops/patches/
|
||||||
|
required: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
patch:
|
||||||
|
runs-on: azerothai-host
|
||||||
|
timeout-minutes: 10
|
||||||
|
|
||||||
|
env:
|
||||||
|
PATCH_FILE: ${{ inputs.patch_file }}
|
||||||
|
AZEROTH_ACTOR: ${{ gitea.actor }}
|
||||||
|
AZEROTH_REPOSITORY: ${{ gitea.repository }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Verify authorized request
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
[ "$AZEROTH_ACTOR" = "richard" ] || {
|
||||||
|
echo "Unauthorized actor: $AZEROTH_ACTOR"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ "$AZEROTH_REPOSITORY" = "richard/AzerothAI" ] || {
|
||||||
|
echo "Wrong repository: $AZEROTH_REPOSITORY"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
base="${PATCH_FILE#ops/patches/}"
|
||||||
|
|
||||||
|
[ "$base" != "$PATCH_FILE" ] || {
|
||||||
|
echo "Patch must be under ops/patches/"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "$base" != */* ]] || {
|
||||||
|
echo "Nested patch paths are not allowed"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "$base" =~ ^[A-Za-z0-9][A-Za-z0-9._-]*\.patch$ ]] || {
|
||||||
|
echo "Invalid patch filename"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Check out patch source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Apply validated patch
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
[ -f "$PATCH_FILE" ] || {
|
||||||
|
echo "Patch file not found: $PATCH_FILE"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
sha="$(sha256sum "$PATCH_FILE" | awk '{print $1}')"
|
||||||
|
payload="$(base64 -w0 "$PATCH_FILE")"
|
||||||
|
|
||||||
|
sudo -n /usr/local/bin/azerothai-ops "apply-patch:${sha}:${payload}"
|
||||||
|
---END WORKFLOW---
|
||||||
Reference in New Issue
Block a user