[#1571] Split CircleCI config into multiple files.#2105
[#1571] Split CircleCI config into multiple files.#2105AlexSkrypnyk wants to merge 1 commit intomainfrom
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughSplits the monolithic CircleCI config into multiple files, adds a new Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Developer
participant CircleCI as CircleCI
participant Docker as RemoteDocker
participant DB as MigrationDB
participant Test as TestRunner
participant Art as ArtifactStore
Dev->>CircleCI: push/PR triggers workflows (commit → build → vortex-dev-test-ci-postbuild)
CircleCI->>Docker: setup remote docker & pull VORTEX_DB_IMAGE_BASE (26.1.0)
CircleCI->>DB: optional VORTEX_DOWNLOAD_DB2 -> download migration DB artifact
Docker->>CircleCI: container ready
CircleCI->>Test: run dotenv, ahoy, install deps, run PHPUnit/Behat
Test->>Art: upload test results & artifacts
CircleCI->>Dev: record job status and artifact metadata
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2105 +/- ##
==========================================
- Coverage 78.87% 78.35% -0.53%
==========================================
Files 124 117 -7
Lines 6482 6330 -152
Branches 44 0 -44
==========================================
- Hits 5113 4960 -153
- Misses 1369 1370 +1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 15
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (12)
.circleci/README.md(1 hunks).circleci/SHARED_COMPONENTS.md(1 hunks).circleci/TESTING.md(1 hunks).circleci/WORKFLOW_MAPPING.md(1 hunks).circleci/build-test-deploy.yml(6 hunks).circleci/database-nightly.yml(1 hunks).circleci/update-dependencies.yml(1 hunks).circleci/vortex-test-didi-fi.yml(1 hunks).circleci/vortex-test-didi-ii.yml(1 hunks).circleci/vortex-test-postbuild.yml(1 hunks)IMPLEMENTATION_SUMMARY.md(1 hunks)plan.md(1 hunks)
🧰 Additional context used
🪛 LanguageTool
IMPLEMENTATION_SUMMARY.md
[uncategorized] ~42-~42: The official name of this software platform is spelled with a capital “H”.
Context: ...icate purpose - Consistent: Matches .github/workflows/ naming patterns - **Prefixe...
(GITHUB)
plan.md
[style] ~11-~11: ‘mixed together’ might be wordy. Consider a shorter alternative.
Context: ... all jobs, workflows, and configuration mixed together - Difficult to navigate and maintain - ...
(EN_WORDINESS_PREMIUM_MIXED_TOGETHER)
[uncategorized] ~51-~51: The official name of this software platform is spelled with a capital “H”.
Context: ...creation GitHub Actions Equivalent: .github/workflows/build-test-deploy.yml **Work...
(GITHUB)
[uncategorized] ~89-~89: The official name of this software platform is spelled with a capital “H”.
Context: ...arameter GitHub Actions Equivalent: .github/workflows/update-dependencies.yml **Wo...
(GITHUB)
[uncategorized] ~117-~117: The official name of this software platform is spelled with a capital “H”.
Context: ...Note:* Follows same naming pattern as .github/workflows/vortex-test-*.yml files. --...
(GITHUB)
.circleci/README.md
[uncategorized] ~300-~300: The official name of this software platform is spelled with a capital “H”.
Context: ...e.com - GitHub Actions (reference): .github/workflows/ directory --- ## Maintena...
(GITHUB)
🪛 markdownlint-cli2 (0.18.1)
.circleci/TESTING.md
19-19: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
26-26: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
43-43: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
49-49: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
55-55: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
65-65: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
93-93: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
104-104: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
118-118: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
131-131: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
141-141: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
148-148: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
160-160: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
177-177: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
196-196: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
202-202: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
208-208: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
213-213: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
231-231: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
235-235: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
239-239: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
243-243: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
247-247: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
259-259: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
263-263: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
267-267: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
271-271: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
331-331: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.circleci/SHARED_COMPONENTS.md
7-7: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
11-11: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
15-15: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
18-18: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
22-22: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
26-26: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
30-30: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
39-39: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
44-44: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
49-49: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
54-54: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
58-58: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
62-62: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
68-68: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
74-74: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
83-83: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
92-92: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
97-97: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
104-104: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
112-112: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
IMPLEMENTATION_SUMMARY.md
39-39: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
45-45: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
51-51: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
60-60: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
66-66: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
72-72: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
78-78: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
88-88: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
96-96: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.circleci/WORKFLOW_MAPPING.md
7-7: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
16-16: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
22-22: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
28-28: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
38-38: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
45-45: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
50-50: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
55-55: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
60-60: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
66-66: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
71-71: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
plan.md
27-27: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
48-48: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
67-67: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
84-84: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
87-87: Unordered list indentation
Expected: 0; Actual: 2
(MD007, ul-indent)
88-88: Unordered list indentation
Expected: 0; Actual: 2
(MD007, ul-indent)
104-104: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
121-121: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
137-137: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
153-153: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
168-168: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
179-179: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
197-197: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
245-245: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
273-273: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
289-289: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
307-307: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
312-312: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
317-317: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
322-322: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
329-329: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
336-336: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
343-343: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
350-350: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
357-357: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
.circleci/README.md
13-13: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
34-34: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
51-51: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
78-78: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
95-95: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
112-112: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
193-193: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
297-297: Bare URL used
(MD034, no-bare-urls)
298-298: Bare URL used
(MD034, no-bare-urls)
299-299: Bare URL used
(MD034, no-bare-urls)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
- GitHub Check: build (0)
- GitHub Check: build (1)
- GitHub Check: vortex-test-workflow (2)
- GitHub Check: vortex-test-workflow (4)
- GitHub Check: vortex-test-workflow (1)
- GitHub Check: vortex-test-workflow (3)
- GitHub Check: vortex-test-workflow (0)
- GitHub Check: vortex-test-common
- GitHub Check: vortex-test-installer (8.3)
- GitHub Check: vortex-test-installer (8.4)
🔇 Additional comments (11)
.circleci/build-test-deploy.yml (2)
185-185: Verify workflow and job naming consistency.Job names have been simplified in the workflows section (e.g.,
build-test-deployworkflow at line 447), but the original job names are preserved. Confirm this naming matches the intended refactor and documentation.Line 447 shows workflow named
build-test-deploywhich matches the plan.md naming. Verify this is the intended name per the multi-file strategy.Also applies to: 382-382, 417-417
41-41: Verify CI runner and cache version strings are current by checking Docker Hub and GitHub releases.The version
25.10.0(October 2025) is consistently pinned across your infrastructure—including in docker-compose.yml for mysql, valkey, and docker-wait-for-dependencies services. However, I cannot definitively confirm thatdrevops/ci-runner:25.10.0and thev25.10.0-db11-cache keys are actual released versions.To verify these versions are available and maintained:
- Check Docker Hub for
drevops/ci-runner:25.10.0release- Check drevops/ci-runner GitHub releases to confirm version 25.10.0 exists
- Confirm the
-db11-cache suffix aligns with your database versioning strategy (likely MariaDB 11.x).circleci/README.md (1)
300-300: Capitalize "GitHub" correctly per branding guidelines.Line 300 references "Github Actions" but the official branding is "GitHub".
- - **GitHub Actions (reference):** `.github/workflows/` directory + - **GitHub Actions (reference):** `.github/workflows/` directoryLikely an incorrect or invalid review comment.
.circleci/vortex-test-didi-ii.yml (3)
246-250: Workflow dependency chain is correct.The workflow
vortex-test-didi-iicorrectly establishes thatvortex-test-didi-build-iidepends onvortex-test-didi-database-ii, ensuring the database is prepared before the build test executes. This sequential dependency is semantically sound.
213-237: No issues found—cache branch configuration is correct.Verification confirms both jobs in
vortex-test-didi-ii.ymlconsistently defineVORTEX_CI_DB_CACHE_BRANCH: vortex-dev-didi-ii, and this value is unique to the file with no conflicts against other configuration files (e.g.,vortex-test-didi-fi.ymlusesvortex-dev-didi-fi). Cache isolation is properly maintained.
119-126: No action required—cache key format is consistent across all sibling configuration files.Verification confirms the cache key formats in
vortex-test-didi-ii.ymlmatch exactly across sibling files (build-test-deploy.yml,database-nightly.yml,vortex-test-didi-fi.yml). The distinction betweendb_cache_fallbackin restore operations anddb_cache_fallback_yesin save operations is intentional and consistently applied across all configuration files, indicating a deliberate cache strategy design.IMPLEMENTATION_SUMMARY.md (1)
42-42: Capitalize "GitHub" consistently.Line 42 references
.github/workflows/but the capitalization of "GitHub" in nearby text should be consistent. Change ".github/workflows/" context comment to use proper "GitHub" capitalization if part of a sentence or heading.The reference to
.github/workflows/is correct as a path/directory name. No change needed here—this is a false positive from the static analysis tool. The linter flagged this as "uncategorized" because.github/is a literal path, not a reference to the GitHub service/company. Disregard this hint..circleci/vortex-test-didi-fi.yml (2)
227-227: Tags are already unique across variants; no action required.Verification confirms the FI and II variants use distinct, clearly distinguishable tags (
vortex-dev-didi-database-fivs.vortex-dev-database-ii) appended to the shared base image. These tags are sufficiently unique to prevent cache conflicts and accidental overwrites across pipeline runs.
213-249: No issues found. TheVORTEX_DB_DOWNLOAD_SOURCEdistinction between FI and II variants is intentional and correct.Verification confirms:
- FI variant correctly uses
urlfor file-based database downloads (line 216)- II variant correctly uses
VORTEX_CONTAINER_REGISTRYfor container image downloads (line 216)- Both configurations are properly differentiated and architecturally appropriate
- Comments in the FI file (lines 218-226) explain the design rationale
The code is correctly configured for its intended workflow.
.circleci/database-nightly.yml (2)
176-186: Override is intentional and correctly implemented.The cache fallback logic works as designed: when
VORTEX_CI_DB_CACHE_FALLBACKis set to"no", the bash expansion${VORTEX_CI_DB_CACHE_FALLBACK/no/${CIRCLE_BUILD_NUM}}substitutes a unique build number into/tmp/db_cache_fallback, making cache keys unique per build and forcing a fresh cache build. When set to"yes"(base value), it remains constant, allowing cache restoration. The restore_cache keys correctly use this file's checksum, ensuring the cache invalidation logic functions properly without breaking the build.
182-182: Verify MariaDB image version25.3.0currency with drevops maintainers.Confirmed findings:
- CI runner version is synchronized at
25.10.0across all 5 CircleCI config files ✓- MariaDB version
25.3.0is pinned indatabase-nightly.yml:182and consistent (only one occurrence)- Version mismatch exists:
25.10.0(ci-runner) vs25.3.0(mariadb-drupal-data)Cannot confirm via web search whether
25.3.0is current or outdated for the customdrevops/mariadb-drupal-dataimage. Manually verify:
- If version
25.10.0exists for the MariaDB image- Whether the
25.3.0pin is intentional or requires update for compatibility
.circleci/database-nightly.yml
Outdated
| database-nightly: | ||
| triggers: | ||
| - schedule: | ||
| cron: *nightly_db_schedule | ||
| filters: | ||
| branches: | ||
| only: | ||
| - develop | ||
| jobs: |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Verify cron schedule syntax and UTC timezone awareness.
The nightly database workflow uses cron schedule "0 18 * * *" (6 PM UTC daily on develop branch). Ensure that stakeholders are aware this runs in UTC and may execute at unexpected local times depending on timezone. Consider documenting the expected execution time in project documentation or CircleCI settings.
If the current schedule does not align with team expectations, adjust the hour value in the cron expression. For reference, common values: 0 2 * * * (2 AM UTC), 0 18 * * * (6 PM UTC), 0 22 * * * (10 PM UTC).
🤖 Prompt for AI Agents
In .circleci/database-nightly.yml around lines 195 to 203 the scheduled cron "0
18 * * *" is set for UTC (runs 18:00 UTC daily on develop) which may not match
team local expectations; verify the cron syntax and timezone with stakeholders,
either adjust the hour field to the correct UTC time that maps to the intended
local run time or document the UTC execution time near this job (or in project
docs/CircleCI settings) so everyone is aware of when it will run.
.circleci/README.md
Outdated
| #### 1. `build-test-deploy.yml` | ||
| **Pipeline Name:** `Database, Build, Test and Deploy` | ||
|
|
||
| **Purpose:** Core build, test, and deployment workflow for the project. | ||
|
|
||
| **Triggers:** | ||
| - Push to any branch | ||
| - Push to any tag | ||
|
|
||
| **Jobs:** | ||
| - `database` - Download and cache database | ||
| - `build` - Build stack, lint code, run tests | ||
| - `deploy` - Deploy to specific branches | ||
| - `deploy-tags` - Deploy tagged releases | ||
|
|
||
| **Conditionals:** | ||
| - `database` job: Conditional on `!PROVISION_TYPE_PROFILE` | ||
| - `deploy` and `deploy-tags` jobs: Conditional on `DEPLOYMENT` | ||
|
|
||
| --- | ||
|
|
||
| #### 2. `database-nightly.yml` | ||
| **Pipeline Name:** `Database - Nightly refresh` | ||
|
|
||
| **Purpose:** Overnight database refresh and caching for next-day builds. | ||
|
|
||
| **Triggers:** | ||
| - Schedule: `0 18 * * *` (6 PM UTC daily) | ||
| - Branch: `develop` only | ||
|
|
||
| **Jobs:** | ||
| - `database-nightly` - Fresh database download and cache | ||
|
|
||
| **Conditionals:** | ||
| - Entire file: Conditional on `!PROVISION_TYPE_PROFILE` | ||
|
|
||
| --- | ||
|
|
||
| #### 3. `update-dependencies.yml` | ||
| **Pipeline Name:** `Update dependencies` | ||
|
|
||
| **Purpose:** Self-hosted Renovate for automated dependency updates. | ||
|
|
||
| **Triggers:** | ||
| - Schedule: `5 11,23 * * *` (11:05 AM and 11:05 PM UTC daily) | ||
| - Manual: Pipeline parameter `run_update_dependencies` | ||
| - Branch: `develop` only | ||
|
|
||
| **Jobs:** | ||
| - `update-dependencies` - Run Renovate bot | ||
|
|
||
| **Requirements:** | ||
| - `RENOVATE_TOKEN` environment variable | ||
| - `RENOVATE_REPOSITORIES` environment variable | ||
| - `RENOVATE_GIT_AUTHOR` environment variable | ||
|
|
||
| **Conditionals:** | ||
| - Entire file: Conditional on `DEPS_UPDATE_PROVIDER_CI` | ||
|
|
||
| --- | ||
|
|
||
| ### Vortex Development Pipelines | ||
|
|
||
| These pipelines are used for Vortex framework testing and will be removed during project installation. | ||
|
|
||
| #### 4. `vortex-test-postbuild.yml` | ||
| **Pipeline Name:** `Vortex - Test (Post-build)` | ||
|
|
||
| **Purpose:** Vortex framework validation after main build. | ||
|
|
||
| **Triggers:** | ||
| - Push to any branch | ||
| - Push to any tag | ||
|
|
||
| **Jobs:** | ||
| - `vortex-test-postbuild` - Run Vortex post-build tests | ||
|
|
||
| **Conditionals:** | ||
| - Entire file: Conditional on `VORTEX_DEV` | ||
|
|
||
| --- | ||
|
|
||
| #### 5. `vortex-test-didi-fi.yml` | ||
| **Pipeline Name:** `Vortex - Test (DIDI from file)` | ||
|
|
||
| **Purpose:** Test database-in-image workflow with file source. | ||
|
|
||
| **Triggers:** | ||
| - Push to any branch (implicit) | ||
|
|
||
| **Jobs:** | ||
| - `vortex-test-didi-database-fi` - Create DB image from file | ||
| - `vortex-test-didi-build-fi` - Build site with DIDI image | ||
|
|
||
| **Conditionals:** | ||
| - Entire file: Conditional on `VORTEX_DEV` | ||
|
|
||
| --- | ||
|
|
||
| #### 6. `vortex-test-didi-ii.yml` | ||
| **Pipeline Name:** `Vortex - Test (DIDI from registry)` | ||
|
|
||
| **Purpose:** Test database-in-image workflow with registry source. | ||
|
|
||
| **Triggers:** | ||
| - Push to any branch (implicit) | ||
|
|
||
| **Jobs:** | ||
| - `vortex-test-didi-database-ii` - Create DB image from registry | ||
| - `vortex-test-didi-build-ii` - Build site with DIDI image | ||
|
|
||
| **Conditionals:** | ||
| - Entire file: Conditional on `VORTEX_DEV` | ||
|
|
||
| --- | ||
|
|
||
| ## Setting Up Pipelines in CircleCI | ||
|
|
||
| **Prerequisites:** | ||
| - CircleCI account connected to GitHub | ||
| - **CircleCI GitHub App integration** (required for multiple pipelines) | ||
| - Existing project configured in CircleCI | ||
|
|
||
| ### Configuration Steps | ||
|
|
||
| 1. **Access CircleCI UI:** | ||
| - Go to your project in CircleCI | ||
| - Navigate to **Project Settings** → **Project Setup** | ||
|
|
||
| 2. **Create Each Pipeline:** | ||
|
|
||
| For each configuration file, click **Add Pipeline** and configure: | ||
|
|
||
| | Config File | Pipeline Name | Config Path | Trigger | | ||
| |-------------|--------------|-------------|---------| | ||
| | build-test-deploy.yml | `Database, Build, Test and Deploy` | `.circleci/build-test-deploy.yml` | Push to all branches, all tags | | ||
| | database-nightly.yml | `Database - Nightly refresh` | `.circleci/database-nightly.yml` | Schedule (`0 18 * * *` on `develop`) | | ||
| | update-dependencies.yml | `Update dependencies` | `.circleci/update-dependencies.yml` | Schedule (`5 11,23 * * *` on `develop`) + Manual | | ||
| | vortex-test-postbuild.yml | `Vortex - Test (Post-build)` | `.circleci/vortex-test-postbuild.yml` | Push to all branches, all tags | | ||
| | vortex-test-didi-fi.yml | `Vortex - Test (DIDI from file)` | `.circleci/vortex-test-didi-fi.yml` | Push to all branches | | ||
| | vortex-test-didi-ii.yml | `Vortex - Test (DIDI from registry)` | `.circleci/vortex-test-didi-ii.yml` | Push to all branches | | ||
|
|
||
| 3. **Configure Environment Variables:** | ||
|
|
||
| Ensure the following project-level environment variables are set: | ||
|
|
||
| **Required for all pipelines:** | ||
| - `VORTEX_CONTAINER_REGISTRY_USER` - Docker registry username | ||
| - `VORTEX_CONTAINER_REGISTRY_PASS` - Docker registry password | ||
|
|
||
| **Required for database pipelines:** | ||
| - Add SSH key for database downloads (fingerprint in config) | ||
|
|
||
| **Required for deployment pipelines:** | ||
| - Add SSH key for deployments (fingerprint in config) | ||
|
|
||
| **Required for update-dependencies pipeline:** | ||
| - `RENOVATE_TOKEN` - GitHub access token | ||
| - `RENOVATE_REPOSITORIES` - Repository to run Renovate on | ||
| - `RENOVATE_GIT_AUTHOR` - Author for Renovate commits | ||
|
|
||
| ### Trigger Configuration Examples | ||
|
|
||
| **For scheduled pipelines:** | ||
| - In CircleCI UI, select **Trigger** → **Schedule** | ||
| - Set cron expression and target branch | ||
| - Example: `0 18 * * *` on branch `develop` | ||
|
|
||
| **For manual triggers:** | ||
| - Use pipeline parameters in config file | ||
| - Trigger via CircleCI UI or API | ||
|
|
||
| **For push triggers:** | ||
| - Select **Trigger** → **GitHub event** | ||
| - Choose appropriate events (push, tag, pull request) | ||
|
|
||
| --- | ||
|
|
||
| ## File Organization | ||
|
|
||
| ``` | ||
| .circleci/ | ||
| ├── README.md # This file | ||
| ├── WORKFLOW_MAPPING.md # Workflow mapping documentation | ||
| ├── SHARED_COMPONENTS.md # Shared component analysis | ||
| ├── build-test-deploy.yml # Main pipeline | ||
| ├── database-nightly.yml # Nightly DB refresh | ||
| ├── update-dependencies.yml # Dependency updates | ||
| ├── vortex-test-postbuild.yml # Vortex post-build tests | ||
| ├── vortex-test-didi-fi.yml # Vortex DIDI from file tests | ||
| └── vortex-test-didi-ii.yml # Vortex DIDI from registry tests | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## Naming Conventions | ||
|
|
||
| Files follow **GitHub Actions-style naming** for consistency: | ||
|
|
||
| - **Kebab-case:** All lowercase with hyphens (e.g., `build-test-deploy.yml`) | ||
| - **Descriptive names:** Action-oriented naming (e.g., `update-dependencies.yml`) | ||
| - **Vortex prefix:** Development workflows prefixed with `vortex-` (e.g., `vortex-test-*.yml`) | ||
|
|
||
| Pipeline names in CircleCI UI also follow this convention for easy identification. | ||
|
|
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Fix Markdown formatting: add blank lines around headings.
Multiple headings lack required blank lines per MD022. Ensure each heading is surrounded by blank lines.
Apply blank lines around headings at lines 13, 34, 51, 78, 95, 112 and others.
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
13-13: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
34-34: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
51-51: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
78-78: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
95-95: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
112-112: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
193-193: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
.circleci/README.md around lines 13 to 217: several Markdown headings are not
surrounded by blank lines (MD022); to fix, insert a single blank line before and
after each heading listed (lines 13, 34, 51, 78, 95, 112 and any other headings
in this range), ensuring top-level and subsection headings have an empty line
above and below so lists and paragraphs are separated from the heading; scan the
file for any additional headings in this block and apply the same change.
.circleci/README.md
Outdated
|
|
||
| ## File Organization | ||
|
|
||
| ``` |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Specify language for fenced code block.
Line 193 uses a fenced code block without specifying a language identifier per MD040.
- ```
+ ```bash
.circleci/🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
193-193: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In .circleci/README.md around line 193, the fenced code block opener is missing
a language identifier (MD040); update the opening backticks to include the
language (e.g., change ``` to ```bash) so the block reads as a bash code block,
ensuring the language tag follows the three backticks on that line.
.circleci/README.md
Outdated
| - **CircleCI Multiple Pipelines:** https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/ | ||
| - **CircleCI GitHub App:** https://circleci.com/docs/github-apps-integration/ | ||
| - **Vortex Documentation:** https://www.vortextemplate.com |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Wrap bare URLs in Markdown link syntax.
Lines 297-299 contain bare URLs that should be properly linked per MD034.
- - **CircleCI Multiple Pipelines:** https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/
- - **CircleCI GitHub App:** https://circleci.com/docs/github-apps-integration/
- - **Vortex Documentation:** https://www.vortextemplate.com
+ - **CircleCI Multiple Pipelines:** [https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/](https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/)
+ - **CircleCI GitHub App:** [https://circleci.com/docs/github-apps-integration/](https://circleci.com/docs/github-apps-integration/)
+ - **Vortex Documentation:** [https://www.vortextemplate.com](https://www.vortextemplate.com)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - **CircleCI Multiple Pipelines:** https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/ | |
| - **CircleCI GitHub App:** https://circleci.com/docs/github-apps-integration/ | |
| - **Vortex Documentation:** https://www.vortextemplate.com | |
| - **CircleCI Multiple Pipelines:** [https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/](https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/) | |
| - **CircleCI GitHub App:** [https://circleci.com/docs/github-apps-integration/](https://circleci.com/docs/github-apps-integration/) | |
| - **Vortex Documentation:** [https://www.vortextemplate.com](https://www.vortextemplate.com) |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
297-297: Bare URL used
(MD034, no-bare-urls)
298-298: Bare URL used
(MD034, no-bare-urls)
299-299: Bare URL used
(MD034, no-bare-urls)
🤖 Prompt for AI Agents
In .circleci/README.md around lines 297 to 299, there are bare URLs that violate
MD034; replace each plain URL with proper Markdown link syntax by providing
descriptive link text followed by the URL in brackets/parentheses (e.g.,
[CircleCI Multiple
Pipelines](https://circleci.com/docs/set-up-multiple-configuration-files-for-a-project/)),
updating all three lines so none contain raw bare URLs.
.circleci/SHARED_COMPONENTS.md
Outdated
| # Shared Components Across CircleCI Configs | ||
|
|
||
| This document identifies shared components and their usage across the split configuration files. | ||
|
|
||
| ## Aliases (All Files Need These) | ||
|
|
||
| ### 1. **db_ssh_fingerprint** (lines 16-20) | ||
| - **Used by:** build-test-deploy.yml, database-nightly.yml, vortex-test-didi-*.yml | ||
| - **Conditional:** !PROVISION_TYPE_PROFILE | ||
| - **Purpose:** SSH key for database downloads | ||
| ```yaml | ||
| - &db_ssh_fingerprint "SHA256:6d+U5QubT0eAWz+4N2wt+WM2qx6o4cvyvQ6xILETJ84" | ||
| ``` | ||
|
|
||
| ### 2. **deploy_ssh_fingerprint** (lines 22-24) | ||
| - **Used by:** build-test-deploy.yml | ||
| - **Purpose:** SSH key for deployments | ||
| ```yaml | ||
| - &deploy_ssh_fingerprint "SHA256:6d+U5QubT0eAWz+4N2wt+WM2qx6o4cvyvQ6xILETJ84" | ||
| ``` | ||
|
|
||
| ### 3. **nightly_db_schedule** (lines 26-29) | ||
| - **Used by:** database-nightly.yml | ||
| - **Conditional:** !PROVISION_TYPE_PROFILE | ||
| - **Purpose:** Cron schedule for nightly DB refresh | ||
| ```yaml | ||
| - &nightly_db_schedule "0 18 * * *" | ||
| ``` | ||
|
|
||
| ### 4. **runner_config** (lines 31-83) | ||
| - **Used by:** ALL config files (universal) | ||
| - **Purpose:** Shared runner container configuration | ||
| - **Contains:** | ||
| - working_directory alias | ||
| - Environment variables (DB cache, test results, artifacts) | ||
| - Docker image and auth | ||
| - Resource class | ||
|
|
||
| ### 5. **test_results** anchor (line 69) | ||
| - **Used by:** build-test-deploy.yml, vortex-test-*.yml | ||
| - **Purpose:** Test results directory path | ||
| - **Embedded in:** runner_config environment | ||
|
|
||
| ### 6. **artifacts** anchor (line 71) | ||
| - **Used by:** build-test-deploy.yml, vortex-test-*.yml | ||
| - **Purpose:** Artifacts directory path | ||
| - **Embedded in:** runner_config environment | ||
|
|
||
| ### 7. **working_directory** anchor (line 33) | ||
| - **Used by:** ALL config files | ||
| - **Purpose:** Project working directory | ||
| - **Embedded in:** runner_config | ||
|
|
||
| ### 8. **step_setup_remote_docker** (lines 85-91) | ||
| - **Used by:** build-test-deploy.yml, database-nightly.yml, vortex-test-*.yml | ||
| - **Purpose:** Setup remote docker with layer caching | ||
|
|
||
| ### 9. **step_process_codebase_for_ci** (lines 93-98) | ||
| - **Used by:** build-test-deploy.yml, database-nightly.yml, vortex-test-postbuild.yml | ||
| - **Purpose:** Process docker-compose.yml for CI | ||
|
|
||
| ### 10. **load_variables_from_dotenv** (lines 100-104) | ||
| - **Used by:** build-test-deploy.yml, database-nightly.yml, vortex-test-postbuild.yml | ||
| - **Purpose:** Load .env variables into bash environment | ||
|
|
||
| ## Parameters | ||
|
|
||
| ### run_update_dependencies (lines 110-113) | ||
| - **Used by:** update-dependencies.yml only | ||
| - **Purpose:** Manual trigger for dependency updates | ||
|
|
||
| ## File-Specific Component Mapping | ||
|
|
||
| ### build-test-deploy.yml | ||
| **Needs:** | ||
| - db_ssh_fingerprint (conditional) | ||
| - deploy_ssh_fingerprint | ||
| - runner_config (with all embedded anchors) | ||
| - step_setup_remote_docker | ||
| - step_process_codebase_for_ci | ||
| - load_variables_from_dotenv | ||
|
|
||
| ### database-nightly.yml | ||
| **Needs:** | ||
| - db_ssh_fingerprint | ||
| - nightly_db_schedule | ||
| - runner_config (with all embedded anchors) | ||
| - step_setup_remote_docker | ||
| - step_process_codebase_for_ci | ||
| - load_variables_from_dotenv | ||
|
|
||
| ### update-dependencies.yml | ||
| **Needs:** | ||
| - parameters: run_update_dependencies | ||
| - NO other shared components (uses different docker image) | ||
|
|
||
| ### vortex-test-postbuild.yml | ||
| **Needs:** | ||
| - runner_config (with all embedded anchors) | ||
| - step_setup_remote_docker | ||
| - step_process_codebase_for_ci | ||
| - load_variables_from_dotenv | ||
|
|
||
| ### vortex-test-didi-fi.yml | ||
| **Needs:** | ||
| - db_ssh_fingerprint (for database job) | ||
| - runner_config (with all embedded anchors) | ||
| - step_setup_remote_docker | ||
| - step_process_codebase_for_ci | ||
| - load_variables_from_dotenv | ||
|
|
||
| ### vortex-test-didi-ii.yml | ||
| **Needs:** | ||
| - db_ssh_fingerprint (for database job) | ||
| - runner_config (with all embedded anchors) | ||
| - step_setup_remote_docker | ||
| - step_process_codebase_for_ci | ||
| - load_variables_from_dotenv | ||
|
|
||
| ## Strategy | ||
|
|
||
| Each config file will include its own copy of required aliases. This approach: | ||
| - ✅ Maintains file independence | ||
| - ✅ No cross-file dependencies | ||
| - ✅ Each file is self-contained and complete | ||
| - ✅ Easier to understand and modify | ||
| - ⚠️ Some duplication (acceptable trade-off) | ||
|
|
||
| ## Consistency Notes | ||
|
|
||
| 1. All aliases must be identical across files | ||
| 2. runner_config version (drevops/ci-runner:25.10.0) must match | ||
| 3. Conditional markers (#;<, #;>) must be preserved in all files | ||
| 4. Comments should be consistent across files |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Fix Markdown formatting: add blank lines around headings and code blocks.
Multiple formatting issues per Markdown best practices:
- MD022: Many headings lack surrounding blank lines (lines 7, 15, 22, 30, 39, 44, 49, 54, 58, 62, 68, 74, 83, 92, 97, 104, 112)
- MD031: Fenced code blocks on lines 11, 18, 26 need blank lines above them
Apply blank lines before and after all headings and code blocks per Markdown formatting standards.
Example for line 11:
`.yaml
- &db_ssh_fingerprint "SHA256:6d+U5QubT0eAWz+4N2wt+WM2qx6o4cvyvQ6xILETJ84"
becomes:
```diff
`.yaml
- &db_ssh_fingerprint "SHA256:6d+U5QubT0eAWz+4N2wt+WM2qx6o4cvyvQ6xILETJ84"
> Committable suggestion skipped: line range outside the PR's diff.
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.18.1)</summary>
7-7: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
11-11: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
---
15-15: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
18-18: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
---
22-22: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
26-26: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
---
30-30: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
39-39: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
44-44: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
49-49: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
54-54: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
58-58: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
62-62: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
68-68: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
74-74: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
83-83: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
92-92: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
97-97: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
104-104: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
---
112-112: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
.circleci/SHARED_COMPONENTS.md around lines 1 to 134: fix Markdown spacing
violations (MD022, MD031) by inserting a single blank line before and after each
heading and before and after each fenced code block; specifically add blank
lines surrounding the headings referenced (lines 7, 15, 22, 30, 39, 44, 49, 54,
58, 62, 68, 74, 83, 92, 97, 104, 112) and ensure code blocks at lines ~11, ~18,
~26 (and any other fenced blocks) have an empty line above and below them so all
headings and fenced blocks follow Markdown best practices.
</details>
<!-- This is an auto-generated comment by CodeRabbit -->
IMPLEMENTATION_SUMMARY.md
Outdated
| #### GitHub Actions-Style Naming | ||
| - **Kebab-case**: `build-test-deploy.yml`, `update-dependencies.yml` | ||
| - **Descriptive**: Names clearly indicate purpose | ||
| - **Consistent**: Matches `.github/workflows/` naming patterns | ||
| - **Prefixed**: Vortex development files use `vortex-` prefix | ||
|
|
||
| #### Self-Contained Files | ||
| - Each file includes all required aliases | ||
| - No cross-file dependencies | ||
| - Independent pipeline execution | ||
| - Complete workflow definitions | ||
|
|
||
| #### Preserved Functionality | ||
| - All conditional markers (`#;<`, `#;>`) intact | ||
| - Original job definitions preserved | ||
| - Caching behavior maintained | ||
| - Environment variable usage unchanged | ||
| - SSH key configuration preserved | ||
|
|
||
| ## Benefits Achieved | ||
|
|
||
| ### Maintainability | ||
| - ✅ Smaller, focused files (average ~245 lines vs. 763) | ||
| - ✅ Clear separation of concerns | ||
| - ✅ Easier to navigate and understand | ||
| - ✅ Reduced merge conflicts | ||
|
|
||
| ### Clarity | ||
| - ✅ Purpose-driven organization | ||
| - ✅ Consumer vs. development clearly separated | ||
| - ✅ Better documentation per pipeline | ||
| - ✅ Intuitive file naming | ||
|
|
||
| ### Flexibility | ||
| - ✅ Independent pipeline triggers | ||
| - ✅ Isolated testing workflows | ||
| - ✅ Easier to modify specific pipelines | ||
| - ✅ Better error isolation | ||
|
|
||
| ### Consumer Experience |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
Add blank lines above subheadings per Markdown best practices (MD022).
Multiple subheadings lack preceding blank lines, reducing readability. Add a blank line before each subheading to comply with the markdownlint standard.
## Overview
Successfully split the monolithic 763-line `.circleci/config.yml` into 6 focused, maintainable configuration files following GitHub Actions-style naming conventions.
## What Was Implemented
### 1. Configuration Files Created
+
| File | Purpose | Lines | Status |
...
### 2. Documentation Created
+
| Document | Purpose | Status |
...
### 3. Key Features
+
#### GitHub Actions-Style Naming
+
- **Kebab-case**: `build-test-deploy.yml`, `update-dependencies.yml`
...
+
#### Self-Contained Files
+
- Each file includes all required aliases
...
+
#### Preserved Functionality
+
- All conditional markers (`#;<`, `#;>`) intact
...
## Benefits Achieved
+
### Maintainability
+
- ✅ Smaller, focused files (average ~245 lines vs. 763)
...
+
### Clarity
+
- ✅ Purpose-driven organization
...
+
### Flexibility
+
- ✅ Independent pipeline triggers
...
+
### Consumer Experience
+
- ✅ Cleaner consumer projects (Vortex dev files removed)Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~42-~42: The official name of this software platform is spelled with a capital “H”.
Context: ...icate purpose - Consistent: Matches .github/workflows/ naming patterns - **Prefixe...
(GITHUB)
🪛 markdownlint-cli2 (0.18.1)
39-39: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
45-45: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
51-51: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
60-60: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
66-66: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
72-72: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
78-78: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
🤖 Prompt for AI Agents
In IMPLEMENTATION_SUMMARY.md around lines 39 to 78, several subheadings lack a
blank line above them which violates markdownlint MD022; insert a single blank
line before each subheading (lines that start with one or more #) within this
range so every heading is preceded by an empty line, ensure you don't remove
existing content or alter heading text, and keep surrounding spacing consistent
with the rest of the document.
IMPLEMENTATION_SUMMARY.md
Outdated
|
|
||
| ### Main Project Pipelines (Consumer Projects) | ||
|
|
||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
Specify language identifier for fenced code blocks (MD040).
Code blocks at lines 88 and 96 lack language specification. Add language identifiers for syntax highlighting and clarity.
### Pipeline Structure
-\`\`\`
+\`\`\`text
build-test-deploy.yml → Push to branches/tags → Build, test, deploy
...
-\`\`\`
### Vortex Development Pipelines (Removed During Installation)
-\`\`\`
+\`\`\`text
vortex-test-postbuild.yml → Push to branches/tags → Post-build validationAlso applies to: 96-96
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
88-88: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In IMPLEMENTATION_SUMMARY.md around lines 88 and 96, the fenced code blocks are
missing language identifiers (MD040); add the appropriate language tags (e.g.,
```json, ```js, ```yaml, or ```text as applicable) immediately after the opening
triple backticks for both blocks so they render with correct syntax highlighting
and satisfy the linter.
plan.md
Outdated
| Split the configuration into logical, purpose-driven files using GitHub Actions-style naming conventions for consistency: | ||
|
|
||
| ``` | ||
| .circleci/ | ||
| ├── build-test-deploy.yml # Main pipeline (commit workflow) | ||
| ├── database-nightly.yml # Nightly database refresh pipeline | ||
| ├── update-dependencies.yml # Renovate/dependency updates pipeline | ||
| ├── vortex-test-postbuild.yml # Vortex post-build validation tests | ||
| ├── vortex-test-didi-fi.yml # Database-in-image from file tests | ||
| └── vortex-test-didi-ii.yml # Database-in-image from registry tests | ||
| ``` | ||
|
|
||
| **Naming Conventions (aligned with GitHub Actions):** | ||
| - Use kebab-case (lowercase with hyphens) | ||
| - Descriptive, action-oriented names (build-test-deploy, update-dependencies) | ||
| - Prefix Vortex development workflows with `vortex-` (e.g., `vortex-test-*`) | ||
| - Match GitHub Actions equivalents where they exist: | ||
| - `.github/workflows/build-test-deploy.yml` → `.circleci/build-test-deploy.yml` | ||
| - `.github/workflows/update-dependencies.yml` → `.circleci/update-dependencies.yml` | ||
| - `.github/workflows/vortex-test-*.yml` → `.circleci/vortex-test-*.yml` | ||
|
|
||
| ## File Breakdown | ||
|
|
||
| ### 1. **build-test-deploy.yml** - Main Build Pipeline | ||
| **Purpose:** Core build, test, and deployment workflow | ||
| **Trigger:** Push to any branch, tag creation | ||
| **GitHub Actions Equivalent:** `.github/workflows/build-test-deploy.yml` | ||
| **Workflow Name:** `Database, Build, Test and Deploy` (matches GHA) | ||
|
|
||
| **Contents:** | ||
| - Aliases (SSH fingerprints, runner config, shared steps) | ||
| - Jobs: | ||
| - `database` (conditional: !PROVISION_TYPE_PROFILE) | ||
| - `build` | ||
| - `deploy` | ||
| - `deploy-tags` | ||
| - Workflow: `build-test-deploy` | ||
|
|
||
| **Size:** ~470 lines | ||
|
|
||
| --- | ||
|
|
||
| ### 2. **database-nightly.yml** - Nightly Database Pipeline | ||
| **Purpose:** Overnight database refresh and caching | ||
| **Trigger:** Scheduled cron (`0 18 * * *`) on `develop` branch | ||
| **Workflow Name:** `Database - Nightly refresh` | ||
|
|
||
| **Contents:** | ||
| - Shared aliases (SSH fingerprints, runner config, db cache config) | ||
| - Jobs: | ||
| - `database-nightly` | ||
| - Workflow: `database-nightly` | ||
|
|
||
| **Size:** ~200 lines (includes shared aliases) | ||
|
|
||
| **Note:** In GitHub Actions, this is part of `build-test-deploy.yml` with a schedule trigger. CircleCI requires separate file for clarity. | ||
|
|
||
| --- | ||
|
|
||
| ### 3. **update-dependencies.yml** - Dependency Updates Pipeline | ||
| **Purpose:** Self-hosted Renovate for automated dependency updates | ||
| **Trigger:** | ||
| - Scheduled cron (`5 11,23 * * *`) on `develop` branch | ||
| - Manual trigger via pipeline parameter | ||
| **GitHub Actions Equivalent:** `.github/workflows/update-dependencies.yml` | ||
| **Workflow Name:** `Update dependencies` (matches GHA) | ||
|
|
||
| **Contents:** | ||
| - Parameters (run_update_dependencies) | ||
| - Jobs: | ||
| - `update-dependencies` | ||
| - Workflows: | ||
| - `update-dependencies-scheduled` | ||
| - `update-dependencies-manual` | ||
|
|
||
| **Size:** ~60 lines | ||
|
|
||
| --- | ||
|
|
||
| ### 4. **vortex-test-postbuild.yml** - Post-Build Tests | ||
| **Purpose:** Vortex framework validation after main build | ||
| **Trigger:** Push to any branch (runs after main pipeline) | ||
| **Workflow Name:** `Vortex - Test (Post-build)` | ||
|
|
||
| **Contents:** | ||
| - Shared aliases (runner config) | ||
| - Jobs: | ||
| - `vortex-test-postbuild` | ||
| - Workflow: `vortex-test-postbuild` | ||
|
|
||
| **Size:** ~80 lines | ||
|
|
||
| **Note:** Follows same naming pattern as `.github/workflows/vortex-test-*.yml` files. | ||
|
|
||
| --- | ||
|
|
||
| ### 5. **vortex-test-didi-fi.yml** - DIDI File-to-Image Tests | ||
| **Purpose:** Test database-in-image workflow with file source | ||
| **Trigger:** Push to any branch | ||
| **Workflow Name:** `Vortex - Test (DIDI from file)` | ||
|
|
||
| **Contents:** | ||
| - Shared aliases (runner config, db config) | ||
| - Jobs: | ||
| - `vortex-test-didi-database-fi` (creates image from DB file) | ||
| - `vortex-test-didi-build-fi` (builds site with DIDI image) | ||
| - Workflow: `vortex-test-didi-fi` | ||
|
|
||
| **Size:** ~250 lines (includes shared job definitions) | ||
|
|
||
| --- | ||
|
|
||
| ### 6. **vortex-test-didi-ii.yml** - DIDI Image-to-Image Tests | ||
| **Purpose:** Test database-in-image workflow with registry source | ||
| **Trigger:** Push to any branch | ||
| **Workflow Name:** `Vortex - Test (DIDI from registry)` | ||
|
|
||
| **Contents:** | ||
| - Shared aliases (runner config, db config) | ||
| - Jobs: | ||
| - `vortex-test-didi-database-ii` (creates image from registry) | ||
| - `vortex-test-didi-build-ii` (builds site with DIDI image) | ||
| - Workflow: `vortex-test-didi-ii` | ||
|
|
||
| **Size:** ~250 lines (includes shared job definitions) | ||
|
|
||
| ## Implementation Strategy | ||
|
|
||
| ### Phase 1: Preparation and Validation | ||
| 1. **Document current behavior:** | ||
| - Map all workflows to their triggers | ||
| - Identify job dependencies across workflows | ||
| - Document environment variables per workflow | ||
|
|
||
| 2. **Create reference documentation:** | ||
| - CircleCI pipeline configuration requirements | ||
| - Trigger event mappings for each workflow | ||
| - Variable inheritance and scoping rules | ||
|
|
||
| 3. **Validate prerequisites:** | ||
| - Confirm CircleCI GitHub App is installed | ||
| - Verify permissions for pipeline management | ||
|
|
||
| ### Phase 2: Extract Shared Components | ||
| 1. **Identify common elements:** | ||
| - Aliases used across multiple jobs (runner_config, ssh fingerprints) | ||
| - Shared steps (setup_remote_docker, process_codebase_for_ci) | ||
| - Common parameters and environment variables | ||
|
|
||
| 2. **Create extraction strategy:** | ||
| - Determine which aliases need duplication vs. reference | ||
| - Document which shared components belong in each file | ||
| - Plan for maintaining consistency across files | ||
|
|
||
| ### Phase 3: Split Configuration Files | ||
| 1. **Create individual config files:** | ||
| - Start with simplest workflows first (update-dependencies) | ||
| - Move to isolated workflows (nightly-db) | ||
| - Handle complex workflows last (vortex-dev tests) | ||
|
|
||
| 2. **For each file:** | ||
| - Copy necessary CircleCI structure (`version: '2.1'`) | ||
| - Include all required shared components (aliases, steps) | ||
| - Preserve Vortex comment markers (`#;<`, `#;>`) | ||
| - Maintain conditional logic for installer | ||
| - Ensure all environment variables are accessible | ||
|
|
||
| 3. **Handle Vortex-specific concerns:** | ||
| - Preserve installer token markers | ||
| - Maintain comment structure for template processing | ||
| - Ensure conditional includes work correctly | ||
|
|
||
| ### Phase 4: Configure CircleCI Pipelines | ||
| 1. **Access CircleCI UI:** | ||
| - Navigate to Project Settings → Project Setup | ||
|
|
||
| 2. **Create pipelines (in order):** | ||
|
|
||
| **Note:** Pipeline names in CircleCI UI follow GitHub Actions style for consistency. | ||
|
|
||
| - **Build, Test and Deploy Pipeline** | ||
| - Name: `Database, Build, Test and Deploy` | ||
| - Config: `.circleci/build-test-deploy.yml` | ||
| - Trigger: Push to all branches, all tags | ||
| - _Matches:_ `.github/workflows/build-test-deploy.yml` | ||
|
|
||
| - **Nightly Database Pipeline** | ||
| - Name: `Database - Nightly refresh` | ||
| - Config: `.circleci/database-nightly.yml` | ||
| - Trigger: Schedule (`0 18 * * *` on `develop`) | ||
| - _Note:_ GHA combines this with main workflow; CircleCI separates for clarity | ||
|
|
||
| - **Update Dependencies Pipeline** | ||
| - Name: `Update dependencies` | ||
| - Config: `.circleci/update-dependencies.yml` | ||
| - Trigger: Schedule (`5 11,23 * * *` on `develop`) + Manual | ||
| - _Matches:_ `.github/workflows/update-dependencies.yml` | ||
|
|
||
| - **Vortex Post-Build Tests Pipeline** | ||
| - Name: `Vortex - Test (Post-build)` | ||
| - Config: `.circleci/vortex-test-postbuild.yml` | ||
| - Trigger: Push to all branches | ||
| - _Follows pattern:_ `.github/workflows/vortex-test-*.yml` | ||
|
|
||
| - **Vortex DIDI-FI Tests Pipeline** | ||
| - Name: `Vortex - Test (DIDI from file)` | ||
| - Config: `.circleci/vortex-test-didi-fi.yml` | ||
| - Trigger: Push to all branches | ||
| - _Follows pattern:_ `.github/workflows/vortex-test-*.yml` | ||
|
|
||
| - **Vortex DIDI-II Tests Pipeline** | ||
| - Name: `Vortex - Test (DIDI from registry)` | ||
| - Config: `.circleci/vortex-test-didi-ii.yml` | ||
| - Trigger: Push to all branches | ||
| - _Follows pattern:_ `.github/workflows/vortex-test-*.yml` | ||
|
|
||
| 3. **Configure environment variables:** | ||
| - Ensure all pipelines inherit project-level variables | ||
| - Document any pipeline-specific variables needed | ||
|
|
||
| ### Phase 5: Testing and Validation | ||
| 1. **Create test branch:** | ||
| - Create `feature/1571-split-circleci-config` branch | ||
| - Push with split configuration | ||
|
|
||
| 2. **Validate each pipeline:** | ||
| - **Commit workflow:** Push to test branch, verify build runs | ||
| - **Nightly DB:** Manually trigger or wait for schedule | ||
| - **Update dependencies:** Trigger manually via parameter | ||
| - **Vortex dev tests:** Verify all three DIDI workflows run | ||
|
|
||
| 3. **Test scenarios:** | ||
| - Push to feature branch (should trigger main + vortex-dev pipelines) | ||
| - Push to `develop` (should trigger all applicable workflows) | ||
| - Create tag (should trigger deploy-tags job) | ||
| - Schedule triggers (wait for or manually trigger) | ||
|
|
||
| 4. **Verify job dependencies:** | ||
| - Ensure `build` waits for `database` in main pipeline | ||
| - Ensure `deploy` waits for `build` | ||
| - Verify Vortex DIDI build jobs wait for database jobs | ||
|
|
||
| 5. **Check for regressions:** | ||
| - Compare job outputs with previous runs | ||
| - Verify all tests pass | ||
| - Ensure deployments work correctly | ||
| - Validate caching behavior | ||
|
|
||
| ### Phase 6: Documentation Updates | ||
| 1. **Update project documentation:** | ||
| - `docs/ci.md` - Explain new multi-pipeline structure | ||
| - `README.md` - Update CircleCI setup instructions | ||
| - `.circleci/README.md` (create) - Document pipeline organization | ||
|
|
||
| 2. **Document for consumer projects:** | ||
| - How installer handles multiple files | ||
| - Which files are removed/kept for consumer projects | ||
| - How to configure their own pipelines post-install | ||
|
|
||
| 3. **Create maintenance guide:** | ||
| - How to add new workflows | ||
| - How to modify shared components | ||
| - Testing guidelines for CI changes | ||
|
|
||
| ### Phase 7: Installer Integration | ||
| 1. **Update Vortex installer:** | ||
| - Modify installer to handle multiple CircleCI files | ||
| - Ensure Vortex-dev files are removed during installation | ||
| - Preserve conditional markers and processing logic | ||
|
|
||
| 2. **Test installer behavior:** | ||
| - Run installer with various configurations | ||
| - Verify correct files are generated for consumer projects | ||
| - Ensure conditional blocks work across all files | ||
|
|
||
| 3. **Update installer tests:** | ||
| - Add test cases for multi-file scenarios | ||
| - Verify file generation logic | ||
| - Test Vortex-dev file removal | ||
|
|
||
| ## Benefits | ||
|
|
||
| ### Maintainability | ||
| - **Smaller files:** Each file focuses on single responsibility | ||
| - **Easier navigation:** Find relevant configuration quickly | ||
| - **Reduced conflicts:** Changes to different workflows don't collide | ||
|
|
||
| ### Clarity | ||
| - **Purpose-driven organization:** File name indicates purpose | ||
| - **Separated concerns:** Consumer vs. Vortex development clearly split | ||
| - **Better documentation:** Each file documents its own trigger and purpose | ||
|
|
||
| ### Flexibility | ||
| - **Independent triggers:** Each pipeline runs on appropriate events | ||
| - **Isolated testing:** Test workflows without affecting main pipeline | ||
| - **Easier debugging:** Identify which pipeline failed at a glance | ||
|
|
||
| ### Consumer Experience | ||
| - **Cleaner projects:** Consumer projects don't receive Vortex-dev configs | ||
| - **Simpler customization:** Modify specific pipelines without touching others | ||
| - **Clear examples:** Each config file serves as standalone example | ||
|
|
||
| ## Risks and Mitigation | ||
|
|
||
| ### Risk 1: CircleCI GitHub App Requirement | ||
| **Impact:** Consumer projects must use GitHub App integration | ||
| **Mitigation:** | ||
| - Document requirement clearly in installation guide | ||
| - Provide migration guide for existing projects | ||
| - Consider maintaining single-file option as fallback (legacy mode) | ||
|
|
||
| ### Risk 2: Increased Complexity | ||
| **Impact:** More files to manage and configure | ||
| **Mitigation:** | ||
| - Comprehensive documentation | ||
| - Clear naming conventions | ||
| - Automated validation in CI | ||
|
|
||
| ### Risk 3: Shared Component Duplication | ||
| **Impact:** Aliases and steps may need duplication across files | ||
| **Mitigation:** | ||
| - Accept reasonable duplication for independence | ||
| - Document canonical definitions | ||
| - Use comments to track which components are shared | ||
|
|
||
| ### Risk 4: Installer Compatibility | ||
| **Impact:** Installer must handle multiple files correctly | ||
| **Mitigation:** | ||
| - Thorough testing of installer changes | ||
| - Maintain backward compatibility during transition | ||
| - Provide migration scripts if needed | ||
|
|
||
| ### Risk 5: Breaking Consumer Projects | ||
| **Impact:** Existing projects might break after update | ||
| **Mitigation:** | ||
| - Mark as breaking change in release notes | ||
| - Provide migration guide with manual steps | ||
| - Consider phased rollout or opt-in mechanism | ||
|
|
||
| ## Success Criteria | ||
|
|
||
| 1. **Functionality:** | ||
| - All workflows continue to work as before | ||
| - Job dependencies are preserved | ||
| - Caching behavior remains consistent | ||
| - Deployments succeed without changes | ||
|
|
||
| 2. **Code Quality:** | ||
| - Each config file is under 300 lines | ||
| - Clear separation of concerns | ||
| - No duplicate job definitions (shared via references) | ||
| - Preserved Vortex template processing markers | ||
|
|
||
| 3. **Documentation:** | ||
| - Pipeline structure documented | ||
| - Trigger events clearly explained | ||
| - Consumer migration guide available | ||
| - Maintenance guide created | ||
|
|
||
| 4. **Testing:** | ||
| - All existing tests pass | ||
| - New pipeline-specific tests added | ||
| - Installer tests validate multi-file handling | ||
|
|
||
| 5. **Consumer Impact:** | ||
| - Installation process documented | ||
| - Consumer projects receive only relevant configs | ||
| - Migration path for existing projects | ||
|
|
||
| ## Open Questions | ||
|
|
||
| 1. **Should we provide a single-file fallback for projects not using GitHub App?** | ||
| - Consider maintaining both structures | ||
| - Or require GitHub App as prerequisite | ||
|
|
||
| 2. **How should shared aliases be handled?** | ||
| - Duplicate in each file (independence) | ||
| - Or create a shared config via CircleCI orb | ||
|
|
||
| 3. **Should pipeline names be configurable?** | ||
| - Allow consumers to customize pipeline names | ||
| - Or enforce standard naming convention | ||
|
|
||
| 4. **How to handle Vortex version upgrades?** | ||
| - Update all config files in sync | ||
| - Or version each file independently | ||
|
|
||
| 5. **Should we extract orbs for common functionality?** | ||
| - Create Vortex CircleCI orb for shared commands | ||
| - Or keep everything in config files | ||
|
|
||
| ## Timeline Estimate | ||
|
|
||
| - **Phase 1 (Preparation):** 2-4 hours | ||
| - **Phase 2 (Extract Shared):** 2-3 hours | ||
| - **Phase 3 (Split Files):** 4-6 hours | ||
| - **Phase 4 (Configure Pipelines):** 2-3 hours | ||
| - **Phase 5 (Testing):** 4-6 hours | ||
| - **Phase 6 (Documentation):** 3-4 hours | ||
| - **Phase 7 (Installer):** 4-6 hours | ||
|
|
||
| **Total Estimated Time:** 21-32 hours | ||
|
|
||
| ## Next Steps | ||
|
|
||
| 1. Review and approve this plan | ||
| 2. Answer open questions | ||
| 3. Create subtasks in GitHub issue | ||
| 4. Begin Phase 1 implementation | ||
| 5. Regular checkpoints after each phase | ||
|
|
||
| --- | ||
|
|
||
| **Issue:** #1571 | ||
| **Branch:** `feature/1571-split-circleci-config` | ||
| **Milestone:** 25.11.0 |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Fix Markdown formatting: add blank lines around headings and adjust list indentation.
Multiple formatting issues per Markdown best practices:
- MD022: Many headings lack surrounding blank lines (lines 48, 67, 84, 104, 121, 137, 153, 168, 179, 197, 245, 273, 289, 307, 312, 317, 322, 329, 336, 343, 350, 357)
- MD007: Lines 87-88 have incorrect list indentation (2 spaces instead of 0)
Example fix for line 87-88:
**Trigger:**
- - Scheduled cron (`5 11,23 * * *`) on `develop` branch
- - Manual trigger via pipeline parameter
+ - Scheduled cron (`5 11,23 * * *`) on `develop` branch
+ - Manual trigger via pipeline parameterApply consistent blank lines around all headings throughout the file.
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~51-~51: The official name of this software platform is spelled with a capital “H”.
Context: ...creation GitHub Actions Equivalent: .github/workflows/build-test-deploy.yml **Work...
(GITHUB)
[uncategorized] ~89-~89: The official name of this software platform is spelled with a capital “H”.
Context: ...arameter GitHub Actions Equivalent: .github/workflows/update-dependencies.yml **Wo...
(GITHUB)
[uncategorized] ~117-~117: The official name of this software platform is spelled with a capital “H”.
Context: ...Note:* Follows same naming pattern as .github/workflows/vortex-test-*.yml files. --...
(GITHUB)
🪛 markdownlint-cli2 (0.18.1)
27-27: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
48-48: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
67-67: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
84-84: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
87-87: Unordered list indentation
Expected: 0; Actual: 2
(MD007, ul-indent)
88-88: Unordered list indentation
Expected: 0; Actual: 2
(MD007, ul-indent)
104-104: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
121-121: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
137-137: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
153-153: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
168-168: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
179-179: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
197-197: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
245-245: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
273-273: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
289-289: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
307-307: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
312-312: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
317-317: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
322-322: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
329-329: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
336-336: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
343-343: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
350-350: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
357-357: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
🤖 Prompt for AI Agents
In plan.md around lines 25 to 440, many headings lack surrounding blank lines
(MD022) and the list at lines 87-88 has incorrect indentation (MD007); add a
blank line above and below each heading listed (lines 48, 67, 84, 104, 121, 137,
153, 168, 179, 197, 245, 273, 289, 307, 312, 317, 322, 329, 336, 343, 350, 357)
to ensure one blank line before and after each heading, and fix the list
indentation at lines 87-88 by removing the two-space indent so the list items
align with the top-level list format (or adjust nesting consistently), then run
your Markdown linter to confirm MD022 and MD007 are resolved.
plan.md
Outdated
|
|
||
| Split the configuration into logical, purpose-driven files using GitHub Actions-style naming conventions for consistency: | ||
|
|
||
| ``` |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Specify language for fenced code block.
Line 27 uses a fenced code block without a language identifier per MD040.
- ```
+ ```
.circleci/Or to highlight the file structure syntax:
- ```
+ ```text
.circleci/🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
27-27: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In plan.md around line 27 the fenced code block opening is missing a language
identifier (MD040); update the block to include an explicit language/tag (for
example `text` or `bash`) before the directory listing so it becomes a fenced
block with a language (e.g., replace the opening ``` with ```text), and scan
nearby fenced blocks to add appropriate language identifiers as needed.
plan.md
Outdated
| ### 1. **build-test-deploy.yml** - Main Build Pipeline | ||
| **Purpose:** Core build, test, and deployment workflow | ||
| **Trigger:** Push to any branch, tag creation | ||
| **GitHub Actions Equivalent:** `.github/workflows/build-test-deploy.yml` |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Capitalize GitHub branding correctly.
Multiple references to "Github Actions" should use the official "GitHub" capitalization per style guidelines.
- **GitHub Actions Equivalent:** `.github/workflows/build-test-deploy.yml`
+ **GitHub Actions Equivalent:** `.github/workflows/build-test-deploy.yml`(Note: This appears correct in provided code; verify lines 51, 89, 117 in source if LanguageTool flagged them.)
Also applies to: 89-89, 117-117
🧰 Tools
🪛 LanguageTool
[uncategorized] ~51-~51: The official name of this software platform is spelled with a capital “H”.
Context: ...creation GitHub Actions Equivalent: .github/workflows/build-test-deploy.yml **Work...
(GITHUB)
🤖 Prompt for AI Agents
In plan.md around lines 51, 89 and 117, instances of "Github" (e.g., "Github
Actions") are not using the official branding; update those occurrences to the
correct capitalization "GitHub" (so "GitHub Actions" where applicable) and run a
quick search in the file to replace any other "Github" -> "GitHub" to ensure
consistent styling.
0996b16 to
a403b63
Compare
This comment has been minimized.
This comment has been minimized.
|
|
|
a403b63 to
9c1f9fa
Compare
This comment has been minimized.
This comment has been minimized.
|
|
|
94604a0 to
098fd6c
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php (1)
61-67:⚠️ Potential issue | 🟠 MajorUpdate provider discovery to account for split CircleCI config file.
The discover() method (lines 61–67) checks for
.github/workflows/update-dependencies.ymland for 'update-dependencies' in.circleci/config.yml, but does not directly check for.circleci/update-dependencies.yml. If a project uses only the split CI config file and lacks the 'update-dependencies' marker in the main config, discover() incorrectly returnsRENOVATEBOT_APPinstead ofRENOVATEBOT_CI, causing provider detection to drift from the actual configuration.Add a check for
.circleci/update-dependencies.ymlexistence to the first condition:Proposed fix
- if (file_exists($this->dstDir . '/.github/workflows/update-dependencies.yml')) { + if ( + file_exists($this->dstDir . '/.github/workflows/update-dependencies.yml') || + file_exists($this->dstDir . '/.circleci/update-dependencies.yml') + ) { return self::RENOVATEBOT_CI; }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php around lines 61 - 67, The discover() method in DependencyUpdatesProvider should also detect a split CircleCI file; add a file existence check for $this->dstDir . '/.circleci/update-dependencies.yml' so that when that file exists discover() returns self::RENOVATEBOT_CI (same behavior as the existing .github/workflows/update-dependencies.yml check). Update the conditional that currently checks file_exists($this->dstDir . '/.github/workflows/update-dependencies.yml') (or add a new similar if) to include the .circleci/update-dependencies.yml path, ensuring RENOVATEBOT_CI is returned when either CI workflow file is present.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.circleci/build-test-deploy.yml:
- Line 601: Update the branch matching regex so the "project/*" alternative is
properly anchored and the letter range is correct: replace the faulty character
class `[a-zA-z0-9\-\.]+` with a correct `[a-zA-Z0-9\-.]+` (or move/escape the
hyphen) and add a trailing `$` to the `project\/...` alternative so it reads
`project\/[a-zA-Z0-9\-.]+$`; change this in the single regex expression that
appears in the pipeline `only:` pattern.
In @.circleci/vortex-test-common.yml:
- Line 446: The VORTEX_DOWNLOAD_DB_SOURCE environment value is set to the
variable name "VORTEX_CONTAINER_REGISTRY" but the downloader expects a literal
like "container_registry"; update the VORTEX_DOWNLOAD_DB_SOURCE entry to use the
literal container_registry so the downloader's matching logic (which checks
values like container_registry, url, ftp, acquia, lagoon, s3) will select the
container registry path.
---
Outside diff comments:
In @.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php:
- Around line 61-67: The discover() method in DependencyUpdatesProvider should
also detect a split CircleCI file; add a file existence check for $this->dstDir
. '/.circleci/update-dependencies.yml' so that when that file exists discover()
returns self::RENOVATEBOT_CI (same behavior as the existing
.github/workflows/update-dependencies.yml check). Update the conditional that
currently checks file_exists($this->dstDir .
'/.github/workflows/update-dependencies.yml') (or add a new similar if) to
include the .circleci/update-dependencies.yml path, ensuring RENOVATEBOT_CI is
returned when either CI workflow file is present.
ℹ️ Review info
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (7)
.circleci/build-test-deploy.yml.circleci/update-dependencies.yml.circleci/vortex-test-common.yml.github/workflows/vortex-test-common.yml.vortex/.ahoy.yml.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php.vortex/installer/src/Prompts/Handlers/Internal.php
| # - release/2023-04-17, release/2023-04-17.123 (date-based) | ||
| # - hotfix/123.456.789, hotfix/123.456.789-rc.1213 (per https://semver.org/) | ||
| # - hotfix/2023-04-17, hotfix/2023-04-17.123 (date-based) | ||
| only: /^(production|main|master|develop)$|^project\/[a-zA-z0-9\-\.]+|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/ |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python - <<'PY'
import re
# Current regex (as described in review)
current = r'^(production|main|master|develop)$|^project\/[a-zA-z0-9\-\.]+|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$'
# Proposed fix regex
proposed = r'^(production|main|master|develop)$|^project\/[a-zA-Z0-9\-.]+$|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$'
test_cases = [
("project/ok-name", True, "Valid project branch"),
("project/ok.name", True, "Valid project branch with dot"),
("project/bad!name", False, "Invalid character - exclamation mark"),
("project/bad[name", False, "Invalid character - bracket"),
("project/valid-suffix", True, "Valid project branch with dash"),
("project/valid/extra", False, "Should NOT match - has slash (overmatch in current)"),
("project/valid-extra-junk", True, "Should NOT match - overmatch without anchor in current"),
]
print("Testing CURRENT regex pattern:")
print("=" * 70)
for test, expected_intention, description in test_cases:
match = bool(re.match(current, test))
status = "✓" if match else "✗"
print(f"{status} {test:30} -> {str(match):5} ({description})")
print("\n" + "=" * 70)
print("Testing PROPOSED regex pattern:")
print("=" * 70)
for test, expected_intention, description in test_cases:
match = bool(re.match(proposed, test))
status = "✓" if match else "✗"
print(f"{status} {test:30} -> {str(match):5} ({description})")
print("\n" + "=" * 70)
print("KEY DIFFERENCE - Testing overmatch behavior:")
print("=" * 70)
# The issue: current pattern has no $ anchor on project/*, so it matches prefixes
overmatch_test = "project/my-project-extra-chars-that-should-not-match"
current_result = bool(re.match(current, overmatch_test))
proposed_result = bool(re.match(proposed, overmatch_test))
print(f"Test: {overmatch_test}")
print(f"Current (no $): {current_result} (PROBLEM: overmatch)")
print(f"Proposed ($): {proposed_result} (FIXED)")
PYRepository: drevops/vortex
Length of output: 1775
🏁 Script executed:
# Check if the file exists and view the relevant section
if [ -f ".circleci/build-test-deploy.yml" ]; then
echo "File found. Checking line 601 context:"
sed -n '595,610p' ".circleci/build-test-deploy.yml"
else
echo "File not found at expected path"
find . -name "build-test-deploy.yml" -type f 2>/dev/null | head -5
fiRepository: drevops/vortex
Length of output: 983
Add $ anchor to project/* deploy branch regex and fix character class typo.
Line 601 has two issues in the project/* pattern:
- Missing
$end-anchor allows unintended prefix matches (e.g., "project/bad" matches in "project/bad!name") - Character class typo
[a-zA-z...]creates an unintended range (A-z includes[\]^_), matching invalid characters like[
Proposed fix
- only: /^(production|main|master|develop)$|^project\/[a-zA-z0-9\-\.]+|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/
+ only: /^(production|main|master|develop)$|^project\/[a-zA-Z0-9\-.]+$|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| only: /^(production|main|master|develop)$|^project\/[a-zA-z0-9\-\.]+|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/ | |
| only: /^(production|main|master|develop)$|^project\/[a-zA-Z0-9\-.]+$|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/ |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.circleci/build-test-deploy.yml at line 601, Update the branch matching
regex so the "project/*" alternative is properly anchored and the letter range
is correct: replace the faulty character class `[a-zA-z0-9\-\.]+` with a correct
`[a-zA-Z0-9\-.]+` (or move/escape the hyphen) and add a trailing `$` to the
`project\/...` alternative so it reads `project\/[a-zA-Z0-9\-.]+$`; change this
in the single regex expression that appears in the pipeline `only:` pattern.
| vortex-dev-database-ii: | ||
| <<: *job-database | ||
| environment: | ||
| VORTEX_DOWNLOAD_DB_SOURCE: VORTEX_CONTAINER_REGISTRY |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Searching for VORTEX_DOWNLOAD_DB_SOURCE usage =="
rg -n "VORTEX_DOWNLOAD_DB_SOURCE" -g '!**/vendor/**' -C3
echo ""
echo "== Searching for download-db related files =="
fd -t f "download.*db" -g '!**/vendor/**'
echo ""
echo "== Checking container_registry and VORTEX_CONTAINER_REGISTRY usage =="
rg -n "VORTEX_CONTAINER_REGISTRY|container_registry" -g '!**/vendor/**' -C2Repository: drevops/vortex
Length of output: 2311
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Context around line 446 in .circleci/vortex-test-common.yml =="
sed -n '430,460p' .circleci/vortex-test-common.yml | cat -n
echo ""
echo "== Searching for all VORTEX_DOWNLOAD_DB_SOURCE values in the yml file =="
grep -n "VORTEX_DOWNLOAD_DB_SOURCE" .circleci/vortex-test-common.yml
echo ""
echo "== Searching for VORTEX_CONTAINER_REGISTRY definition/usage =="
rg -n "VORTEX_CONTAINER_REGISTRY" -g '!**/vendor/**'Repository: drevops/vortex
Length of output: 5494
Fix VORTEX_DOWNLOAD_DB_SOURCE value in II variant: use container_registry literal, not variable reference.
Line 446 incorrectly sets VORTEX_DOWNLOAD_DB_SOURCE: VORTEX_CONTAINER_REGISTRY (a variable name). The downloader script expects literal string values like container_registry, url, ftp, acquia, lagoon, or s3. With the current value, no download method will match and DB acquisition will be skipped.
Fix
- VORTEX_DOWNLOAD_DB_SOURCE: VORTEX_CONTAINER_REGISTRY
+ VORTEX_DOWNLOAD_DB_SOURCE: container_registry📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| VORTEX_DOWNLOAD_DB_SOURCE: VORTEX_CONTAINER_REGISTRY | |
| VORTEX_DOWNLOAD_DB_SOURCE: container_registry |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.circleci/vortex-test-common.yml at line 446, The VORTEX_DOWNLOAD_DB_SOURCE
environment value is set to the variable name "VORTEX_CONTAINER_REGISTRY" but
the downloader expects a literal like "container_registry"; update the
VORTEX_DOWNLOAD_DB_SOURCE entry to use the literal container_registry so the
downloader's matching logic (which checks values like container_registry, url,
ftp, acquia, lagoon, s3) will select the container registry path.
|
|
098fd6c to
b53d47c
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.circleci/update-dependencies.yml:
- Around line 36-52: Rename the CircleCI step name to accurately reflect that it
validates multiple environment variables: update the step with name "Check if
RENOVATE_TOKEN is set" to something like "Check required RENOVATE env vars
(TOKEN, REPOSITORIES, GIT_AUTHOR)" so the step name matches the script that
checks RENOVATE_TOKEN, RENOVATE_REPOSITORIES and RENOVATE_GIT_AUTHOR; locate the
step by the existing name string and modify the name field only to improve
clarity without changing the existing commands.
In @.vortex/tests/generate-vortex-dev-circleci:
- Around line 70-77: In the build_variant_job invocation named
'vortex-dev-database-ii' update the VORTEX_DOWNLOAD_DB_SOURCE value to the
literal source type expected by the downloader (use 'container_registry' instead
of the variable name VORTEX_CONTAINER_REGISTRY) so the DB download method
matches; locate the build_variant_job call and replace the
VORTEX_DOWNLOAD_DB_SOURCE entry accordingly.
ℹ️ Review info
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (31)
.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/update-dependencies.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (14)
.circleci/README.md.circleci/build-test-deploy.yml.circleci/config.yml.circleci/update-dependencies.yml.circleci/vortex-test-common.yml.github/workflows/vortex-test-common.yml.vortex/.ahoy.yml.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php.vortex/installer/src/Prompts/Handlers/Internal.php.vortex/tests/CLAUDE.md.vortex/tests/generate-vortex-dev-circleci.vortex/tests/lint.ci.sh.vortex/tests/phpcs.xml.vortex/tests/phpstan.neon
💤 Files with no reviewable changes (2)
- .circleci/README.md
- .circleci/config.yml
| - run: | ||
| name: Check if RENOVATE_TOKEN is set | ||
| command: | | ||
| if [ -z "${RENOVATE_TOKEN}" ]; then | ||
| echo "RENOVATE_TOKEN is not set. Skipping job." | ||
| circleci-agent step halt | ||
| fi | ||
|
|
||
| if [ -z "${RENOVATE_REPOSITORIES}" ]; then | ||
| echo "Renovate repository is not set. Skipping job." | ||
| circleci-agent step halt | ||
| fi | ||
|
|
||
| if [ -z "${RENOVATE_GIT_AUTHOR}" ]; then | ||
| echo "Renovate git author is not set. Skipping job." | ||
| circleci-agent step halt | ||
| fi |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Step name doesn't match step content.
The step name "Check if RENOVATE_TOKEN is set" is misleading since the step also validates RENOVATE_REPOSITORIES and RENOVATE_GIT_AUTHOR. Consider renaming for clarity.
Suggested fix
- run:
- name: Check if RENOVATE_TOKEN is set
+ name: Validate required environment variables
command: |📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - run: | |
| name: Check if RENOVATE_TOKEN is set | |
| command: | | |
| if [ -z "${RENOVATE_TOKEN}" ]; then | |
| echo "RENOVATE_TOKEN is not set. Skipping job." | |
| circleci-agent step halt | |
| fi | |
| if [ -z "${RENOVATE_REPOSITORIES}" ]; then | |
| echo "Renovate repository is not set. Skipping job." | |
| circleci-agent step halt | |
| fi | |
| if [ -z "${RENOVATE_GIT_AUTHOR}" ]; then | |
| echo "Renovate git author is not set. Skipping job." | |
| circleci-agent step halt | |
| fi | |
| - run: | |
| name: Validate required environment variables | |
| command: | | |
| if [ -z "${RENOVATE_TOKEN}" ]; then | |
| echo "RENOVATE_TOKEN is not set. Skipping job." | |
| circleci-agent step halt | |
| fi | |
| if [ -z "${RENOVATE_REPOSITORIES}" ]; then | |
| echo "Renovate repository is not set. Skipping job." | |
| circleci-agent step halt | |
| fi | |
| if [ -z "${RENOVATE_GIT_AUTHOR}" ]; then | |
| echo "Renovate git author is not set. Skipping job." | |
| circleci-agent step halt | |
| fi |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.circleci/update-dependencies.yml around lines 36 - 52, Rename the CircleCI
step name to accurately reflect that it validates multiple environment
variables: update the step with name "Check if RENOVATE_TOKEN is set" to
something like "Check required RENOVATE env vars (TOKEN, REPOSITORIES,
GIT_AUTHOR)" so the step name matches the script that checks RENOVATE_TOKEN,
RENOVATE_REPOSITORIES and RENOVATE_GIT_AUTHOR; locate the step by the existing
name string and modify the name field only to improve clarity without changing
the existing commands.
| build_variant_job('vortex-dev-database-ii', '*job-database', [ | ||
| 'VORTEX_DOWNLOAD_DB_SOURCE' => 'VORTEX_CONTAINER_REGISTRY', | ||
| 'VORTEX_DOWNLOAD_DB_FORCE' => 1, | ||
| 'VORTEX_DB_IMAGE' => 'drevops/vortex-dev-mariadb-drupal-data-demo-destination-11.x', | ||
| 'VORTEX_DEPLOY_CONTAINER_REGISTRY_IMAGE_TAG' => 'vortex-dev-database-ii', | ||
| 'VORTEX_EXPORT_DB_CONTAINER_REGISTRY_DEPLOY_PROCEED' => 1, | ||
| 'VORTEX_CI_DB_CACHE_BRANCH' => 'vortex-dev-didi-ii', | ||
| ]), |
There was a problem hiding this comment.
Fix VORTEX_DOWNLOAD_DB_SOURCE value: use container_registry literal, not variable name.
The value VORTEX_CONTAINER_REGISTRY is the variable name, but the downloader script expects literal source type strings like container_registry, url, ftp, acquia, lagoon, or s3. With this value, no download method will match and DB acquisition will be skipped.
Compare with line 55 which correctly uses 'url' as the literal source type.
Proposed fix
build_variant_job('vortex-dev-database-ii', '*job-database', [
- 'VORTEX_DOWNLOAD_DB_SOURCE' => 'VORTEX_CONTAINER_REGISTRY',
+ 'VORTEX_DOWNLOAD_DB_SOURCE' => 'container_registry',
'VORTEX_DOWNLOAD_DB_FORCE' => 1,📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| build_variant_job('vortex-dev-database-ii', '*job-database', [ | |
| 'VORTEX_DOWNLOAD_DB_SOURCE' => 'VORTEX_CONTAINER_REGISTRY', | |
| 'VORTEX_DOWNLOAD_DB_FORCE' => 1, | |
| 'VORTEX_DB_IMAGE' => 'drevops/vortex-dev-mariadb-drupal-data-demo-destination-11.x', | |
| 'VORTEX_DEPLOY_CONTAINER_REGISTRY_IMAGE_TAG' => 'vortex-dev-database-ii', | |
| 'VORTEX_EXPORT_DB_CONTAINER_REGISTRY_DEPLOY_PROCEED' => 1, | |
| 'VORTEX_CI_DB_CACHE_BRANCH' => 'vortex-dev-didi-ii', | |
| ]), | |
| build_variant_job('vortex-dev-database-ii', '*job-database', [ | |
| 'VORTEX_DOWNLOAD_DB_SOURCE' => 'container_registry', | |
| 'VORTEX_DOWNLOAD_DB_FORCE' => 1, | |
| 'VORTEX_DB_IMAGE' => 'drevops/vortex-dev-mariadb-drupal-data-demo-destination-11.x', | |
| 'VORTEX_DEPLOY_CONTAINER_REGISTRY_IMAGE_TAG' => 'vortex-dev-database-ii', | |
| 'VORTEX_EXPORT_DB_CONTAINER_REGISTRY_DEPLOY_PROCEED' => 1, | |
| 'VORTEX_CI_DB_CACHE_BRANCH' => 'vortex-dev-didi-ii', | |
| ]), |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.vortex/tests/generate-vortex-dev-circleci around lines 70 - 77, In the
build_variant_job invocation named 'vortex-dev-database-ii' update the
VORTEX_DOWNLOAD_DB_SOURCE value to the literal source type expected by the
downloader (use 'container_registry' instead of the variable name
VORTEX_CONTAINER_REGISTRY) so the DB download method matches; locate the
build_variant_job call and replace the VORTEX_DOWNLOAD_DB_SOURCE entry
accordingly.
b53d47c to
1845d8a
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
tests/phpunit/CircleCiConfigTest.php (1)
50-51: 🧹 Nitpick | 🔵 TrivialConsider adding job name assertions for test robustness.
The tests access jobs by array index (
jobs[2],jobs[3]), which could silently test wrong data if job order changes. Consider adding assertions to verify the job names.Example assertion
public function testDeployBranchRegex(string $branch, bool $expected = TRUE): void { $job = $this->config['workflows']['commit']['jobs'][2]; $this->assertArrayHasKey('deploy', $job, 'Expected deploy job at index 2'); // ... rest of test }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tests/phpunit/CircleCiConfigTest.php` around lines 50 - 51, The test testDeployBranchRegex uses jobs by numeric index which is brittle; before using $this->config['workflows']['commit']['jobs'][2] assert the presence and name of the job to ensure you're testing the intended entry. Add assertions such as asserting the array key or that the job contains a 'deploy' key (e.g. using $this->assertArrayHasKey('deploy', $job) and/or checking the job name/key) and then extract the filters from that verified $job to run the preg_match assertion against the branch regex.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.vortex/tests/generate-vortex-dev-circleci:
- Around line 220-222: The loop in build_variant_job that currently does foreach
($env as $key => $value) and uses sprintf(' %s: %s', $key, $value) can
produce invalid YAML for values with special characters; update it to emit
quoted YAML strings by escaping any embedded double quotes in $value and
wrapping the result in double quotes (or use a YAML-encoding helper if
available) so each line becomes key: "escaped value", ensuring values containing
:, #, newlines, etc. are safe.
---
Outside diff comments:
In `@tests/phpunit/CircleCiConfigTest.php`:
- Around line 50-51: The test testDeployBranchRegex uses jobs by numeric index
which is brittle; before using $this->config['workflows']['commit']['jobs'][2]
assert the presence and name of the job to ensure you're testing the intended
entry. Add assertions such as asserting the array key or that the job contains a
'deploy' key (e.g. using $this->assertArrayHasKey('deploy', $job) and/or
checking the job name/key) and then extract the filters from that verified $job
to run the preg_match assertion against the branch regex.
ℹ️ Review info
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (31)
.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/update-dependencies.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (22)
.circleci/README.md.circleci/build-test-deploy.yml.circleci/config.yml.circleci/update-dependencies.yml.circleci/vortex-test-common.yml.github/workflows/vortex-test-common.yml.vortex/.ahoy.yml.vortex/installer/src/Prompts/Handlers/CiProvider.php.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php.vortex/installer/src/Prompts/Handlers/Internal.php.vortex/installer/tests/Functional/Handlers/CiProviderHandlerProcessTest.php.vortex/installer/tests/Functional/Handlers/MigrationHandlerProcessTest.php.vortex/installer/tests/Functional/Handlers/TimezoneHandlerProcessTest.php.vortex/installer/tests/Unit/Handlers/CiProviderHandlerDiscoveryTest.php.vortex/installer/tests/Unit/Handlers/DependencyUpdatesProviderHandlerDiscoveryTest.php.vortex/tests/CLAUDE.md.vortex/tests/generate-vortex-dev-circleci.vortex/tests/lint.ci.sh.vortex/tests/phpcs.xml.vortex/tests/phpstan.neon.vortex/tests/phpunit/Traits/SutTrait.phptests/phpunit/CircleCiConfigTest.php
💤 Files with no reviewable changes (2)
- .circleci/config.yml
- .circleci/README.md
| foreach ($env as $key => $value) { | ||
| $lines[] = sprintf(' %s: %s', $key, $value); | ||
| } |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Consider quoting YAML string values to handle special characters.
The build_variant_job function outputs values directly without YAML quoting. If a value contains special characters (:, #, etc.), the generated YAML could be invalid.
Proposed fix
foreach ($env as $key => $value) {
- $lines[] = sprintf(' %s: %s', $key, $value);
+ $yaml_value = is_int($value) ? $value : "'" . str_replace("'", "''", (string) $value) . "'";
+ $lines[] = sprintf(' %s: %s', $key, $yaml_value);
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| foreach ($env as $key => $value) { | |
| $lines[] = sprintf(' %s: %s', $key, $value); | |
| } | |
| foreach ($env as $key => $value) { | |
| $yaml_value = is_int($value) ? $value : "'" . str_replace("'", "''", (string) $value) . "'"; | |
| $lines[] = sprintf(' %s: %s', $key, $yaml_value); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.vortex/tests/generate-vortex-dev-circleci around lines 220 - 222, The loop
in build_variant_job that currently does foreach ($env as $key => $value) and
uses sprintf(' %s: %s', $key, $value) can produce invalid YAML for values
with special characters; update it to emit quoted YAML strings by escaping any
embedded double quotes in $value and wrapping the result in double quotes (or
use a YAML-encoding helper if available) so each line becomes key: "escaped
value", ensuring values containing :, #, newlines, etc. are safe.
This comment has been minimized.
This comment has been minimized.
1845d8a to
ef0d952
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (5)
.circleci/update-dependencies.yml (1)
36-52: 🧹 Nitpick | 🔵 TrivialStep name doesn't reflect all validated variables.
The step validates
RENOVATE_TOKEN,RENOVATE_REPOSITORIES, andRENOVATE_GIT_AUTHOR, but the name only mentionsRENOVATE_TOKEN. Consider renaming for clarity.Suggested fix
- run: - name: Check if RENOVATE_TOKEN is set + name: Validate required environment variables command: |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.circleci/update-dependencies.yml around lines 36 - 52, The step name "Check if RENOVATE_TOKEN is set" is misleading because the run block validates RENOVATE_TOKEN, RENOVATE_REPOSITORIES, and RENOVATE_GIT_AUTHOR; update the step name to reflect all validated variables (e.g., "Check RENOVATE_TOKEN, RENOVATE_REPOSITORIES, and RENOVATE_GIT_AUTHOR are set") so the job header matches the checks performed in the run block that references RENOVATE_TOKEN, RENOVATE_REPOSITORIES, and RENOVATE_GIT_AUTHOR..vortex/tests/generate-vortex-dev-circleci (2)
70-77:⚠️ Potential issue | 🔴 CriticalFix
VORTEX_DOWNLOAD_DB_SOURCEvalue: use literal source type, not variable name.The value
'VORTEX_CONTAINER_REGISTRY'is a variable name, but the download script expects literal source type strings likecontainer_registry,url,ftp,acquia,lagoon, ors3. Compare with line 55 which correctly uses'url'.Proposed fix
build_variant_job('vortex-dev-database-ii', '*job-database', [ - 'VORTEX_DOWNLOAD_DB_SOURCE' => 'VORTEX_CONTAINER_REGISTRY', + 'VORTEX_DOWNLOAD_DB_SOURCE' => 'container_registry', 'VORTEX_DOWNLOAD_DB_FORCE' => 1,🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.vortex/tests/generate-vortex-dev-circleci around lines 70 - 77, The VORTEX_DOWNLOAD_DB_SOURCE in the build_variant_job call for 'vortex-dev-database-ii' is set to the variable name 'VORTEX_CONTAINER_REGISTRY' but the download script expects a literal source string; update the key/value pair inside the build_variant_job invocation (the map passed to build_variant_job for 'vortex-dev-database-ii') to set 'VORTEX_DOWNLOAD_DB_SOURCE' => 'container_registry' (matching the literal types like 'url' used elsewhere).
220-222: 🧹 Nitpick | 🔵 TrivialConsider quoting YAML string values to handle special characters.
The
build_variant_jobfunction outputs values directly without YAML quoting. If a value contains special characters (:,#,', etc.), the generated YAML could be invalid.Proposed fix
foreach ($env as $key => $value) { - $lines[] = sprintf(' %s: %s', $key, $value); + $yaml_value = is_int($value) ? $value : "'" . str_replace("'", "''", (string) $value) . "'"; + $lines[] = sprintf(' %s: %s', $key, $yaml_value); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.vortex/tests/generate-vortex-dev-circleci around lines 220 - 222, The loop in build_variant_job emits raw YAML values which break when values contain special chars; update the foreach ($env as $key => $value) block so values are YAML-quoted and any inner single quotes are escaped by doubling them before writing. Replace the sprintf(' %s: %s', $key, $value) usage with a form that applies escaping (e.g. $safe = str_replace("'", "''", (string)$value); $lines[] = sprintf(' %s: '\''%s'\''', $key, $safe)) so all env values are wrapped in single quotes and safe for YAML parsing..circleci/vortex-test-common.yml (1)
446-446:⚠️ Potential issue | 🟡 MinorFix
VORTEX_DOWNLOAD_DB_SOURCEvalue: usecontainer_registryliteral, not variable reference.The downloader script expects literal string values like
container_registry,url,ftp,acquia,lagoon, ors3. WithVORTEX_CONTAINER_REGISTRY(a variable name), no download method will match.Fix
- VORTEX_DOWNLOAD_DB_SOURCE: VORTEX_CONTAINER_REGISTRY + VORTEX_DOWNLOAD_DB_SOURCE: container_registry🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.circleci/vortex-test-common.yml at line 446, The VORTEX_DOWNLOAD_DB_SOURCE environment value is currently set to the variable name VORTEX_CONTAINER_REGISTRY instead of the expected literal; update the value of VORTEX_DOWNLOAD_DB_SOURCE to the literal string container_registry so the downloader's selection logic (which checks for literal values like container_registry, url, ftp, acquia, lagoon, s3) will match; change the assignment that references VORTEX_CONTAINER_REGISTRY to use the literal container_registry and verify no other similar env keys mistakenly use variable names..circleci/build-test-deploy.yml (1)
601-601:⚠️ Potential issue | 🟡 MinorAdd
$anchor toproject/*deploy branch regex and fix character class typo.The
project/*pattern has two issues:
- Missing
$end-anchor allows unintended prefix matches- Character class
[a-zA-z...](lowercase 'z') creates an unintended range including[\]^_Proposed fix
- only: /^(production|main|master|develop)$|^project\/[a-zA-z0-9\-\.]+|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/ + only: /^(production|main|master|develop)$|^project\/[a-zA-Z0-9\-.]+$|^(feature|bugfix)\/[a-zA-Z0-9\-\.\,_]+$|^ci.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.circleci/build-test-deploy.yml at line 601, Update the branch-filter regex on the only: line so the project/* alternative is properly anchored and the character class typo is fixed: replace the existing project\/[a-zA-z0-9\-\.]+ with project\/[a-zA-Z0-9\-.]+ and add a trailing $ (i.e., ^project\/[a-zA-Z0-9\-.]+$) inside the overall alternation so it matches only full project/* branch names; edit the only: regex string where it appears.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.vortex/.ahoy.yml:
- Around line 62-66: Add a "name" field to the new ahoy tasks so they match the
existing entries' metadata: update the lint-ci and lint-ci-fix blocks to include
name: "Lint CI" (or similar descriptive strings like "lint-ci" and
"lint-ci-fix") so they appear in ahoy help; ensure the keys "lint-ci" and
"lint-ci-fix" remain as the command identifiers and only add the name property
under each task.
---
Duplicate comments:
In @.circleci/build-test-deploy.yml:
- Line 601: Update the branch-filter regex on the only: line so the project/*
alternative is properly anchored and the character class typo is fixed: replace
the existing project\/[a-zA-z0-9\-\.]+ with project\/[a-zA-Z0-9\-.]+ and add a
trailing $ (i.e., ^project\/[a-zA-Z0-9\-.]+$) inside the overall alternation so
it matches only full project/* branch names; edit the only: regex string where
it appears.
In @.circleci/update-dependencies.yml:
- Around line 36-52: The step name "Check if RENOVATE_TOKEN is set" is
misleading because the run block validates RENOVATE_TOKEN,
RENOVATE_REPOSITORIES, and RENOVATE_GIT_AUTHOR; update the step name to reflect
all validated variables (e.g., "Check RENOVATE_TOKEN, RENOVATE_REPOSITORIES, and
RENOVATE_GIT_AUTHOR are set") so the job header matches the checks performed in
the run block that references RENOVATE_TOKEN, RENOVATE_REPOSITORIES, and
RENOVATE_GIT_AUTHOR.
In @.circleci/vortex-test-common.yml:
- Line 446: The VORTEX_DOWNLOAD_DB_SOURCE environment value is currently set to
the variable name VORTEX_CONTAINER_REGISTRY instead of the expected literal;
update the value of VORTEX_DOWNLOAD_DB_SOURCE to the literal string
container_registry so the downloader's selection logic (which checks for literal
values like container_registry, url, ftp, acquia, lagoon, s3) will match; change
the assignment that references VORTEX_CONTAINER_REGISTRY to use the literal
container_registry and verify no other similar env keys mistakenly use variable
names.
In @.vortex/tests/generate-vortex-dev-circleci:
- Around line 70-77: The VORTEX_DOWNLOAD_DB_SOURCE in the build_variant_job call
for 'vortex-dev-database-ii' is set to the variable name
'VORTEX_CONTAINER_REGISTRY' but the download script expects a literal source
string; update the key/value pair inside the build_variant_job invocation (the
map passed to build_variant_job for 'vortex-dev-database-ii') to set
'VORTEX_DOWNLOAD_DB_SOURCE' => 'container_registry' (matching the literal types
like 'url' used elsewhere).
- Around line 220-222: The loop in build_variant_job emits raw YAML values which
break when values contain special chars; update the foreach ($env as $key =>
$value) block so values are YAML-quoted and any inner single quotes are escaped
by doubling them before writing. Replace the sprintf(' %s: %s', $key,
$value) usage with a form that applies escaping (e.g. $safe = str_replace("'",
"''", (string)$value); $lines[] = sprintf(' %s: '\''%s'\''', $key, $safe))
so all env values are wrapped in single quotes and safe for YAML parsing.
ℹ️ Review info
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (44)
.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/ciprovider_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_all_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deploy_types_none_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/.circleci/update-dependencies.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/deps_updates_provider_ci_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_disabled_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/timezone_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/.circleci/README.mdis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/.circleci/build-test-deploy.ymlis excluded by!.vortex/installer/tests/Fixtures/**.vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/tests/phpunit/CircleCiConfigTest.phpis excluded by!.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (22)
.circleci/README.md.circleci/build-test-deploy.yml.circleci/config.yml.circleci/update-dependencies.yml.circleci/vortex-test-common.yml.github/workflows/vortex-test-common.yml.vortex/.ahoy.yml.vortex/installer/src/Prompts/Handlers/CiProvider.php.vortex/installer/src/Prompts/Handlers/DependencyUpdatesProvider.php.vortex/installer/src/Prompts/Handlers/Internal.php.vortex/installer/tests/Functional/Handlers/CiProviderHandlerProcessTest.php.vortex/installer/tests/Functional/Handlers/MigrationHandlerProcessTest.php.vortex/installer/tests/Functional/Handlers/TimezoneHandlerProcessTest.php.vortex/installer/tests/Unit/Handlers/CiProviderHandlerDiscoveryTest.php.vortex/installer/tests/Unit/Handlers/DependencyUpdatesProviderHandlerDiscoveryTest.php.vortex/tests/CLAUDE.md.vortex/tests/generate-vortex-dev-circleci.vortex/tests/lint.ci.sh.vortex/tests/phpcs.xml.vortex/tests/phpstan.neon.vortex/tests/phpunit/Traits/SutTrait.phptests/phpunit/CircleCiConfigTest.php
💤 Files with no reviewable changes (2)
- .circleci/README.md
- .circleci/config.yml
| lint-ci: | ||
| cmd: ./tests/lint.ci.sh | ||
|
|
||
| lint-ci-fix: | ||
| cmd: ./tests/lint.ci.sh --fix |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Consider adding name fields for consistency.
The new lint-ci and lint-ci-fix commands are missing the name field that other commands in this file use (e.g., lint-installer, lint-tests). While not required for functionality, adding them improves discoverability via ahoy help.
Suggested improvement
lint-ci:
+ name: Lint CI configurations.
cmd: ./tests/lint.ci.sh
lint-ci-fix:
+ name: Fix CI configuration linting issues.
cmd: ./tests/lint.ci.sh --fix📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| lint-ci: | |
| cmd: ./tests/lint.ci.sh | |
| lint-ci-fix: | |
| cmd: ./tests/lint.ci.sh --fix | |
| lint-ci: | |
| name: Lint CI configurations. | |
| cmd: ./tests/lint.ci.sh | |
| lint-ci-fix: | |
| name: Fix CI configuration linting issues. | |
| cmd: ./tests/lint.ci.sh --fix |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.vortex/.ahoy.yml around lines 62 - 66, Add a "name" field to the new ahoy
tasks so they match the existing entries' metadata: update the lint-ci and
lint-ci-fix blocks to include name: "Lint CI" (or similar descriptive strings
like "lint-ci" and "lint-ci-fix") so they appear in ahoy help; ensure the keys
"lint-ci" and "lint-ci-fix" remain as the command identifiers and only add the
name property under each task.
This comment has been minimized.
This comment has been minimized.
ef0d952 to
bbcca74
Compare
This comment has been minimized.
This comment has been minimized.
|
This is technically ready, but the way CircleCI wants the pipelines to be manually configured raises questions of feasibility of this approach to split into multiple files. |
bbcca74 to
42730f3
Compare
|
|
|
Closes #1571
Summary by CodeRabbit