From 23a3889c3d6f78defcad08e9f9232cfc59f25b2d Mon Sep 17 00:00:00 2001 From: Barak Korren Date: Mon, 6 Jul 2026 07:22:11 +0300 Subject: [PATCH 1/3] fix(#3036): resolve per-repo runner script paths in agent workflows After #3000, per-repo Prepare workspace copies scripts under .fullsend/, but setup-gcp and inline pre-script steps still invoked scripts/ at the workspace root. Add a scripts_dir input to setup-gcp and thread install_mode through all six reusable workflows so runner-side scripts resolve correctly. Fixes #3036 Fixes #3038 Signed-off-by: Barak Korren Co-authored-by: Cursor --- .github/actions/setup-gcp/action.yml | 8 +++++++- .github/workflows/reusable-code.yml | 4 +++- .github/workflows/reusable-fix.yml | 4 +++- .github/workflows/reusable-prioritize.yml | 1 + .github/workflows/reusable-retro.yml | 1 + .github/workflows/reusable-review.yml | 4 +++- .github/workflows/reusable-triage.yml | 1 + 7 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/actions/setup-gcp/action.yml b/.github/actions/setup-gcp/action.yml index 39e89adc8f..3ed3e8b5c5 100644 --- a/.github/actions/setup-gcp/action.yml +++ b/.github/actions/setup-gcp/action.yml @@ -8,6 +8,10 @@ inputs: gcp_project_id: description: 'GCP project ID — passed to google-github-actions/auth so the runner env has GOOGLE_CLOUD_PROJECT' required: false + scripts_dir: + description: 'Directory containing prepare-sandbox-credentials.sh (scripts for per-org, .fullsend/scripts for per-repo)' + required: false + default: 'scripts' runs: using: composite @@ -34,4 +38,6 @@ runs: - name: Prepare sandbox credentials shell: bash - run: bash scripts/prepare-sandbox-credentials.sh + env: + SCRIPTS_DIR: ${{ inputs.scripts_dir }} + run: bash "${SCRIPTS_DIR}/prepare-sandbox-credentials.sh" diff --git a/.github/workflows/reusable-code.yml b/.github/workflows/reusable-code.yml index 0e47e6401b..c70900278b 100644 --- a/.github/workflows/reusable-code.yml +++ b/.github/workflows/reusable-code.yml @@ -153,7 +153,8 @@ jobs: REPO_FULL_NAME: ${{ inputs.source_repo }} GITHUB_ISSUE_URL: ${{ fromJSON(inputs.event_payload).issue.html_url }} COMMENT_BODY: ${{ fromJSON(inputs.event_payload).comment.body }} - run: bash scripts/pre-code.sh + PRE_SCRIPT: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts/pre-code.sh' || 'scripts/pre-code.sh' }} + run: bash "${PRE_SCRIPT}" - name: Setup GCP and prepare credentials if: steps.validate.outputs.skipped != 'true' @@ -161,6 +162,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Resolve bot identity if: steps.validate.outputs.skipped != 'true' diff --git a/.github/workflows/reusable-fix.yml b/.github/workflows/reusable-fix.yml index 1f1cdb9a47..76a8608bda 100644 --- a/.github/workflows/reusable-fix.yml +++ b/.github/workflows/reusable-fix.yml @@ -366,13 +366,15 @@ jobs: TRIGGER_SOURCE: ${{ inputs.trigger_source }} FIX_ITERATION: ${{ steps.context.outputs.iteration }} HUMAN_INSTRUCTION: ${{ steps.context.outputs.instruction }} - run: bash scripts/pre-fix.sh + PRE_SCRIPT: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts/pre-fix.sh' || 'scripts/pre-fix.sh' }} + run: bash "${PRE_SCRIPT}" - name: Setup GCP and prepare credentials uses: ./.defaults/.github/actions/setup-gcp with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-prioritize.yml b/.github/workflows/reusable-prioritize.yml index d69c0b59e2..d28b0185bb 100644 --- a/.github/workflows/reusable-prioritize.yml +++ b/.github/workflows/reusable-prioritize.yml @@ -135,6 +135,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-retro.yml b/.github/workflows/reusable-retro.yml index 6da12a7f33..7c23f1ddfe 100644 --- a/.github/workflows/reusable-retro.yml +++ b/.github/workflows/reusable-retro.yml @@ -148,6 +148,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-review.yml b/.github/workflows/reusable-review.yml index 0217ab7673..eb1b29bcfd 100644 --- a/.github/workflows/reusable-review.yml +++ b/.github/workflows/reusable-review.yml @@ -153,13 +153,15 @@ jobs: || fromJSON(inputs.event_payload).issue.number }} ORG_NAME: ${{ github.repository_owner }} REVIEW_APP_CLIENT_ID: ${{ vars.FULLSEND_REVIEW_CLIENT_ID }} - run: bash scripts/pre-fetch-prior-review.sh + PRE_SCRIPT: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts/pre-fetch-prior-review.sh' || 'scripts/pre-fetch-prior-review.sh' }} + run: bash "${PRE_SCRIPT}" - name: Setup GCP and prepare credentials uses: ./.defaults/.github/actions/setup-gcp with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-triage.yml b/.github/workflows/reusable-triage.yml index 0d3aba19dc..d7b49d9b39 100644 --- a/.github/workflows/reusable-triage.yml +++ b/.github/workflows/reusable-triage.yml @@ -149,6 +149,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: From 8eacc30ff5e137cd3856c811013fd285b0e28ec4 Mon Sep 17 00:00:00 2001 From: Barak Korren Date: Mon, 6 Jul 2026 07:26:23 +0300 Subject: [PATCH 2/3] fix(#3038): resolve per-repo paths for inline runner pre-scripts Scope this PR to code/review/fix inline pre-script steps only. The setup-gcp prepare-sandbox-credentials path is handled separately in #3037. Signed-off-by: Barak Korren Co-authored-by: Cursor --- .github/actions/setup-gcp/action.yml | 8 +------- .github/workflows/reusable-code.yml | 1 - .github/workflows/reusable-fix.yml | 1 - .github/workflows/reusable-prioritize.yml | 1 - .github/workflows/reusable-retro.yml | 1 - .github/workflows/reusable-review.yml | 1 - .github/workflows/reusable-triage.yml | 1 - 7 files changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/actions/setup-gcp/action.yml b/.github/actions/setup-gcp/action.yml index 3ed3e8b5c5..39e89adc8f 100644 --- a/.github/actions/setup-gcp/action.yml +++ b/.github/actions/setup-gcp/action.yml @@ -8,10 +8,6 @@ inputs: gcp_project_id: description: 'GCP project ID — passed to google-github-actions/auth so the runner env has GOOGLE_CLOUD_PROJECT' required: false - scripts_dir: - description: 'Directory containing prepare-sandbox-credentials.sh (scripts for per-org, .fullsend/scripts for per-repo)' - required: false - default: 'scripts' runs: using: composite @@ -38,6 +34,4 @@ runs: - name: Prepare sandbox credentials shell: bash - env: - SCRIPTS_DIR: ${{ inputs.scripts_dir }} - run: bash "${SCRIPTS_DIR}/prepare-sandbox-credentials.sh" + run: bash scripts/prepare-sandbox-credentials.sh diff --git a/.github/workflows/reusable-code.yml b/.github/workflows/reusable-code.yml index c70900278b..5580f471e0 100644 --- a/.github/workflows/reusable-code.yml +++ b/.github/workflows/reusable-code.yml @@ -162,7 +162,6 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} - scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Resolve bot identity if: steps.validate.outputs.skipped != 'true' diff --git a/.github/workflows/reusable-fix.yml b/.github/workflows/reusable-fix.yml index 76a8608bda..67a9865654 100644 --- a/.github/workflows/reusable-fix.yml +++ b/.github/workflows/reusable-fix.yml @@ -374,7 +374,6 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} - scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-prioritize.yml b/.github/workflows/reusable-prioritize.yml index d28b0185bb..d69c0b59e2 100644 --- a/.github/workflows/reusable-prioritize.yml +++ b/.github/workflows/reusable-prioritize.yml @@ -135,7 +135,6 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} - scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-retro.yml b/.github/workflows/reusable-retro.yml index 7c23f1ddfe..6da12a7f33 100644 --- a/.github/workflows/reusable-retro.yml +++ b/.github/workflows/reusable-retro.yml @@ -148,7 +148,6 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} - scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-review.yml b/.github/workflows/reusable-review.yml index eb1b29bcfd..afb9959b09 100644 --- a/.github/workflows/reusable-review.yml +++ b/.github/workflows/reusable-review.yml @@ -161,7 +161,6 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} - scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-triage.yml b/.github/workflows/reusable-triage.yml index d7b49d9b39..0d3aba19dc 100644 --- a/.github/workflows/reusable-triage.yml +++ b/.github/workflows/reusable-triage.yml @@ -149,7 +149,6 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} - scripts_dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts' || 'scripts' }} - name: Setup agent environment env: From 62378222bb23266f982603a1cefc89ea6412b62c Mon Sep 17 00:00:00 2001 From: Barak Korren Date: Mon, 6 Jul 2026 07:40:16 +0300 Subject: [PATCH 3/3] fix(#3036): resolve per-repo runner script paths in agent workflows Use the same fullsend-dir prefix pattern everywhere runner-side scripts are invoked: setup-gcp prepare-sandbox-credentials and inline pre-scripts in code/review/fix workflows. Fixes #3036 Fixes #3038 Signed-off-by: Barak Korren Co-authored-by: Cursor --- .github/actions/setup-gcp/action.yml | 8 +++++++- .github/workflows/reusable-code.yml | 5 +++-- .github/workflows/reusable-fix.yml | 5 +++-- .github/workflows/reusable-prioritize.yml | 1 + .github/workflows/reusable-retro.yml | 1 + .github/workflows/reusable-review.yml | 5 +++-- .github/workflows/reusable-triage.yml | 1 + 7 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/actions/setup-gcp/action.yml b/.github/actions/setup-gcp/action.yml index 39e89adc8f..85d2e9d9c5 100644 --- a/.github/actions/setup-gcp/action.yml +++ b/.github/actions/setup-gcp/action.yml @@ -8,6 +8,10 @@ inputs: gcp_project_id: description: 'GCP project ID — passed to google-github-actions/auth so the runner env has GOOGLE_CLOUD_PROJECT' required: false + fullsend-dir: + description: 'Path to fullsend config directory (empty for per-org workspace root layout)' + required: false + default: '' runs: using: composite @@ -34,4 +38,6 @@ runs: - name: Prepare sandbox credentials shell: bash - run: bash scripts/prepare-sandbox-credentials.sh + env: + FULLSEND_DIR: ${{ inputs.fullsend-dir }} + run: bash "${FULLSEND_DIR:+$FULLSEND_DIR/}scripts/prepare-sandbox-credentials.sh" diff --git a/.github/workflows/reusable-code.yml b/.github/workflows/reusable-code.yml index 5580f471e0..ba62b15345 100644 --- a/.github/workflows/reusable-code.yml +++ b/.github/workflows/reusable-code.yml @@ -153,8 +153,8 @@ jobs: REPO_FULL_NAME: ${{ inputs.source_repo }} GITHUB_ISSUE_URL: ${{ fromJSON(inputs.event_payload).issue.html_url }} COMMENT_BODY: ${{ fromJSON(inputs.event_payload).comment.body }} - PRE_SCRIPT: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts/pre-code.sh' || 'scripts/pre-code.sh' }} - run: bash "${PRE_SCRIPT}" + FULLSEND_DIR: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} + run: bash "${FULLSEND_DIR:+$FULLSEND_DIR/}scripts/pre-code.sh" - name: Setup GCP and prepare credentials if: steps.validate.outputs.skipped != 'true' @@ -162,6 +162,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + fullsend-dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} - name: Resolve bot identity if: steps.validate.outputs.skipped != 'true' diff --git a/.github/workflows/reusable-fix.yml b/.github/workflows/reusable-fix.yml index 67a9865654..3fddc99522 100644 --- a/.github/workflows/reusable-fix.yml +++ b/.github/workflows/reusable-fix.yml @@ -366,14 +366,15 @@ jobs: TRIGGER_SOURCE: ${{ inputs.trigger_source }} FIX_ITERATION: ${{ steps.context.outputs.iteration }} HUMAN_INSTRUCTION: ${{ steps.context.outputs.instruction }} - PRE_SCRIPT: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts/pre-fix.sh' || 'scripts/pre-fix.sh' }} - run: bash "${PRE_SCRIPT}" + FULLSEND_DIR: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} + run: bash "${FULLSEND_DIR:+$FULLSEND_DIR/}scripts/pre-fix.sh" - name: Setup GCP and prepare credentials uses: ./.defaults/.github/actions/setup-gcp with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + fullsend-dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-prioritize.yml b/.github/workflows/reusable-prioritize.yml index d69c0b59e2..c8fc8e1bbe 100644 --- a/.github/workflows/reusable-prioritize.yml +++ b/.github/workflows/reusable-prioritize.yml @@ -135,6 +135,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + fullsend-dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-retro.yml b/.github/workflows/reusable-retro.yml index 6da12a7f33..f05d102cb2 100644 --- a/.github/workflows/reusable-retro.yml +++ b/.github/workflows/reusable-retro.yml @@ -148,6 +148,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + fullsend-dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-review.yml b/.github/workflows/reusable-review.yml index afb9959b09..7a7ce8785a 100644 --- a/.github/workflows/reusable-review.yml +++ b/.github/workflows/reusable-review.yml @@ -153,14 +153,15 @@ jobs: || fromJSON(inputs.event_payload).issue.number }} ORG_NAME: ${{ github.repository_owner }} REVIEW_APP_CLIENT_ID: ${{ vars.FULLSEND_REVIEW_CLIENT_ID }} - PRE_SCRIPT: ${{ inputs.install_mode == 'per-repo' && '.fullsend/scripts/pre-fetch-prior-review.sh' || 'scripts/pre-fetch-prior-review.sh' }} - run: bash "${PRE_SCRIPT}" + FULLSEND_DIR: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} + run: bash "${FULLSEND_DIR:+$FULLSEND_DIR/}scripts/pre-fetch-prior-review.sh" - name: Setup GCP and prepare credentials uses: ./.defaults/.github/actions/setup-gcp with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + fullsend-dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} - name: Setup agent environment env: diff --git a/.github/workflows/reusable-triage.yml b/.github/workflows/reusable-triage.yml index 0d3aba19dc..2a56f69de8 100644 --- a/.github/workflows/reusable-triage.yml +++ b/.github/workflows/reusable-triage.yml @@ -149,6 +149,7 @@ jobs: with: gcp_wif_provider: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }} gcp_project_id: ${{ secrets.FULLSEND_GCP_PROJECT_ID }} + fullsend-dir: ${{ inputs.install_mode == 'per-repo' && '.fullsend' || '' }} - name: Setup agent environment env: