diff --git a/.fullsend/config.yaml b/.fullsend/config.yaml new file mode 100644 index 0000000..43f0f04 --- /dev/null +++ b/.fullsend/config.yaml @@ -0,0 +1,33 @@ +# fullsend per-repo configuration +# https://github.com/fullsend-ai/fullsend +# +# This file configures fullsend for per-repo installation mode. +# See ADR 0033 for details. +version: "1" +runtime: claude +roles: + - fullsend + - triage + - coder + - review + - retro + - prioritize +agents: + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/triage.yaml#sha256=451122f4eb191fa79d42c814a412bb969c7d629a9a10284d6fcd1ce366d46ba5 + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/code.yaml#sha256=2752012b4489288c87faebd315089bc2d89b671982de6a084e920e9972ce08be + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/fix.yaml#sha256=b0f99fecb73e922e95d7c18df657b75bd68b3dd8ca91a30d7eb68b995cd7b880 + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/review.yaml#sha256=b8487a58b3aa2f0b608633d505415b57fd7b3e12df2aba3eb240823808f3ef55 + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/retro.yaml#sha256=d1f3beb45bb369a8b5f1def5986a374861032a85174a3b84e34e1054a27f1933 + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/prioritize.yaml#sha256=93afb2c50bfd828a37d29d24488d9492e541f254bf9153c768eda919e1fc9a33 + - source: https://raw.githubusercontent.com/fullsend-ai/agents/89d35ec899c5824b4d98d01e579cffe3a5962928/harness/scribe.yaml#sha256=a23ccefdff1457939919fd225263d300b12ba34068689899b620a57f51cdebde + - source: https://raw.githubusercontent.com/redhat-community-ai-tools/qualityflow-fullsend/b26c947e95e6325284c5542d466a2a016f6aa312/harness/qualityflow.yaml#sha256=473d44a73c465b318fa3cd8dfee2c55b4a5dc7439f994607eb774825c43c17c2 +allowed_remote_resources: + - https://raw.githubusercontent.com/fullsend-ai/fullsend/ + - https://raw.githubusercontent.com/fullsend-ai/agents/ + - https://raw.githubusercontent.com/redhat-community-ai-tools/qualityflow-fullsend/ +create_issues: + allow_targets: + orgs: + - fullsend-ai + repos: + - fullsend-ai/fullsend diff --git a/.github/workflows/fullsend.yaml b/.github/workflows/fullsend.yaml index befcb5a..3ab528e 100644 --- a/.github/workflows/fullsend.yaml +++ b/.github/workflows/fullsend.yaml @@ -1,24 +1,22 @@ # This file is managed by fullsend. Do not edit it directly. -# Upstream: https://github.com/fullsend-ai/fullsend/blob/main/internal/scaffold/fullsend-repo/templates/shim-workflow-call.yaml +# Upstream: https://github.com/fullsend-ai/fullsend/blob/main/internal/scaffold/fullsend-repo/.github/workflows/fullsend.yaml --- -# --- fullsend managed below - do not edit --- -# lint-workflow-size: max-lines=280 -# fullsend shim workflow (workflow_call mode) -# Routes events to agent workflows in .fullsend via workflow_call. -# No secrets are needed in the enrolled repo — agents fetch scoped tokens -# from the centralized token mint using GitHub OIDC. +# fullsend shim workflow (per-repo installation mode) +# Routes events to agent workflows via reusable-dispatch.yml. +# All agent execution happens in this repo's context — no external +# config repo is needed. # # Security: pull_request_target runs the BASE branch version of this workflow, # preventing PRs from modifying it to exfiltrate credentials. # This shim never checks out PR code, so it is not vulnerable to "pwn request" # attacks. # -# fullsend-ai is replaced by reconcile-repos.sh at deploy time. +# Routing: this shim forwards the raw event context to reusable-dispatch.yml, +# which determines the stage and runs the agent inline (ADR 62). +# Adding a new stage requires only a job in reusable-dispatch.yml — zero changes to this repo. # -# Routing: this shim forwards the raw event context to dispatch.yml, which -# determines the stage from event_type + event_action + payload fields. -# Adding a new stage requires only a case branch in dispatch.yml — zero -# changes to enrolled repos. +# Concurrency: per-role cancel-in-progress groups live in reusable-dispatch.yml +# stage jobs with -agent- suffix. Roles operate independently (#2452). name: fullsend on: @@ -35,31 +33,30 @@ permissions: {} jobs: dispatch: - concurrency: - # Label-derived suffix for labeled events so routing labels - # get isolated concurrency slots (#2452). - group: >- - fullsend-dispatch-${{ github.event.issue.number || github.event.pull_request.number }}-${{ - github.event.action == 'labeled' && format('label-{0}', github.event.label.name) || 'dispatch' - }} - cancel-in-progress: false if: >- (github.event_name != 'pull_request_target' && github.event_name != 'pull_request_review' || github.event.pull_request.head.ref != 'fullsend/scaffold-install') && (github.event_name != 'issue_comment' || github.event.comment.user.type != 'Bot') - && ( - github.event.action != 'labeled' - || startsWith(github.event.label.name, 'ready-') - ) permissions: actions: write id-token: write - contents: read - pull-requests: read - uses: fullsend-ai/.fullsend/.github/workflows/dispatch.yml@main + contents: write + issues: write + packages: read + pull-requests: write + uses: fullsend-ai/fullsend/.github/workflows/reusable-dispatch.yml@v0 with: event_action: ${{ github.event.action }} + install_mode: per-repo + mint_url: ${{ vars.FULLSEND_MINT_URL }} + gcp_region: ${{ vars.FULLSEND_GCP_REGION }} + runner_image: ubuntu-24.04 + secrets: + FULLSEND_GCP_WIF_PROVIDER: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} + FULLSEND_GCP_PROJECT_ID: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + OTEL_EXPORTER_OTLP_TRACES_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_TRACES_HEADERS }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} stop-fix: # Job-level if: is intentionally coarse — it only screens for the