at main 2.0 kB view raw
1# run moderation loop via workflow dispatch 2# 3# analyzes pending copyright flags, auto-resolves false positives, 4# creates review batches for human review, sends DM notification 5# 6# required secrets: 7# MODERATION_SERVICE_URL - moderation service base URL 8# MODERATION_AUTH_TOKEN - X-Moderation-Key header value 9# ANTHROPIC_API_KEY - for flag analysis 10# NOTIFY_BOT_HANDLE - bluesky bot handle for DMs 11# NOTIFY_BOT_PASSWORD - bluesky bot app password 12# NOTIFY_RECIPIENT_HANDLE - who receives DM notifications 13 14name: run moderation loop 15 16on: 17 workflow_dispatch: 18 inputs: 19 dry_run: 20 description: "dry run (analyze only, don't resolve or send DMs)" 21 type: boolean 22 default: true 23 limit: 24 description: "max flags to process (leave empty for all)" 25 type: string 26 default: "" 27 env: 28 description: "environment (for DM header)" 29 type: choice 30 options: 31 - prod 32 - staging 33 - dev 34 default: prod 35 36jobs: 37 run: 38 runs-on: ubuntu-latest 39 40 steps: 41 - uses: actions/checkout@v4 42 43 - uses: astral-sh/setup-uv@v4 44 45 - name: Run moderation loop 46 run: | 47 ARGS="" 48 if [ "${{ inputs.dry_run }}" = "true" ]; then 49 ARGS="$ARGS --dry-run" 50 fi 51 if [ -n "${{ inputs.limit }}" ]; then 52 ARGS="$ARGS --limit ${{ inputs.limit }}" 53 fi 54 ARGS="$ARGS --env ${{ inputs.env }}" 55 56 echo "Running: uv run scripts/moderation_loop.py $ARGS" 57 uv run scripts/moderation_loop.py $ARGS 58 env: 59 MODERATION_SERVICE_URL: ${{ secrets.MODERATION_SERVICE_URL }} 60 MODERATION_AUTH_TOKEN: ${{ secrets.MODERATION_AUTH_TOKEN }} 61 ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} 62 NOTIFY_BOT_HANDLE: ${{ secrets.NOTIFY_BOT_HANDLE }} 63 NOTIFY_BOT_PASSWORD: ${{ secrets.NOTIFY_BOT_PASSWORD }} 64 NOTIFY_RECIPIENT_HANDLE: ${{ secrets.NOTIFY_RECIPIENT_HANDLE }}