Add Drone CI pipeline for builds, checks, and auto-merge
CI / Validate scripts and pinned versions (push) Canceled after 0s
CI / Build Flatpak (push) Canceled after 0s
CI / Auto-merge update PR (push) Canceled after 0s

This commit is contained in:
2026-08-13 01:33:26 +02:00
parent 35326a0e33
commit ce328fbd1e
+198
View File
@@ -0,0 +1,198 @@
---
kind: pipeline
type: docker
name: ci
trigger:
event:
- push
- pull_request
branch:
- main
steps:
- name: check
image: alpine:3.20
commands:
- apk add --no-cache bash >/dev/null
- |
set -eu
bash -n build.sh check-versions.sh update-version.sh versions.sh
./check-versions.sh
- name: build
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-24.08
privileged: true
commands:
- |
set -eu
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install -y flathub org.electronjs.Electron2.BaseApp//24.08
flatpak-builder --repo=repo --force-clean build-dir nz.scuttlebutt.Patchwork.yaml
- name: merge
image: alpine:3.20
when:
event:
- pull_request
environment:
GITHUB_TOKEN:
from_secret: github_token
commands:
- apk add --no-cache curl jq >/dev/null
- |
set -eu
PR=$(curl -fsSL -H "Authorization: token ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${DRONE_REPO}/pulls/${DRONE_PULL_REQUEST}") || exit 0
STATE=$(printf '%s' "$PR" | jq -r '.state')
HEAD_REF=$(printf '%s' "$PR" | jq -r '.head.ref')
MERGEABLE=$(printf '%s' "$PR" | jq -r '.mergeable_state')
HAS_LABEL=$(printf '%s' "$PR" | jq -r 'has("labels") and ([.labels[].name] | index("automerge") != null)')
case "$HEAD_REF" in
update-patchwork-*) ;;
*)
echo "skipping auto-merge (head=${HEAD_REF})"
exit 0
;;
esac
if [ "$STATE" != "open" ] || [ "$MERGEABLE" != "clean" ] || [ "$HAS_LABEL" != "true" ]; then
echo "skipping auto-merge (state=${STATE} mergeable=${MERGEABLE} label=${HAS_LABEL})"
exit 0
fi
curl -fsSL -X PUT -H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/${DRONE_REPO}/pulls/${DRONE_PULL_REQUEST}/merge" \
-d '{"merge_method":"squash","delete_branch":true}'
echo "Merged PR #${DRONE_PULL_REQUEST}"
---
kind: pipeline
type: docker
name: update
trigger:
event:
- cron
cron:
- nightly
steps:
- name: bump
image: alpine:3.20
environment:
GITHUB_TOKEN:
from_secret: github_token
commands:
- apk add --no-cache git curl jq bash >/dev/null
- |
set -eu
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
bash update-version.sh
if git diff --quiet; then
echo "No upstream changes."
exit 0
fi
. ./versions.sh
BRANCH="update-patchwork-${APP_VERSION}"
REMOTE="https://${GITHUB_TOKEN}@github.com/${DRONE_REPO}.git"
if git ls-remote --heads "$REMOTE" "refs/heads/${BRANCH}" | grep -q "refs/heads/${BRANCH}$"; then
echo "Branch ${BRANCH} already exists (a PR is probably open); nothing to do."
exit 0
fi
git checkout -b "${BRANCH}"
git add versions.sh nz.scuttlebutt.Patchwork.yaml nz.scuttlebutt.Patchwork.metainfo.xml
git commit -m "Update Patchwork to ${APP_VERSION}"
git push "$REMOTE" "${BRANCH}"
BODY=$(cat <<EOF
Bump the pinned Patchwork (Poncho Wonky) release to **${APP_VERSION}**.
- x86_64 sha256: \`${APP_SHA256_X86_64}\`
- aarch64 sha256: \`${APP_SHA256_AARCH64}\`
See https://github.com/soapdog/patchwork/releases/tag/v${APP_VERSION}
CI builds the manifest and this PR auto-merges once the checks pass.
EOF
)
PR_JSON=$(curl -fsSL -X POST -H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/${DRONE_REPO}/pulls" \
-d "$(jq -n --arg t "Update Patchwork to ${APP_VERSION}" \
--arg h "${BRANCH}" --arg b "main" --arg body "$BODY" \
'{title:$t, head:$h, base:$b, body:$body}')")
PR_NUMBER=$(printf '%s' "$PR_JSON" | jq -r '.number')
if [ -z "$PR_NUMBER" ] || [ "$PR_NUMBER" = "null" ]; then
echo "PR creation failed:"
printf '%s\n' "$PR_JSON"
exit 1
fi
curl -fsSL -X POST -H "Authorization: token ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${DRONE_REPO}/issues/${PR_NUMBER}/labels" \
-d '{"labels":["automerge"]}'
echo "Opened PR #${PR_NUMBER} (${BRANCH})"
---
kind: pipeline
type: docker
name: update-manual
trigger:
event:
- custom
steps:
- name: bump
image: alpine:3.20
environment:
GITHUB_TOKEN:
from_secret: github_token
commands:
- apk add --no-cache git curl jq bash >/dev/null
- |
set -eu
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
bash update-version.sh
if git diff --quiet; then
echo "No upstream changes."
exit 0
fi
. ./versions.sh
BRANCH="update-patchwork-${APP_VERSION}"
REMOTE="https://${GITHUB_TOKEN}@github.com/${DRONE_REPO}.git"
if git ls-remote --heads "$REMOTE" "refs/heads/${BRANCH}" | grep -q "refs/heads/${BRANCH}$"; then
echo "Branch ${BRANCH} already exists (a PR is probably open); nothing to do."
exit 0
fi
git checkout -b "${BRANCH}"
git add versions.sh nz.scuttlebutt.Patchwork.yaml nz.scuttlebutt.Patchwork.metainfo.xml
git commit -m "Update Patchwork to ${APP_VERSION}"
git push "$REMOTE" "${BRANCH}"
BODY=$(cat <<EOF
Bump the pinned Patchwork (Poncho Wonky) release to **${APP_VERSION}**.
- x86_64 sha256: \`${APP_SHA256_X86_64}\`
- aarch64 sha256: \`${APP_SHA256_AARCH64}\`
See https://github.com/soapdog/patchwork/releases/tag/v${APP_VERSION}
CI builds the manifest and this PR auto-merges once the checks pass.
EOF
)
PR_JSON=$(curl -fsSL -X POST -H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/${DRONE_REPO}/pulls" \
-d "$(jq -n --arg t "Update Patchwork to ${APP_VERSION}" \
--arg h "${BRANCH}" --arg b "main" --arg body "$BODY" \
'{title:$t, head:$h, base:$b, body:$body}')")
PR_NUMBER=$(printf '%s' "$PR_JSON" | jq -r '.number')
if [ -z "$PR_NUMBER" ] || [ "$PR_NUMBER" = "null" ]; then
echo "PR creation failed:"
printf '%s\n' "$PR_JSON"
exit 1
fi
curl -fsSL -X POST -H "Authorization: token ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${DRONE_REPO}/issues/${PR_NUMBER}/labels" \
-d '{"labels":["automerge"]}'
echo "Opened PR #${PR_NUMBER} (${BRANCH})"