name: Issue Ops Runner
on:
issues:
types: [labeled]
permissions:
contents: write
issues: write
jobs:
run-task:
if: github.event.label.name == 'ops'
runs-on: ubuntu-latest
steps:
- name: Parse task from title
id: parse
run: |
# Title examples:
# ops: issues:sync
# ops: run:script tools/autopush.sh
title="${{ github.event.issue.title }}"
echo "title=$title"
task="${title#ops: }"
echo "task=$task" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install deps (best effort)
run: |
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
pip install requests pyyaml || true
- name: Run task
id: task
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
TASK: ${{ steps.parse.outputs.task }}
run: |
set -euo pipefail
echo "TASK=$TASK"
case "$TASK" in
"issues:sync")
python tools/issue_sync.py
;;
run:script\ *)
S="${TASK#run:script }"
chmod +x "$S"
"$S"
;;
*)
echo "Unknown task: $TASK"
exit 2
;;
esac
continue-on-error: true
- name: Comment result
if: always()
uses: actions/github-script@v7
with:
script: |
const issue_number = context.payload.issue.number;
const steps = context.payload.workflow_run ? context.payload.workflow_run.conclusion : null;
const outcome = "${{ steps.task.outcome }}";
const conclusion = "${{ job.status }}";
const ok = conclusion === "success";
const msg = ok
? "✅ Ops task completed successfully."
: "⚠️ Ops task finished with issues.";
const logs = `Task: \`${{ steps.parse.outputs.task }}\`\nJob status: \`${conclusion}\``;
await github.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number,
body: `${msg}\n\n${logs}`
});
name: Issue Ops Runner
on:
issues:
types: [labeled]
permissions:
contents: write
issues: write
jobs:
run-task:
if: github.event.label.name == 'ops'
runs-on: ubuntu-latest
steps:
- name: Parse task from title
id: parse
run: |
# Title examples:
# ops: issues:sync
# ops: run:script tools/autopush.sh
title="${{ github.event.issue.title }}"
echo "title=$title"
task="${title#ops: }"
echo "task=$task" >> $GITHUB_OUTPUT