@vypdev/copilot 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -5
- package/action.yml +85 -109
- package/build/api/index.js +4737 -1506
- package/build/api/src/api.d.ts +60 -14
- package/build/api/src/application/errors/application_error.d.ts +10 -0
- package/build/api/src/application/ports/bugbot_context_ports.d.ts +20 -7
- package/build/api/src/application/ports/bugbot_finding_publication_ports.d.ts +4 -4
- package/build/api/src/application/ports/bugbot_finding_resolution_ports.d.ts +4 -4
- package/build/api/src/application/ports/bugbot_issue_read_ports.d.ts +3 -0
- package/build/api/src/application/ports/bugbot_issue_write_ports.d.ts +12 -0
- package/build/api/src/application/ports/bugbot_pull_request_read_ports.d.ts +3 -17
- package/build/api/src/application/ports/bugbot_pull_request_resolution_ports.d.ts +7 -1
- package/build/api/src/application/ports/bugbot_pull_request_write_ports.d.ts +6 -1
- package/build/api/src/application/ports/bugbot_reconciliation_ports.d.ts +18 -0
- package/build/api/src/application/ports/bugbot_review_navigation_ports.d.ts +13 -0
- package/build/api/src/application/ports/bugbot_rule_ports.d.ts +1 -1
- package/build/api/src/application/ports/bugbot_scm_ports.d.ts +14 -0
- package/build/api/src/application/ports/bugbot_telemetry_ports.d.ts +27 -2
- package/build/api/src/application/ports/message_catalog_ports.d.ts +17 -0
- package/build/api/src/application/ports/pull_request_review_comment_ports.d.ts +31 -2
- package/build/api/src/data/model/application_error.d.ts +82 -0
- package/build/api/src/data/model/result.d.ts +3 -4
- package/build/api/src/domain/agent.d.ts +6 -5
- package/build/api/src/domain/branch_sync_validation.d.ts +4 -0
- package/build/api/src/domain/bugbot/context.d.ts +68 -0
- package/build/api/src/domain/bugbot/finding.d.ts +61 -0
- package/build/api/src/domain/bugbot/review_projection.d.ts +33 -0
- package/build/api/src/domain/bugbot/review_state.d.ts +29 -0
- package/build/api/src/domain/message_catalog.d.ts +35 -0
- package/build/api/src/tooling/bugbot_analytics.d.ts +2 -1
- package/build/cli/index.js +93317 -71617
- package/build/github_action/index.js +79616 -63218
- package/build/web/assets/index-2NVaAtP1.js +3 -0
- package/build/web/assets/index-FN-aja4Y.css +1 -0
- package/build/web/index.html +14 -0
- package/package.json +35 -22
- package/scripts/install-git-hooks.cjs +38 -14
- package/setup/ISSUE_TEMPLATE/hotfix.yml +1 -1
- package/setup/ISSUE_TEMPLATE/release.yml +1 -1
- package/setup/pull_request_template.md +9 -135
- package/setup/source-workflows/copilot_pull_request_approval.yml +55 -0
- package/setup/workflows/agent-cli-provisioning.yml +37 -13
- package/setup/workflows/copilot_close_inactive_issues.yml +4 -4
- package/setup/workflows/copilot_commit.yml +16 -16
- package/setup/workflows/copilot_credential_health.yml +0 -20
- package/setup/workflows/copilot_deployment_orchestration.yml +91 -0
- package/setup/workflows/copilot_issue.yml +15 -19
- package/setup/workflows/copilot_issue_comment.yml +17 -19
- package/setup/workflows/copilot_pull_request.yml +21 -22
- package/setup/workflows/copilot_pull_request_approval.yml +51 -0
- package/setup/workflows/copilot_pull_request_comment.yml +17 -19
- package/setup/workflows/copilot_pull_request_merge_queue.yml +20 -0
- package/setup/workflows/copilot_pull_request_review_state.yml +109 -0
- package/setup/workflows/hotfix_workflow.yml +157 -168
- package/setup/workflows/release_workflow.yml +157 -168
- package/build/api/src/application/usecases/steps/commit/bugbot/types.d.ts +0 -112
- package/build/api/src/data/model/agent.d.ts +0 -2
- package/build/api/src/data/model/ai.d.ts +0 -28
- package/build/api/src/data/model/branch_configuration.d.ts +0 -6
- package/build/api/src/data/model/branches.d.ts +0 -12
- package/build/api/src/data/model/commit.d.ts +0 -8
- package/build/api/src/data/model/config.d.ts +0 -30
- package/build/api/src/data/model/emoji.d.ts +0 -5
- package/build/api/src/data/model/execution.d.ts +0 -75
- package/build/api/src/data/model/execution_components.d.ts +0 -43
- package/build/api/src/data/model/execution_inputs.d.ts +0 -94
- package/build/api/src/data/model/hotfix.d.ts +0 -7
- package/build/api/src/data/model/images.d.ts +0 -27
- package/build/api/src/data/model/issue.d.ts +0 -27
- package/build/api/src/data/model/issue_types.d.ts +0 -30
- package/build/api/src/data/model/labels.d.ts +0 -60
- package/build/api/src/data/model/locale.d.ts +0 -6
- package/build/api/src/data/model/project_detail.d.ts +0 -15
- package/build/api/src/data/model/projects.d.ts +0 -14
- package/build/api/src/data/model/pull_request.d.ts +0 -32
- package/build/api/src/data/model/recommendation_state.d.ts +0 -6
- package/build/api/src/data/model/release.d.ts +0 -6
- package/build/api/src/data/model/single_action.d.ts +0 -43
- package/build/api/src/data/model/size_threshold.d.ts +0 -6
- package/build/api/src/data/model/size_thresholds.d.ts +0 -10
- package/build/api/src/data/model/tokens.d.ts +0 -4
- package/build/api/src/data/model/welcome.d.ts +0 -5
- package/build/api/src/data/model/workflows.d.ts +0 -5
- package/build/api/src/domain/bugbot/review_command.d.ts +0 -16
- package/build/api/src/domain/copilot_lifecycle.d.ts +0 -42
- package/build/api/src/domain/pull_request_description.d.ts +0 -13
|
@@ -13,6 +13,9 @@ jobs:
|
|
|
13
13
|
name: Copilot - Commit
|
|
14
14
|
runs-on: ubuntu-latest
|
|
15
15
|
timeout-minutes: 120
|
|
16
|
+
concurrency:
|
|
17
|
+
group: copilot-push-${{ github.repository }}-${{ github.ref_name }}
|
|
18
|
+
cancel-in-progress: true
|
|
16
19
|
permissions:
|
|
17
20
|
contents: read
|
|
18
21
|
steps:
|
|
@@ -23,6 +26,7 @@ jobs:
|
|
|
23
26
|
fetch-depth: 0
|
|
24
27
|
|
|
25
28
|
- name: Fetch push review range
|
|
29
|
+
shell: bash
|
|
26
30
|
if: github.event.after != '0000000000000000000000000000000000000000'
|
|
27
31
|
env:
|
|
28
32
|
BEFORE_SHA: ${{ github.event.before }}
|
|
@@ -36,6 +40,10 @@ jobs:
|
|
|
36
40
|
|
|
37
41
|
- uses: vypdev/copilot@v3
|
|
38
42
|
with:
|
|
43
|
+
repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
|
|
44
|
+
issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
|
|
45
|
+
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
|
|
46
|
+
issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
|
|
39
47
|
ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
|
|
40
48
|
debug: ${{ vars.DEBUG }}
|
|
41
49
|
main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
|
|
@@ -46,15 +54,12 @@ jobs:
|
|
|
46
54
|
release-tree: ${{ vars.RELEASE_TREE || 'release' }}
|
|
47
55
|
docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
|
|
48
56
|
chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
|
|
49
|
-
|
|
57
|
+
issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
|
|
58
|
+
pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
|
|
50
59
|
reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
|
|
51
60
|
desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
|
|
52
61
|
desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
|
|
53
|
-
merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
|
|
54
|
-
issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
|
|
55
|
-
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
|
|
56
62
|
commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
|
|
57
|
-
ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
|
|
58
63
|
ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
|
|
59
64
|
ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
|
|
60
65
|
ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
|
|
@@ -76,32 +81,28 @@ jobs:
|
|
|
76
81
|
project-ids: ${{ vars.PROJECT_IDS }}
|
|
77
82
|
agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
|
|
78
83
|
agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
79
|
-
agent-model: ${{ vars.AGENT_MODEL || 'gpt-
|
|
84
|
+
agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
|
|
80
85
|
agent-effort: ${{ vars.AGENT_EFFORT }}
|
|
81
|
-
agent-
|
|
86
|
+
agent-executable: ${{ vars.AGENT_EXECUTABLE }}
|
|
82
87
|
findings-provider: ${{ vars.FINDINGS_PROVIDER }}
|
|
83
88
|
findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
|
|
84
89
|
findings-model: ${{ vars.FINDINGS_MODEL }}
|
|
85
90
|
findings-effort: ${{ vars.FINDINGS_EFFORT }}
|
|
86
|
-
findings-
|
|
91
|
+
findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
|
|
87
92
|
fixer-provider: ${{ vars.FIXER_PROVIDER }}
|
|
88
93
|
fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
|
|
89
94
|
fixer-model: ${{ vars.FIXER_MODEL }}
|
|
90
95
|
fixer-effort: ${{ vars.FIXER_EFFORT }}
|
|
91
|
-
fixer-
|
|
96
|
+
fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
|
|
92
97
|
token: ${{ secrets.PAT }}
|
|
93
98
|
env:
|
|
94
99
|
AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
|
|
95
100
|
AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
96
101
|
AGENT_MODEL: ${{ vars.AGENT_MODEL }}
|
|
97
102
|
AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
|
|
98
|
-
AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
|
|
99
103
|
AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
|
|
100
|
-
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-
|
|
101
|
-
|
|
102
|
-
CODEX_VERSION: ${{ vars.CODEX_VERSION }}
|
|
103
|
-
OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
|
|
104
|
-
CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
|
|
104
|
+
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
|
|
105
|
+
AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
|
|
105
106
|
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
|
|
106
107
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
107
108
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
@@ -109,4 +110,3 @@ jobs:
|
|
|
109
110
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
110
111
|
CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
|
|
111
112
|
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
|
|
112
|
-
CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
|
|
@@ -38,11 +38,6 @@ on:
|
|
|
38
38
|
required: false
|
|
39
39
|
default: false
|
|
40
40
|
type: boolean
|
|
41
|
-
check_codex:
|
|
42
|
-
description: Check CODEX_ACCESS_TOKEN
|
|
43
|
-
required: false
|
|
44
|
-
default: false
|
|
45
|
-
type: boolean
|
|
46
41
|
check_codex_api_key:
|
|
47
42
|
description: Check CODEX_API_KEY
|
|
48
43
|
required: false
|
|
@@ -159,21 +154,6 @@ jobs:
|
|
|
159
154
|
[[ -n "${OPENCODE_API_KEY:-}" ]] || { echo 'Required credential is missing.' >&2; exit 1; }
|
|
160
155
|
curl --fail --silent --show-error --location --max-time 20 -H "Authorization: Bearer $OPENCODE_API_KEY" https://opencode.ai/zen/v1/models >/dev/null
|
|
161
156
|
|
|
162
|
-
verify-codex:
|
|
163
|
-
if: ${{ inputs.check_codex }}
|
|
164
|
-
name: Verify CODEX_ACCESS_TOKEN
|
|
165
|
-
runs-on: ubuntu-latest
|
|
166
|
-
timeout-minutes: 10
|
|
167
|
-
steps:
|
|
168
|
-
- name: Validate Codex token without exposing its value
|
|
169
|
-
shell: bash
|
|
170
|
-
env:
|
|
171
|
-
CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
|
|
172
|
-
run: |
|
|
173
|
-
set -euo pipefail
|
|
174
|
-
[[ -n "${CODEX_ACCESS_TOKEN:-}" ]] || { echo 'Required credential is missing.' >&2; exit 1; }
|
|
175
|
-
curl --fail --silent --show-error --location --max-time 20 -H "Authorization: Bearer $CODEX_ACCESS_TOKEN" https://api.openai.com/v1/models >/dev/null
|
|
176
|
-
|
|
177
157
|
verify-codex-api-key:
|
|
178
158
|
if: ${{ inputs.check_codex_api_key }}
|
|
179
159
|
name: Verify CODEX_API_KEY
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: Copilot - Deployment Orchestration
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [closed]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
resolve-operation:
|
|
9
|
+
name: Resolve managed deployment ownership
|
|
10
|
+
if: ${{ github.event.pull_request.head.repo.full_name == github.repository && contains(github.event.pull_request.body || '', '<!-- copilot-deployment ') }}
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
timeout-minutes: 5
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
issues: read
|
|
16
|
+
pull-requests: read
|
|
17
|
+
outputs:
|
|
18
|
+
operation-id: ${{ steps.identity.outputs.operation-id }}
|
|
19
|
+
issue: ${{ steps.identity.outputs.issue }}
|
|
20
|
+
steps:
|
|
21
|
+
- name: Prove managed operation identity
|
|
22
|
+
id: identity
|
|
23
|
+
uses: actions/github-script@v9
|
|
24
|
+
env:
|
|
25
|
+
PR_BODY: ${{ github.event.pull_request.body }}
|
|
26
|
+
with:
|
|
27
|
+
script: |
|
|
28
|
+
const body = process.env.PR_BODY || '';
|
|
29
|
+
if (body.length > 70000) return core.setFailed('The managed deployment marker input is too large.');
|
|
30
|
+
const matches = [...body.matchAll(/<!-- copilot-deployment operation-id="([A-Za-z0-9][A-Za-z0-9._-]{7,127})" phase="(promotion|reconciliation)" issue="([1-9][0-9]*)" -->/g)];
|
|
31
|
+
if (matches.length !== 1) return core.setFailed('Exactly one valid managed deployment marker is required.');
|
|
32
|
+
const [, operationId, phase, issueText] = matches[0];
|
|
33
|
+
const issue = Number(issueText);
|
|
34
|
+
if (!Number.isSafeInteger(issue) || issue < 1) return core.setFailed('The launcher issue is invalid.');
|
|
35
|
+
const response = await github.rest.issues.get({ ...context.repo, issue_number: issue });
|
|
36
|
+
if (response.data.pull_request) return core.setFailed('The deployment launcher must be an issue.');
|
|
37
|
+
const description = response.data.body || '';
|
|
38
|
+
const start = '<!-- copilot-configuration-start';
|
|
39
|
+
const end = 'copilot-configuration-end -->';
|
|
40
|
+
const startIndex = description.indexOf(start);
|
|
41
|
+
const endIndex = description.indexOf(end, startIndex + start.length);
|
|
42
|
+
if (startIndex < 0 || endIndex < 0 || description.indexOf(start, startIndex + start.length) >= 0) {
|
|
43
|
+
return core.setFailed('The launcher issue has no unique durable configuration.');
|
|
44
|
+
}
|
|
45
|
+
let payload;
|
|
46
|
+
try { payload = JSON.parse(description.slice(startIndex + start.length, endIndex)); }
|
|
47
|
+
catch { return core.setFailed('The launcher issue configuration is invalid.'); }
|
|
48
|
+
const state = payload?.deploymentOrchestration;
|
|
49
|
+
if (payload?.schemaVersion !== 3 || state?.stateVersion !== 1 || !Number.isSafeInteger(state?.revision) || state.revision < 1) {
|
|
50
|
+
return core.setFailed('The launcher issue has no supported deployment state.');
|
|
51
|
+
}
|
|
52
|
+
if (state.operationId !== operationId) return core.setFailed('The pull request does not own the durable deployment operation.');
|
|
53
|
+
const number = context.payload.pull_request.number;
|
|
54
|
+
const ownsPullRequest = phase === 'promotion'
|
|
55
|
+
? state.promotionPullRequest === number
|
|
56
|
+
: Array.isArray(state.reconciliationTargets) && state.reconciliationTargets.some(target => target?.pullRequest === number);
|
|
57
|
+
if (!ownsPullRequest) return core.setFailed('The pull request is not recorded by the durable deployment state.');
|
|
58
|
+
core.setOutput('operation-id', operationId);
|
|
59
|
+
core.setOutput('issue', issueText);
|
|
60
|
+
|
|
61
|
+
mutate:
|
|
62
|
+
name: Advance durable deployment operation
|
|
63
|
+
needs: resolve-operation
|
|
64
|
+
if: ${{ needs.resolve-operation.result == 'success' }}
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
timeout-minutes: 15
|
|
67
|
+
concurrency:
|
|
68
|
+
group: copilot-deployment-${{ github.repository_id }}-${{ needs.resolve-operation.outputs.issue }}
|
|
69
|
+
cancel-in-progress: false
|
|
70
|
+
queue: max
|
|
71
|
+
permissions:
|
|
72
|
+
contents: read
|
|
73
|
+
issues: write
|
|
74
|
+
pull-requests: read
|
|
75
|
+
actions: write
|
|
76
|
+
steps:
|
|
77
|
+
- name: Checkout trusted base branch
|
|
78
|
+
uses: actions/checkout@v5
|
|
79
|
+
with:
|
|
80
|
+
persist-credentials: false
|
|
81
|
+
ref: ${{ github.event.pull_request.base.ref }}
|
|
82
|
+
fetch-depth: 1
|
|
83
|
+
- name: Continue from current durable state
|
|
84
|
+
uses: vypdev/copilot@v3
|
|
85
|
+
with:
|
|
86
|
+
single-action: continue_deployment_action
|
|
87
|
+
single-action-issue: ${{ needs.resolve-operation.outputs.issue }}
|
|
88
|
+
single-action-operation-id: ${{ needs.resolve-operation.outputs.operation-id }}
|
|
89
|
+
issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
|
|
90
|
+
merge-queue-check-attestations: ${{ vars.MERGE_QUEUE_CHECK_ATTESTATIONS || '[]' }}
|
|
91
|
+
token: ${{ secrets.PAT }}
|
|
@@ -2,11 +2,11 @@ name: Copilot - Issue
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
issues:
|
|
5
|
-
types: [opened, reopened, edited, labeled, unlabeled, assigned, unassigned]
|
|
5
|
+
types: [opened, reopened, closed, edited, labeled, unlabeled, assigned, unassigned]
|
|
6
6
|
|
|
7
7
|
jobs:
|
|
8
8
|
copilot-issues:
|
|
9
|
-
if: ${{ vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN }}
|
|
9
|
+
if: ${{ (github.event.action == 'closed' && github.event.issue.state == 'closed') || vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN }}
|
|
10
10
|
name: Copilot - Issue
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
timeout-minutes: 120
|
|
@@ -20,6 +20,9 @@ jobs:
|
|
|
20
20
|
|
|
21
21
|
- uses: vypdev/copilot@v3
|
|
22
22
|
with:
|
|
23
|
+
repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
|
|
24
|
+
issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
|
|
25
|
+
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
|
|
23
26
|
ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
|
|
24
27
|
debug: ${{ vars.DEBUG }}
|
|
25
28
|
main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
|
|
@@ -30,15 +33,13 @@ jobs:
|
|
|
30
33
|
release-tree: ${{ vars.RELEASE_TREE || 'release' }}
|
|
31
34
|
docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
|
|
32
35
|
chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
|
|
33
|
-
|
|
36
|
+
issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
|
|
37
|
+
pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
|
|
38
|
+
issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
|
|
34
39
|
reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
|
|
35
40
|
desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
|
|
36
41
|
desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
|
|
37
|
-
merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
|
|
38
|
-
issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
|
|
39
|
-
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
|
|
40
42
|
commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
|
|
41
|
-
ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
|
|
42
43
|
ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
|
|
43
44
|
ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
|
|
44
45
|
ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
|
|
@@ -60,37 +61,33 @@ jobs:
|
|
|
60
61
|
project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
|
|
61
62
|
agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
|
|
62
63
|
agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
63
|
-
agent-model: ${{ vars.AGENT_MODEL || 'gpt-
|
|
64
|
+
agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
|
|
64
65
|
agent-effort: ${{ vars.AGENT_EFFORT }}
|
|
65
|
-
agent-
|
|
66
|
+
agent-executable: ${{ vars.AGENT_EXECUTABLE }}
|
|
66
67
|
findings-provider: ${{ vars.FINDINGS_PROVIDER }}
|
|
67
68
|
findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
|
|
68
69
|
findings-model: ${{ vars.FINDINGS_MODEL }}
|
|
69
70
|
findings-effort: ${{ vars.FINDINGS_EFFORT }}
|
|
70
|
-
findings-
|
|
71
|
+
findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
|
|
71
72
|
fixer-provider: ${{ vars.FIXER_PROVIDER }}
|
|
72
73
|
fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
|
|
73
74
|
fixer-model: ${{ vars.FIXER_MODEL }}
|
|
74
75
|
fixer-effort: ${{ vars.FIXER_EFFORT }}
|
|
75
|
-
fixer-
|
|
76
|
+
fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
|
|
76
77
|
planner-provider: ${{ vars.PLANNER_PROVIDER }}
|
|
77
78
|
planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
|
|
78
79
|
planner-model: ${{ vars.PLANNER_MODEL }}
|
|
79
80
|
planner-effort: ${{ vars.PLANNER_EFFORT }}
|
|
80
|
-
planner-
|
|
81
|
+
planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
|
|
81
82
|
token: ${{ secrets.PAT }}
|
|
82
83
|
env:
|
|
83
84
|
AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
|
|
84
85
|
AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
85
86
|
AGENT_MODEL: ${{ vars.AGENT_MODEL }}
|
|
86
87
|
AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
|
|
87
|
-
AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
|
|
88
88
|
AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
|
|
89
|
-
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-
|
|
90
|
-
|
|
91
|
-
CODEX_VERSION: ${{ vars.CODEX_VERSION }}
|
|
92
|
-
OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
|
|
93
|
-
CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
|
|
89
|
+
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
|
|
90
|
+
AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
|
|
94
91
|
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
|
|
95
92
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
96
93
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
@@ -98,4 +95,3 @@ jobs:
|
|
|
98
95
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
99
96
|
CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
|
|
100
97
|
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
|
|
101
|
-
CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
|
|
@@ -11,6 +11,7 @@ jobs:
|
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
timeout-minutes: 120
|
|
13
13
|
permissions:
|
|
14
|
+
checks: write
|
|
14
15
|
contents: read
|
|
15
16
|
steps:
|
|
16
17
|
- name: Checkout Repository
|
|
@@ -21,6 +22,9 @@ jobs:
|
|
|
21
22
|
|
|
22
23
|
- uses: vypdev/copilot@v3
|
|
23
24
|
with:
|
|
25
|
+
repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
|
|
26
|
+
issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
|
|
27
|
+
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
|
|
24
28
|
ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
|
|
25
29
|
debug: ${{ vars.DEBUG }}
|
|
26
30
|
main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
|
|
@@ -31,15 +35,13 @@ jobs:
|
|
|
31
35
|
release-tree: ${{ vars.RELEASE_TREE || 'release' }}
|
|
32
36
|
docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
|
|
33
37
|
chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
|
|
34
|
-
|
|
38
|
+
issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
|
|
39
|
+
pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
|
|
40
|
+
issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
|
|
35
41
|
reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
|
|
36
42
|
desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
|
|
37
43
|
desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
|
|
38
|
-
merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
|
|
39
|
-
issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
|
|
40
|
-
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
|
|
41
44
|
commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
|
|
42
|
-
ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
|
|
43
45
|
ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
|
|
44
46
|
ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
|
|
45
47
|
ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
|
|
@@ -60,34 +62,34 @@ jobs:
|
|
|
60
62
|
project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
|
|
61
63
|
agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
|
|
62
64
|
agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
63
|
-
agent-model: ${{ vars.AGENT_MODEL || 'gpt-
|
|
65
|
+
agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
|
|
64
66
|
agent-effort: ${{ vars.AGENT_EFFORT }}
|
|
65
|
-
agent-
|
|
67
|
+
agent-executable: ${{ vars.AGENT_EXECUTABLE }}
|
|
66
68
|
findings-provider: ${{ vars.FINDINGS_PROVIDER }}
|
|
67
69
|
findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
|
|
68
70
|
findings-model: ${{ vars.FINDINGS_MODEL }}
|
|
69
71
|
findings-effort: ${{ vars.FINDINGS_EFFORT }}
|
|
70
|
-
findings-
|
|
72
|
+
findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
|
|
71
73
|
fixer-provider: ${{ vars.FIXER_PROVIDER }}
|
|
72
74
|
fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
|
|
73
75
|
fixer-model: ${{ vars.FIXER_MODEL }}
|
|
74
76
|
fixer-effort: ${{ vars.FIXER_EFFORT }}
|
|
75
|
-
fixer-
|
|
77
|
+
fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
|
|
76
78
|
planner-provider: ${{ vars.PLANNER_PROVIDER }}
|
|
77
79
|
planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
|
|
78
80
|
planner-model: ${{ vars.PLANNER_MODEL }}
|
|
79
81
|
planner-effort: ${{ vars.PLANNER_EFFORT }}
|
|
80
|
-
planner-
|
|
82
|
+
planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
|
|
81
83
|
reviewer-provider: ${{ vars.REVIEWER_PROVIDER }}
|
|
82
84
|
reviewer-model-provider: ${{ vars.REVIEWER_MODEL_PROVIDER }}
|
|
83
85
|
reviewer-model: ${{ vars.REVIEWER_MODEL }}
|
|
84
86
|
reviewer-effort: ${{ vars.REVIEWER_EFFORT }}
|
|
85
|
-
reviewer-
|
|
87
|
+
reviewer-executable: ${{ vars.REVIEWER_EXECUTABLE }}
|
|
86
88
|
tester-provider: ${{ vars.TESTER_PROVIDER }}
|
|
87
89
|
tester-model-provider: ${{ vars.TESTER_MODEL_PROVIDER }}
|
|
88
90
|
tester-model: ${{ vars.TESTER_MODEL }}
|
|
89
91
|
tester-effort: ${{ vars.TESTER_EFFORT }}
|
|
90
|
-
tester-
|
|
92
|
+
tester-executable: ${{ vars.TESTER_EXECUTABLE }}
|
|
91
93
|
project-ids: ${{ vars.PROJECT_IDS }}
|
|
92
94
|
token: ${{ secrets.PAT }}
|
|
93
95
|
env:
|
|
@@ -95,13 +97,9 @@ jobs:
|
|
|
95
97
|
AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
96
98
|
AGENT_MODEL: ${{ vars.AGENT_MODEL }}
|
|
97
99
|
AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
|
|
98
|
-
AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
|
|
99
100
|
AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
|
|
100
|
-
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-
|
|
101
|
-
|
|
102
|
-
CODEX_VERSION: ${{ vars.CODEX_VERSION }}
|
|
103
|
-
OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
|
|
104
|
-
CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
|
|
101
|
+
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
|
|
102
|
+
AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
|
|
105
103
|
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
|
|
106
104
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
107
105
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
@@ -109,4 +107,4 @@ jobs:
|
|
|
109
107
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
110
108
|
CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
|
|
111
109
|
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
|
|
112
|
-
|
|
110
|
+
COPILOT_EVIDENCE_TOKEN: ${{ github.token }}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
name: Copilot - Pull Request
|
|
2
|
+
run-name: Copilot PR · ${{ github.event_name }}:${{ github.event.action }}
|
|
2
3
|
|
|
3
4
|
on:
|
|
4
5
|
pull_request:
|
|
5
|
-
types: [opened, reopened,
|
|
6
|
-
pull_request_review:
|
|
7
|
-
types: [submitted, edited, dismissed]
|
|
6
|
+
types: [opened, reopened, closed, synchronize, ready_for_review]
|
|
8
7
|
|
|
9
8
|
jobs:
|
|
10
9
|
copilot-pull-requests:
|
|
11
|
-
if: ${{ (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN) && github.event.pull_request.
|
|
10
|
+
if: ${{ github.event.pull_request.head.repo.full_name == github.repository && (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN || ((github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'synchronize') && github.event.pull_request.user.login == github.actor)) }}
|
|
12
11
|
name: Copilot - Pull Request
|
|
13
12
|
runs-on: ubuntu-latest
|
|
14
13
|
timeout-minutes: 120
|
|
14
|
+
concurrency:
|
|
15
|
+
group: copilot-pr-${{ github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}-analysis
|
|
16
|
+
cancel-in-progress: true
|
|
15
17
|
permissions:
|
|
16
18
|
checks: write
|
|
17
19
|
contents: read
|
|
@@ -23,6 +25,7 @@ jobs:
|
|
|
23
25
|
fetch-depth: 0
|
|
24
26
|
|
|
25
27
|
- name: Fetch incremental review range
|
|
28
|
+
shell: bash
|
|
26
29
|
if: github.event.action == 'synchronize'
|
|
27
30
|
env:
|
|
28
31
|
BEFORE_SHA: ${{ github.event.before }}
|
|
@@ -35,6 +38,10 @@ jobs:
|
|
|
35
38
|
|
|
36
39
|
- uses: vypdev/copilot@v3
|
|
37
40
|
with:
|
|
41
|
+
repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
|
|
42
|
+
issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
|
|
43
|
+
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
|
|
44
|
+
issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
|
|
38
45
|
ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
|
|
39
46
|
debug: ${{ vars.DEBUG }}
|
|
40
47
|
main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
|
|
@@ -45,15 +52,12 @@ jobs:
|
|
|
45
52
|
release-tree: ${{ vars.RELEASE_TREE || 'release' }}
|
|
46
53
|
docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
|
|
47
54
|
chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
|
|
48
|
-
|
|
55
|
+
issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
|
|
56
|
+
pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
|
|
49
57
|
reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
|
|
50
58
|
desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
|
|
51
59
|
desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
|
|
52
|
-
merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
|
|
53
|
-
issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
|
|
54
|
-
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
|
|
55
60
|
commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
|
|
56
|
-
ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
|
|
57
61
|
ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
|
|
58
62
|
ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
|
|
59
63
|
ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
|
|
@@ -74,29 +78,29 @@ jobs:
|
|
|
74
78
|
project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
|
|
75
79
|
agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
|
|
76
80
|
agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
77
|
-
agent-model: ${{ vars.AGENT_MODEL || 'gpt-
|
|
81
|
+
agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
|
|
78
82
|
agent-effort: ${{ vars.AGENT_EFFORT }}
|
|
79
|
-
agent-
|
|
83
|
+
agent-executable: ${{ vars.AGENT_EXECUTABLE }}
|
|
80
84
|
findings-provider: ${{ vars.FINDINGS_PROVIDER }}
|
|
81
85
|
findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
|
|
82
86
|
findings-model: ${{ vars.FINDINGS_MODEL }}
|
|
83
87
|
findings-effort: ${{ vars.FINDINGS_EFFORT }}
|
|
84
|
-
findings-
|
|
88
|
+
findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
|
|
85
89
|
fixer-provider: ${{ vars.FIXER_PROVIDER }}
|
|
86
90
|
fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
|
|
87
91
|
fixer-model: ${{ vars.FIXER_MODEL }}
|
|
88
92
|
fixer-effort: ${{ vars.FIXER_EFFORT }}
|
|
89
|
-
fixer-
|
|
93
|
+
fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
|
|
90
94
|
planner-provider: ${{ vars.PLANNER_PROVIDER }}
|
|
91
95
|
planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
|
|
92
96
|
planner-model: ${{ vars.PLANNER_MODEL }}
|
|
93
97
|
planner-effort: ${{ vars.PLANNER_EFFORT }}
|
|
94
|
-
planner-
|
|
98
|
+
planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
|
|
95
99
|
reviewer-provider: ${{ vars.REVIEWER_PROVIDER }}
|
|
96
100
|
reviewer-model-provider: ${{ vars.REVIEWER_MODEL_PROVIDER }}
|
|
97
101
|
reviewer-model: ${{ vars.REVIEWER_MODEL }}
|
|
98
102
|
reviewer-effort: ${{ vars.REVIEWER_EFFORT }}
|
|
99
|
-
reviewer-
|
|
103
|
+
reviewer-executable: ${{ vars.REVIEWER_EXECUTABLE }}
|
|
100
104
|
project-ids: ${{ vars.PROJECT_IDS }}
|
|
101
105
|
token: ${{ secrets.PAT }}
|
|
102
106
|
env:
|
|
@@ -104,13 +108,9 @@ jobs:
|
|
|
104
108
|
AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
|
|
105
109
|
AGENT_MODEL: ${{ vars.AGENT_MODEL }}
|
|
106
110
|
AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
|
|
107
|
-
AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
|
|
108
111
|
AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
|
|
109
|
-
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-
|
|
110
|
-
|
|
111
|
-
CODEX_VERSION: ${{ vars.CODEX_VERSION }}
|
|
112
|
-
OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
|
|
113
|
-
CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
|
|
112
|
+
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
|
|
113
|
+
AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
|
|
114
114
|
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
|
|
115
115
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
116
116
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
@@ -118,5 +118,4 @@ jobs:
|
|
|
118
118
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
119
119
|
CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
|
|
120
120
|
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
|
|
121
|
-
CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
|
|
122
121
|
COPILOT_EVIDENCE_TOKEN: ${{ github.token }}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Copilot - Pull Request Approval
|
|
2
|
+
run-name: Copilot approval · ${{ github.event_name }}
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
workflow_run:
|
|
6
|
+
workflows: __PR_APPROVAL_WORKFLOW_NAMES__
|
|
7
|
+
types: [completed]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
pr:
|
|
11
|
+
description: Positive pull-request number to recheck
|
|
12
|
+
required: true
|
|
13
|
+
type: number
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
observe-approval:
|
|
17
|
+
name: Copilot - Pull Request Approval
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
timeout-minutes: 15
|
|
20
|
+
concurrency:
|
|
21
|
+
# Some workflow_run payloads omit the PR association. A repository-wide
|
|
22
|
+
# lane keeps every wakeup for the same PR serialized even when one run is
|
|
23
|
+
# associated by PR number and another is resolved from its head SHA.
|
|
24
|
+
group: copilot-approval-${{ github.repository }}
|
|
25
|
+
cancel-in-progress: false
|
|
26
|
+
permissions:
|
|
27
|
+
actions: read
|
|
28
|
+
checks: write
|
|
29
|
+
contents: read
|
|
30
|
+
pull-requests: read
|
|
31
|
+
steps:
|
|
32
|
+
- name: Observe current PR evidence without checking out PR code
|
|
33
|
+
uses: vypdev/copilot@v3
|
|
34
|
+
with:
|
|
35
|
+
pr-approval-observer: 'true'
|
|
36
|
+
pr-approval-pr-number: ${{ github.event.inputs.pr || '' }}
|
|
37
|
+
pr-approval-policy: ${{ vars.PR_APPROVAL_POLICY || '' }}
|
|
38
|
+
main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
|
|
39
|
+
development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
|
|
40
|
+
feature-tree: ${{ vars.FEATURE_TREE || 'feature' }}
|
|
41
|
+
bugfix-tree: ${{ vars.BUGFIX_TREE || 'bugfix' }}
|
|
42
|
+
docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
|
|
43
|
+
chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
|
|
44
|
+
bugbot-severity: ${{ vars.BUGBOT_SEVERITY || 'low' }}
|
|
45
|
+
bugbot-dry-run: ${{ vars.BUGBOT_DRY_RUN || 'false' }}
|
|
46
|
+
ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
|
|
47
|
+
repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
|
|
48
|
+
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
|
|
49
|
+
token: ${{ secrets.PAT }}
|
|
50
|
+
env:
|
|
51
|
+
COPILOT_APPROVAL_CHECK_TOKEN: ${{ github.token }}
|