mirror of
https://github.com/warpdotdev/warp.git
synced 2026-05-06 23:32:51 +08:00
ci: remove GitHub Actions workflows now served by Vercel webhook (#9466)
## Description Removes the local-adapter GitHub Actions workflows that delegate to reusable workflows in `warpdotdev/oz-for-oss`. Those reusable workflows are being migrated to a Vercel-hosted webhook + cron control plane in [warpdotdev/oz-for-oss#400](https://github.com/warpdotdev/oz-for-oss/pull/400), so once the webhook is the active delivery surface for this repo, the local adapters here are redundant. The set of removed workflows mirrors what `oz-for-oss#400` actually deletes from `oz-for-oss/.github/workflows/`. Routing is documented in `oz-for-oss/lib/routing.py`, which states that the legacy GitHub Actions adapters are "deleted as routing moves into this module so the webhook does not race the runner." Workflows removed (each one matches a delivery surface that the new webhook now owns or whose upstream reusable workflow is being deleted): - `.github/workflows/review-pull-request.yml` — PR `opened` / `ready_for_review` / `review_requested` / `labeled` / `/oz-review`. - `.github/workflows/enforce-pr-issue-state.yml` — PR `synchronize` / `edited`. - `.github/workflows/respond-to-pr-comment-local.yml` — `@oz-agent` mentions on PRs and review threads. - `.github/workflows/verify-pr-comment-local.yml` — `/oz-verify` on PRs. - `.github/workflows/triage-new-issues-local.yml` — `issues.opened`, `@oz-agent` mention on a non-`triaged` issue, and `needs-info` reporter replies. - `.github/workflows/create-spec-from-issue-local.yml` — `issues.assigned` / `issues.labeled` with `ready-to-spec` and `oz-agent` assigned, plus `@oz-agent` mention with that lifecycle label. - `.github/workflows/create-implementation-from-issue-local.yml` — `issues.assigned` / `issues.labeled` with `ready-to-implement` and `oz-agent` assigned, plus the `plan-approved` follow-through path. - `.github/workflows/trigger-implementation-on-plan-approved-local.yml` — `pull_request_target.labeled` with `plan-approved`; the webhook handles the spec-approved comment, `ready-to-spec` label removal, and `create-implementation-from-issue` dispatch inline. - `.github/workflows/remove-stale-issue-labels-on-plan-approved-local.yml` — upstream reusable workflow is deleted in `oz-for-oss#400`; the label cleanup is handled inline by the webhook's `plan-approved` route. Workflows intentionally retained (still flow through GitHub Actions, per `oz-for-oss/lib/routing.py`): - `respond-to-triaged-issue-comment-local.yml` — `@oz-agent` mentions on already-`triaged` issues continue to flow through this workflow until it is migrated in a follow-up. - `comment-on-unready-assigned-issue-local.yml` — the upstream `comment-on-unready-assigned-issue` workflow is intentionally kept as the complement to the webhook's `issues.assigned` route. - `update-dedupe-local.yml`, `update-pr-review-local.yml`, `update-triage-local.yml` — cron-driven feedback aggregators that are not part of the webhook delivery surface. ## Testing This is a delete-only change to GitHub Actions workflow YAMLs; there is no code path to test locally. End-to-end verification happens on the receiving side: once `oz-for-oss#400` is merged and the GitHub App webhook URL is flipped to the Vercel control plane, the same triggers (PR opened, `@oz-agent` mention, `/oz-verify`, `issues.assigned`, `plan-approved` label, etc.) should be delivered through the webhook rather than these workflows. ## Server API dependencies N/A — no client/server changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode ## Changelog Entries for Stable <!-- No user-facing change; intentionally no changelog entry. --> _Conversation: https://staging.warp.dev/conversation/8de8bc89-f3a0-44eb-94b0-a16a4c5c912c_ _Run: https://oz.staging.warp.dev/runs/019dda90-b585-70a3-a02b-a9e04f332e13_ _This PR was generated with [Oz](https://warp.dev/oz)._ --------- Co-authored-by: Oz <oz-agent@warp.dev>
This commit is contained in:
@@ -1,34 +0,0 @@
|
||||
name: Create Implementation from Issue (Local)
|
||||
on:
|
||||
issues:
|
||||
types: [assigned, labeled]
|
||||
issue_comment:
|
||||
types: [created]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
issue_number:
|
||||
description: Issue number to create an implementation for
|
||||
required: true
|
||||
type: string
|
||||
concurrency:
|
||||
group: create-implementation-issue-${{ github.event.issue.number || inputs.issue_number || github.run_id }}
|
||||
cancel-in-progress: false
|
||||
jobs:
|
||||
# Mention, bot, event-type, and trust gates all live in the reusable
|
||||
# workflow (``create-implementation-from-issue.yml``). This adapter
|
||||
# exists only to subscribe to the GitHub events that can trigger
|
||||
# implementation work (``issues`` assign/label by a maintainer, or a
|
||||
# trusted ``@oz-agent`` issue comment) and delegate them through
|
||||
# ``workflow_call``.
|
||||
create_implementation:
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/create-implementation-from-issue.yml@main
|
||||
with:
|
||||
issue_number: ${{ github.event.inputs.issue_number || '' }}
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
@@ -1,34 +0,0 @@
|
||||
name: Create Spec from Issue (Local)
|
||||
on:
|
||||
issues:
|
||||
types: [assigned, labeled]
|
||||
issue_comment:
|
||||
types: [created]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
issue_number:
|
||||
description: Issue number to create a spec for
|
||||
required: true
|
||||
type: string
|
||||
concurrency:
|
||||
group: create-spec-issue-${{ github.event.issue.number || inputs.issue_number || github.run_id }}
|
||||
cancel-in-progress: false
|
||||
jobs:
|
||||
# Mention, bot, event-type, and trust gates all live in the reusable
|
||||
# workflow (``create-spec-from-issue.yml``). This adapter exists only
|
||||
# to subscribe to the GitHub events that can trigger spec creation
|
||||
# (``issues`` assign/label by a maintainer, or a trusted
|
||||
# ``@oz-agent`` issue comment) and delegate them through
|
||||
# ``workflow_call``.
|
||||
create_spec:
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/create-spec-from-issue.yml@main
|
||||
with:
|
||||
issue_number: ${{ github.event.inputs.issue_number || '' }}
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
39
.github/workflows/enforce-pr-issue-state.yml
vendored
39
.github/workflows/enforce-pr-issue-state.yml
vendored
@@ -1,39 +0,0 @@
|
||||
name: Enforce PR Issue State Logic
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: Pull request number to evaluate
|
||||
required: true
|
||||
type: string
|
||||
requester:
|
||||
description: Login of the user whose action triggered enforcement, if any
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID:
|
||||
required: true
|
||||
OZ_MGMT_GHA_PRIVATE_KEY:
|
||||
required: true
|
||||
OSS_WARP_API_KEY:
|
||||
required: true
|
||||
outputs:
|
||||
allow_review:
|
||||
description: Whether downstream PR hooks may continue after enforcement.
|
||||
value: ${{ jobs.enforce_issue_state.outputs.allow_review }}
|
||||
jobs:
|
||||
enforce_issue_state:
|
||||
name: Enforce PR issue state
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/enforce-pr-issue-state.yml@main
|
||||
with:
|
||||
pr_number: ${{ inputs.pr_number }}
|
||||
requester: ${{ inputs.requester }}
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
@@ -1,20 +0,0 @@
|
||||
name: Remove Stale Issue Labels on Plan Approved (Local)
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [labeled]
|
||||
concurrency:
|
||||
group: remove-stale-labels-${{ github.event.pull_request.number || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
remove_stale_labels:
|
||||
if: github.event.label.name == 'plan-approved'
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: read
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/remove-stale-issue-labels-on-plan-approved.yml@main
|
||||
with:
|
||||
pr_number: ${{ github.event.pull_request.number }}
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
@@ -1,24 +0,0 @@
|
||||
name: Respond to PR Comment (Local)
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
jobs:
|
||||
# Mention, bot, event-type, and trust gates all live in the reusable
|
||||
# workflow (``respond-to-pr-comment.yml``). This adapter exists only
|
||||
# to subscribe to the three GitHub events that can carry an
|
||||
# ``@oz-agent`` mention on a PR and delegate them through
|
||||
# ``workflow_call``.
|
||||
respond:
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/respond-to-pr-comment.yml@main
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
129
.github/workflows/review-pull-request.yml
vendored
129
.github/workflows/review-pull-request.yml
vendored
@@ -1,129 +0,0 @@
|
||||
name: Review Pull Request
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: Pull request number to review
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
trigger_source:
|
||||
description: Source that requested the review
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
requester:
|
||||
description: Login of the user who requested the review, if any
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
comment_id:
|
||||
description: Issue comment ID to react to for slash-command reviews
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID:
|
||||
required: true
|
||||
OZ_MGMT_GHA_PRIVATE_KEY:
|
||||
required: true
|
||||
OSS_WARP_API_KEY:
|
||||
required: true
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- ready_for_review
|
||||
- review_requested
|
||||
- labeled
|
||||
jobs:
|
||||
resolve:
|
||||
runs-on: ubuntu-slim
|
||||
permissions:
|
||||
contents: read
|
||||
outputs:
|
||||
should_run: ${{ steps.resolve.outputs.should_run }}
|
||||
pr_number: ${{ steps.resolve.outputs.pr_number }}
|
||||
trigger_source: ${{ steps.resolve.outputs.trigger_source }}
|
||||
requester: ${{ steps.resolve.outputs.requester }}
|
||||
comment_id: ${{ steps.resolve.outputs.comment_id }}
|
||||
skip_reason: ${{ steps.resolve.outputs.skip_reason }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||
- name: Resolve review context
|
||||
id: resolve
|
||||
env:
|
||||
INPUT_PR_NUMBER: ${{ inputs.pr_number || '' }}
|
||||
INPUT_TRIGGER_SOURCE: ${{ inputs.trigger_source || '' }}
|
||||
INPUT_REQUESTER: ${{ inputs.requester || '' }}
|
||||
INPUT_COMMENT_ID: ${{ inputs.comment_id || '' }}
|
||||
GITHUB_ACTOR_LOGIN: ${{ github.actor }}
|
||||
run: |
|
||||
python - <<'PY'
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
event = json.loads(Path(os.environ["GITHUB_EVENT_PATH"]).read_text())
|
||||
event_name = os.environ.get("GITHUB_EVENT_NAME", "")
|
||||
input_pr_number = os.environ.get("INPUT_PR_NUMBER", "").strip()
|
||||
pr = event.get("pull_request") or {}
|
||||
head_ref = ((pr.get("head") or {}).get("ref") or "").strip()
|
||||
action = (event.get("action") or "").strip()
|
||||
requested_reviewer = ((event.get("requested_reviewer") or {}).get("login") or "").strip()
|
||||
label_name = ((event.get("label") or {}).get("name") or "").strip()
|
||||
has_pr_hooks = Path(".github/workflows/pr-hooks.yml").exists()
|
||||
trigger_source = os.environ.get("INPUT_TRIGGER_SOURCE", "").strip() or event_name
|
||||
requester = os.environ.get("INPUT_REQUESTER", "").strip() or os.environ.get("GITHUB_ACTOR_LOGIN", "")
|
||||
comment_id = os.environ.get("INPUT_COMMENT_ID", "")
|
||||
pr_number = input_pr_number or str(pr.get("number") or "")
|
||||
matches_direct_trigger = (
|
||||
(action == "opened" and not pr.get("draft", False))
|
||||
or action == "ready_for_review"
|
||||
or (action == "review_requested" and requested_reviewer == "oz-agent")
|
||||
or (action == "labeled" and label_name == "oz-review")
|
||||
)
|
||||
if input_pr_number:
|
||||
should_run = True
|
||||
elif head_ref.startswith("cherrypick"):
|
||||
should_run = False
|
||||
elif has_pr_hooks and event_name == "pull_request_target":
|
||||
should_run = False
|
||||
else:
|
||||
should_run = matches_direct_trigger and bool(pr_number)
|
||||
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as fh:
|
||||
fh.write(f"should_run={'true' if should_run else 'false'}\n")
|
||||
fh.write(f"pr_number={pr_number}\n")
|
||||
fh.write(f"trigger_source={trigger_source}\n")
|
||||
fh.write(f"requester={requester}\n")
|
||||
fh.write(f"comment_id={comment_id}\n")
|
||||
if has_pr_hooks and event_name == "pull_request_target" and not input_pr_number:
|
||||
fh.write("skip_reason=pr-hooks-present\n")
|
||||
elif head_ref.startswith("cherrypick"):
|
||||
fh.write("skip_reason=cherrypick-branch\n")
|
||||
elif not should_run:
|
||||
fh.write("skip_reason=event-not-enabled\n")
|
||||
PY
|
||||
skip_direct_trigger:
|
||||
needs: resolve
|
||||
if: needs.resolve.outputs.should_run != 'true' && needs.resolve.outputs.skip_reason == 'pr-hooks-present'
|
||||
runs-on: ubuntu-slim
|
||||
steps:
|
||||
- name: Explain skip
|
||||
run: echo "PR review orchestration skipped because .github/workflows/pr-hooks.yml is present."
|
||||
review_pr:
|
||||
needs: resolve
|
||||
if: needs.resolve.outputs.should_run == 'true'
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
issues: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/review-pull-request.yml@main
|
||||
with:
|
||||
pr_number: ${{ needs.resolve.outputs.pr_number }}
|
||||
trigger_source: ${{ needs.resolve.outputs.trigger_source }}
|
||||
requester: ${{ needs.resolve.outputs.requester }}
|
||||
comment_id: ${{ needs.resolve.outputs.comment_id }}
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
60
.github/workflows/triage-new-issues-local.yml
vendored
60
.github/workflows/triage-new-issues-local.yml
vendored
@@ -1,60 +0,0 @@
|
||||
name: Triage New Issues (Local)
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
issue_comment:
|
||||
types: [created]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
issue_number:
|
||||
description: Optional issue number to triage immediately
|
||||
required: false
|
||||
default: ''
|
||||
type: string
|
||||
lookback_minutes:
|
||||
description: Minutes of issue history to scan when no issue number is provided
|
||||
required: false
|
||||
default: '60'
|
||||
type: string
|
||||
concurrency:
|
||||
group: triage-new-issues-${{ github.event.issue.number || inputs.issue_number || github.run_id }}
|
||||
cancel-in-progress: false
|
||||
jobs:
|
||||
triage_issues:
|
||||
# A needs-info reply by the original reporter triggers re-triage
|
||||
# even if it mentions @oz-agent, because the respond-to-triaged
|
||||
# workflow handles explicit mentions on triaged issues separately.
|
||||
if: |
|
||||
(
|
||||
github.event_name != 'issue_comment' &&
|
||||
!contains(github.event.issue.labels.*.name, 'triaged') &&
|
||||
!contains(github.event.issue.labels.*.name, 'ready-to-spec') &&
|
||||
!contains(github.event.issue.labels.*.name, 'ready-to-implement')
|
||||
) || (
|
||||
github.event_name == 'issue_comment' &&
|
||||
!github.event.issue.pull_request &&
|
||||
github.event.comment.user.type != 'Bot' &&
|
||||
!endsWith(github.event.comment.user.login, '[bot]') &&
|
||||
(
|
||||
(
|
||||
contains(github.event.comment.body, '@oz-agent') &&
|
||||
!contains(github.event.issue.labels.*.name, 'triaged')
|
||||
) ||
|
||||
(
|
||||
contains(github.event.issue.labels.*.name, 'needs-info') &&
|
||||
github.event.comment.user.login == github.event.issue.user.login &&
|
||||
!contains(github.event.comment.body, '@oz-agent')
|
||||
)
|
||||
)
|
||||
)
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/triage-new-issues.yml@main
|
||||
with:
|
||||
issue_number: ${{ github.event.issue.number || github.event.inputs.issue_number || '' }}
|
||||
lookback_minutes: ${{ github.event.inputs.lookback_minutes || '60' }}
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
@@ -1,22 +0,0 @@
|
||||
name: Trigger Implementation on Plan Approved (Local)
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [labeled]
|
||||
concurrency:
|
||||
group: trigger-impl-plan-approved-${{ github.event.pull_request.number || github.run_id }}
|
||||
cancel-in-progress: false
|
||||
jobs:
|
||||
trigger_implementation:
|
||||
if: >-
|
||||
github.event.label.name == 'plan-approved' &&
|
||||
github.event.pull_request.state == 'open'
|
||||
name: Trigger implementation for approved plan
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/trigger-implementation-on-plan-approved.yml@main
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
18
.github/workflows/verify-pr-comment-local.yml
vendored
18
.github/workflows/verify-pr-comment-local.yml
vendored
@@ -1,18 +0,0 @@
|
||||
name: Verify PR Comment (Local)
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
jobs:
|
||||
# Slash-command parsing, bot gating, and trust admission live in the
|
||||
# reusable workflow. This local adapter only subscribes to PR issue
|
||||
# comments and delegates through ``workflow_call``.
|
||||
verify:
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
uses: warpdotdev/oz-for-oss/.github/workflows/verify-pr-comment.yml@main
|
||||
secrets:
|
||||
OZ_MGMT_GHA_APP_ID: ${{ secrets.OZ_MGMT_GHA_APP_ID }}
|
||||
OZ_MGMT_GHA_PRIVATE_KEY: ${{ secrets.OZ_MGMT_GHA_PRIVATE_KEY }}
|
||||
OSS_WARP_API_KEY: ${{ secrets.OSS_WARP_API_KEY }}
|
||||
Reference in New Issue
Block a user