@vypdev/copilot 3.2.0 → 3.3.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.
Files changed (71) hide show
  1. package/README.md +49 -16
  2. package/action.yml +67 -35
  3. package/build/api/index.js +4666 -0
  4. package/build/api/src/api.d.ts +35 -0
  5. package/build/api/src/application/ports/agent_configuration_ports.d.ts +3 -0
  6. package/build/api/src/application/ports/agent_findings_ports.d.ts +8 -0
  7. package/build/api/src/application/ports/agent_query_ports.d.ts +14 -0
  8. package/build/api/src/application/ports/bugbot_context_ports.d.ts +9 -0
  9. package/build/api/src/application/ports/bugbot_finding_publication_ports.d.ts +7 -0
  10. package/build/api/src/application/ports/bugbot_finding_resolution_ports.d.ts +6 -0
  11. package/build/api/src/application/ports/bugbot_issue_read_ports.d.ts +10 -0
  12. package/build/api/src/application/ports/bugbot_issue_write_ports.d.ts +12 -0
  13. package/build/api/src/application/ports/bugbot_pull_request_read_ports.d.ts +47 -0
  14. package/build/api/src/application/ports/bugbot_pull_request_resolution_ports.d.ts +3 -0
  15. package/build/api/src/application/ports/bugbot_pull_request_write_ports.d.ts +4 -0
  16. package/build/api/src/application/ports/bugbot_rule_ports.d.ts +12 -0
  17. package/build/api/src/application/ports/bugbot_telemetry_ports.d.ts +32 -0
  18. package/build/api/src/application/ports/pull_request_review_comment_ports.d.ts +43 -0
  19. package/build/api/src/application/usecases/steps/commit/bugbot/types.d.ts +112 -0
  20. package/build/api/src/data/model/agent.d.ts +2 -0
  21. package/build/api/src/data/model/ai.d.ts +28 -0
  22. package/build/api/src/data/model/branch_configuration.d.ts +6 -0
  23. package/build/api/src/data/model/branches.d.ts +12 -0
  24. package/build/api/src/data/model/commit.d.ts +8 -0
  25. package/build/api/src/data/model/config.d.ts +30 -0
  26. package/build/api/src/data/model/emoji.d.ts +5 -0
  27. package/build/api/src/data/model/execution.d.ts +75 -0
  28. package/build/api/src/data/model/execution_components.d.ts +43 -0
  29. package/build/api/src/data/model/execution_inputs.d.ts +94 -0
  30. package/build/api/src/data/model/hotfix.d.ts +7 -0
  31. package/build/api/src/data/model/images.d.ts +27 -0
  32. package/build/api/src/data/model/issue.d.ts +27 -0
  33. package/build/api/src/data/model/issue_types.d.ts +30 -0
  34. package/build/api/src/data/model/labels.d.ts +60 -0
  35. package/build/api/src/data/model/locale.d.ts +6 -0
  36. package/build/api/src/data/model/project_detail.d.ts +15 -0
  37. package/build/api/src/data/model/projects.d.ts +14 -0
  38. package/build/api/src/data/model/pull_request.d.ts +32 -0
  39. package/build/api/src/data/model/recommendation_state.d.ts +6 -0
  40. package/build/api/src/data/model/release.d.ts +6 -0
  41. package/build/api/src/data/model/result.d.ts +25 -0
  42. package/build/api/src/data/model/single_action.d.ts +43 -0
  43. package/build/api/src/data/model/size_threshold.d.ts +6 -0
  44. package/build/api/src/data/model/size_thresholds.d.ts +10 -0
  45. package/build/api/src/data/model/tokens.d.ts +4 -0
  46. package/build/api/src/data/model/welcome.d.ts +5 -0
  47. package/build/api/src/data/model/workflows.d.ts +5 -0
  48. package/build/api/src/domain/agent.d.ts +26 -0
  49. package/build/api/src/domain/bugbot/finding_identity.d.ts +26 -0
  50. package/build/api/src/domain/bugbot/review_command.d.ts +16 -0
  51. package/build/api/src/domain/bugbot/review_configuration.d.ts +25 -0
  52. package/build/api/src/domain/copilot_lifecycle.d.ts +42 -0
  53. package/build/api/src/domain/pull_request_description.d.ts +13 -0
  54. package/build/api/src/tooling/bugbot_analytics.d.ts +24 -0
  55. package/build/api/src/tooling/bugbot_benchmark.d.ts +26 -0
  56. package/build/api/src/tooling/bugbot_quality_eval.d.ts +41 -0
  57. package/build/cli/index.js +12469 -1740
  58. package/build/github_action/index.js +10042 -1291
  59. package/package.json +16 -6
  60. package/setup/ISSUE_TEMPLATE/help_request.yml +5 -0
  61. package/setup/workflows/agent-cli-provisioning.yml +26 -27
  62. package/setup/workflows/copilot_branch_sync.yml +19 -0
  63. package/setup/workflows/copilot_close_inactive_issues.yml +49 -0
  64. package/setup/workflows/copilot_commit.yml +56 -1
  65. package/setup/workflows/copilot_credential_health.yml +190 -0
  66. package/setup/workflows/copilot_issue.yml +42 -2
  67. package/setup/workflows/copilot_issue_comment.yml +53 -4
  68. package/setup/workflows/copilot_pull_request.yml +65 -3
  69. package/setup/workflows/copilot_pull_request_comment.yml +53 -4
  70. package/setup/workflows/hotfix_workflow.yml +39 -19
  71. package/setup/workflows/release_workflow.yml +39 -19
@@ -2,21 +2,76 @@ name: Copilot - Pull Request
2
2
 
3
3
  on:
4
4
  pull_request:
5
- types: [opened, reopened, edited, labeled, unlabeled, closed, assigned, unassigned, synchronize]
5
+ types: [opened, reopened, edited, closed, synchronize]
6
+ pull_request_review:
7
+ types: [submitted, edited, dismissed]
6
8
 
7
9
  jobs:
8
10
  copilot-pull-requests:
11
+ if: ${{ (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN) && github.event.pull_request.head.repo.full_name == github.repository }}
9
12
  name: Copilot - Pull Request
10
13
  runs-on: ubuntu-latest
11
14
  timeout-minutes: 120
15
+ permissions:
16
+ checks: write
17
+ contents: read
12
18
  steps:
13
19
  - name: Checkout Repository
14
20
  uses: actions/checkout@v5
21
+ with:
22
+ persist-credentials: false
23
+ fetch-depth: 0
24
+
25
+ - name: Fetch incremental review range
26
+ if: github.event.action == 'synchronize'
27
+ env:
28
+ BEFORE_SHA: ${{ github.event.before }}
29
+ AFTER_SHA: ${{ github.event.after }}
30
+ run: |
31
+ git cat-file -e "${AFTER_SHA}^{commit}"
32
+ if ! git cat-file -e "${BEFORE_SHA}^{commit}"; then
33
+ echo "::notice::The previous PR commit is unavailable; Bugbot will use the canonical pull-request diff."
34
+ fi
15
35
 
16
36
  - uses: vypdev/copilot@v3
17
37
  with:
18
- ai-ignore-files: build/*
38
+ ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
19
39
  debug: ${{ vars.DEBUG }}
40
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
41
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
42
+ feature-tree: ${{ vars.FEATURE_TREE || 'feature' }}
43
+ bugfix-tree: ${{ vars.BUGFIX_TREE || 'bugfix' }}
44
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
45
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
46
+ docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
47
+ chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
48
+ branch-management-always: ${{ vars.BRANCH_MANAGEMENT_ALWAYS || 'false' }}
49
+ reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
50
+ desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
51
+ 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
+ commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
56
+ ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
57
+ ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
58
+ ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
59
+ ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
60
+ bugbot-severity: ${{ vars.BUGBOT_SEVERITY || 'low' }}
61
+ bugbot-comment-limit: ${{ vars.BUGBOT_COMMENT_LIMIT || '20' }}
62
+ bugbot-fix-verify-commands: ${{ vars.BUGBOT_AUTOFIX_VERIFY_COMMANDS }}
63
+ bugbot-dry-run: ${{ vars.BUGBOT_DRY_RUN || 'false' }}
64
+ bugbot-effort: ${{ vars.BUGBOT_EFFORT || 'smart' }}
65
+ bugbot-review-drafts: ${{ vars.BUGBOT_REVIEW_DRAFTS || 'false' }}
66
+ bugbot-trace-rules: ${{ vars.BUGBOT_TRACE_RULES || 'false' }}
67
+ bugbot-suggested-changes: ${{ vars.BUGBOT_SUGGESTED_CHANGES || 'true' }}
68
+ bugbot-telemetry: ${{ vars.BUGBOT_TELEMETRY || 'true' }}
69
+ bugbot-fail-on-unresolved: ${{ vars.BUGBOT_FAIL_ON_UNRESOLVED || 'false' }}
70
+ bugbot-organization-rules: ${{ vars.BUGBOT_ORGANIZATION_RULES }}
71
+ project-column-issue-created: ${{ vars.PROJECT_COLUMN_ISSUE_CREATED || 'Todo' }}
72
+ project-column-pull-request-created: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_CREATED || 'In Progress' }}
73
+ project-column-issue-in-progress: ${{ vars.PROJECT_COLUMN_ISSUE_IN_PROGRESS || 'In Progress' }}
74
+ project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
20
75
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
21
76
  agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
22
77
  agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
@@ -32,6 +87,11 @@ jobs:
32
87
  fixer-model: ${{ vars.FIXER_MODEL }}
33
88
  fixer-effort: ${{ vars.FIXER_EFFORT }}
34
89
  fixer-command: ${{ vars.FIXER_COMMAND }}
90
+ planner-provider: ${{ vars.PLANNER_PROVIDER }}
91
+ planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
92
+ planner-model: ${{ vars.PLANNER_MODEL }}
93
+ planner-effort: ${{ vars.PLANNER_EFFORT }}
94
+ planner-command: ${{ vars.PLANNER_COMMAND }}
35
95
  reviewer-provider: ${{ vars.REVIEWER_PROVIDER }}
36
96
  reviewer-model-provider: ${{ vars.REVIEWER_MODEL_PROVIDER }}
37
97
  reviewer-model: ${{ vars.REVIEWER_MODEL }}
@@ -56,5 +116,7 @@ jobs:
56
116
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
57
117
  GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
58
118
  OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
59
- 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' || vars.RELEASE_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
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
+ CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
60
121
  CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
122
+ COPILOT_EVIDENCE_TOKEN: ${{ github.token }}
@@ -6,19 +6,58 @@ on:
6
6
 
7
7
  jobs:
8
8
  copilot-pull-requests:
9
+ if: ${{ (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN) && github.event.pull_request.head.repo.full_name == github.repository }}
9
10
  name: Copilot - Pull Request Comment
10
11
  runs-on: ubuntu-latest
11
12
  timeout-minutes: 120
12
13
  permissions:
13
- contents: write
14
+ contents: read
14
15
  steps:
15
16
  - name: Checkout Repository
16
17
  uses: actions/checkout@v5
18
+ with:
19
+ persist-credentials: false
20
+ fetch-depth: 0
17
21
 
18
22
  - uses: vypdev/copilot@v3
19
23
  with:
20
- ai-ignore-files: build/*
24
+ ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
21
25
  debug: ${{ vars.DEBUG }}
26
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
27
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
28
+ feature-tree: ${{ vars.FEATURE_TREE || 'feature' }}
29
+ bugfix-tree: ${{ vars.BUGFIX_TREE || 'bugfix' }}
30
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
31
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
32
+ docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
33
+ chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
34
+ branch-management-always: ${{ vars.BRANCH_MANAGEMENT_ALWAYS || 'false' }}
35
+ reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
36
+ desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
37
+ 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
+ commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
42
+ ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
43
+ ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
44
+ ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
45
+ ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
46
+ bugbot-severity: ${{ vars.BUGBOT_SEVERITY || 'low' }}
47
+ bugbot-comment-limit: ${{ vars.BUGBOT_COMMENT_LIMIT || '20' }}
48
+ bugbot-fix-verify-commands: ${{ vars.BUGBOT_AUTOFIX_VERIFY_COMMANDS }}
49
+ bugbot-dry-run: ${{ vars.BUGBOT_DRY_RUN || 'false' }}
50
+ bugbot-effort: ${{ vars.BUGBOT_EFFORT || 'smart' }}
51
+ bugbot-review-drafts: ${{ vars.BUGBOT_REVIEW_DRAFTS || 'false' }}
52
+ bugbot-trace-rules: ${{ vars.BUGBOT_TRACE_RULES || 'false' }}
53
+ bugbot-suggested-changes: ${{ vars.BUGBOT_SUGGESTED_CHANGES || 'true' }}
54
+ bugbot-telemetry: ${{ vars.BUGBOT_TELEMETRY || 'true' }}
55
+ bugbot-fail-on-unresolved: ${{ vars.BUGBOT_FAIL_ON_UNRESOLVED || 'false' }}
56
+ bugbot-organization-rules: ${{ vars.BUGBOT_ORGANIZATION_RULES }}
57
+ project-column-issue-created: ${{ vars.PROJECT_COLUMN_ISSUE_CREATED || 'Todo' }}
58
+ project-column-pull-request-created: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_CREATED || 'In Progress' }}
59
+ project-column-issue-in-progress: ${{ vars.PROJECT_COLUMN_ISSUE_IN_PROGRESS || 'In Progress' }}
60
+ project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
22
61
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
23
62
  agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
24
63
  agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
@@ -39,8 +78,17 @@ jobs:
39
78
  reviewer-model: ${{ vars.REVIEWER_MODEL }}
40
79
  reviewer-effort: ${{ vars.REVIEWER_EFFORT }}
41
80
  reviewer-command: ${{ vars.REVIEWER_COMMAND }}
81
+ planner-provider: ${{ vars.PLANNER_PROVIDER }}
82
+ planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
83
+ planner-model: ${{ vars.PLANNER_MODEL }}
84
+ planner-effort: ${{ vars.PLANNER_EFFORT }}
85
+ planner-command: ${{ vars.PLANNER_COMMAND }}
86
+ tester-provider: ${{ vars.TESTER_PROVIDER }}
87
+ tester-model-provider: ${{ vars.TESTER_MODEL_PROVIDER }}
88
+ tester-model: ${{ vars.TESTER_MODEL }}
89
+ tester-effort: ${{ vars.TESTER_EFFORT }}
90
+ tester-command: ${{ vars.TESTER_COMMAND }}
42
91
  project-ids: ${{ vars.PROJECT_IDS }}
43
- bugbot-fix-verify-commands: ${{ vars.BUGBOT_AUTOFIX_VERIFY_COMMANDS }}
44
92
  token: ${{ secrets.PAT }}
45
93
  env:
46
94
  AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
@@ -59,5 +107,6 @@ jobs:
59
107
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
60
108
  GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
61
109
  OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
62
- 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' || vars.RELEASE_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
110
+ 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
+ CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
63
112
  CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
@@ -47,6 +47,8 @@ jobs:
47
47
  contents: write
48
48
  steps:
49
49
  - uses: actions/checkout@v5
50
+ with:
51
+ persist-credentials: true
50
52
 
51
53
  - name: Set up Node.js 24
52
54
  uses: actions/setup-node@v7
@@ -108,34 +110,21 @@ jobs:
108
110
  needs: [ prepare-version-files ]
109
111
  permissions:
110
112
  contents: read
111
- env:
112
- AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
113
- AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
114
- AGENT_MODEL: ${{ vars.AGENT_MODEL }}
115
- AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
116
- AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
117
- AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
118
- AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
119
- AGENT_COMMAND: ${{ vars.AGENT_COMMAND }}
120
- CODEX_VERSION: ${{ vars.CODEX_VERSION }}
121
- OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
122
- CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
123
- OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
124
- OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
125
- ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
126
- GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
127
- OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
128
- 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' || vars.RELEASE_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
129
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
130
113
  steps:
131
114
  - name: Checkout Repository
132
115
  uses: actions/checkout@v5
116
+ with:
117
+ persist-credentials: false
133
118
 
134
119
  - name: Copilot - Create Tag
135
120
  uses: vypdev/copilot@v3
136
121
  if: ${{ success() }}
137
122
  with:
138
123
  debug: ${{ vars.DEBUG }}
124
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
125
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
126
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
127
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
139
128
  single-action: 'create_tag'
140
129
  single-action-issue: '${{ github.event.inputs.issue }}'
141
130
  single-action-version: '${{ github.event.inputs.version }}'
@@ -161,6 +150,10 @@ jobs:
161
150
  if: ${{ success() }}
162
151
  with:
163
152
  debug: ${{ vars.DEBUG }}
153
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
154
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
155
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
156
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
164
157
  single-action: 'create_release'
165
158
  single-action-issue: '${{ github.event.inputs.issue }}'
166
159
  single-action-version: '${{ github.event.inputs.version }}'
@@ -192,6 +185,10 @@ jobs:
192
185
  if: ${{ success() }}
193
186
  with:
194
187
  debug: ${{ vars.DEBUG }}
188
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
189
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
190
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
191
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
195
192
  single-action: 'deployed_action'
196
193
  single-action-issue: '${{ github.event.inputs.issue }}'
197
194
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
@@ -210,3 +207,26 @@ jobs:
210
207
  fixer-effort: ${{ vars.FIXER_EFFORT }}
211
208
  fixer-command: ${{ vars.FIXER_COMMAND }}
212
209
  token: ${{ secrets.PAT }}
210
+
211
+ report-failure:
212
+ name: Report deployment failure
213
+ runs-on: ubuntu-latest
214
+ timeout-minutes: 5
215
+ needs: [ queue-gate, prepare-version-files, tag ]
216
+ if: ${{ failure() && github.event.inputs.issue != '-1' }}
217
+ permissions:
218
+ issues: write
219
+ steps:
220
+ - name: Report failure on launcher issue
221
+ # This tag is published after the release changes reach master.
222
+ uses: vypdev/copilot@v3
223
+ with:
224
+ single-action: publish_issue_comment
225
+ single-action-issue: '${{ github.event.inputs.issue }}'
226
+ single-action-message: |
227
+ ## ❌ Hotfix deployment failed
228
+
229
+ The hotfix workflow did not complete successfully.
230
+
231
+ [Review the workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
232
+ token: ${{ github.token }}
@@ -47,6 +47,8 @@ jobs:
47
47
  contents: write
48
48
  steps:
49
49
  - uses: actions/checkout@v5
50
+ with:
51
+ persist-credentials: true
50
52
 
51
53
  - name: Set up Node.js 24
52
54
  uses: actions/setup-node@v7
@@ -108,34 +110,21 @@ jobs:
108
110
  needs: [ prepare-version-files ]
109
111
  permissions:
110
112
  contents: read
111
- env:
112
- AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
113
- AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
114
- AGENT_MODEL: ${{ vars.AGENT_MODEL }}
115
- AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
116
- AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
117
- AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
118
- AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
119
- AGENT_COMMAND: ${{ vars.AGENT_COMMAND }}
120
- CODEX_VERSION: ${{ vars.CODEX_VERSION }}
121
- OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
122
- CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
123
- OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
124
- OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
125
- ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
126
- GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
127
- OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
128
- 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' || vars.RELEASE_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
129
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
130
113
  steps:
131
114
  - name: Checkout Repository
132
115
  uses: actions/checkout@v5
116
+ with:
117
+ persist-credentials: false
133
118
 
134
119
  - name: Copilot - Create Tag
135
120
  uses: vypdev/copilot@v3
136
121
  if: ${{ success() }}
137
122
  with:
138
123
  debug: ${{ vars.DEBUG }}
124
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
125
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
126
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
127
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
139
128
  single-action: 'create_tag'
140
129
  single-action-issue: '${{ github.event.inputs.issue }}'
141
130
  single-action-version: '${{ github.event.inputs.version }}'
@@ -161,6 +150,10 @@ jobs:
161
150
  if: ${{ success() }}
162
151
  with:
163
152
  debug: ${{ vars.DEBUG }}
153
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
154
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
155
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
156
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
164
157
  single-action: 'create_release'
165
158
  single-action-issue: '${{ github.event.inputs.issue }}'
166
159
  single-action-version: '${{ github.event.inputs.version }}'
@@ -192,6 +185,10 @@ jobs:
192
185
  if: ${{ success() }}
193
186
  with:
194
187
  debug: ${{ vars.DEBUG }}
188
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
189
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
190
+ release-tree: ${{ vars.RELEASE_TREE || 'release' }}
191
+ hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
195
192
  single-action: 'deployed_action'
196
193
  single-action-issue: '${{ github.event.inputs.issue }}'
197
194
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
@@ -210,3 +207,26 @@ jobs:
210
207
  fixer-effort: ${{ vars.FIXER_EFFORT }}
211
208
  fixer-command: ${{ vars.FIXER_COMMAND }}
212
209
  token: ${{ secrets.PAT }}
210
+
211
+ report-failure:
212
+ name: Report deployment failure
213
+ runs-on: ubuntu-latest
214
+ timeout-minutes: 5
215
+ needs: [ queue-gate, prepare-version-files, tag ]
216
+ if: ${{ failure() && github.event.inputs.issue != '-1' }}
217
+ permissions:
218
+ issues: write
219
+ steps:
220
+ - name: Report failure on launcher issue
221
+ # This tag is published after the release changes reach master.
222
+ uses: vypdev/copilot@v3
223
+ with:
224
+ single-action: publish_issue_comment
225
+ single-action-issue: '${{ github.event.inputs.issue }}'
226
+ single-action-message: |
227
+ ## ❌ Release deployment failed
228
+
229
+ The release workflow did not complete successfully.
230
+
231
+ [Review the workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
232
+ token: ${{ github.token }}