Skip to content

“Ops from Issues” + reply with the result #141

@blackboxprogramming

Description

@blackboxprogramming

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}`
        });

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions