Skip to content

Conversation

@AlexSkrypnyk
Copy link
Member

@AlexSkrypnyk AlexSkrypnyk commented Nov 17, 2025

Closes #1571

Summary by CodeRabbit

  • Documentation

    • Added comprehensive documentation for CI/CD configuration structure, shared components, testing procedures, and workflow mapping.
  • Chores

    • Refactored CI/CD pipelines into modular, self-contained configurations for improved maintainability and scalability. Introduced nightly database refresh jobs and dependency update workflows.

…style naming.

- Created build-test-deploy.yml for main pipeline
- Created database-nightly.yml for overnight DB refresh
- Created update-dependencies.yml for Renovate automation
- Created vortex-test-postbuild.yml for Vortex post-build tests
- Created vortex-test-didi-fi.yml for DIDI file-to-image tests
- Created vortex-test-didi-ii.yml for DIDI image-to-image tests
- Added comprehensive documentation in README.md
- Added workflow mapping and shared components documentation
- Preserved all conditional markers for installer processing
- Used GitHub Actions-style naming conventions throughout
@coderabbitai
Copy link

coderabbitai bot commented Nov 17, 2025

Walkthrough

This pull request splits a monolithic CircleCI configuration into six independent, self-contained configuration files (build-test-deploy.yml, database-nightly.yml, update-dependencies.yml, vortex-test-postbuild.yml, vortex-test-didi-fi.yml, vortex-test-didi-ii.yml) with corresponding documentation describing workflow mappings, shared components, testing procedures, and implementation strategy.

Changes

Cohort / File(s) Summary
CircleCI Documentation
.circleci/README.md, .circleci/SHARED_COMPONENTS.md, .circleci/TESTING.md, .circleci/WORKFLOW_MAPPING.md
Comprehensive documentation detailing multi-file configuration structure, shared YAML anchors/aliases (db_ssh_fingerprint, runner_config, etc.), per-file component mappings, end-to-end testing checklist, and workflow migration mapping from original config.yml to new multi-file setup.
Core Workflow Configurations
.circleci/build-test-deploy.yml, .circleci/database-nightly.yml, .circleci/update-dependencies.yml
Simplified build-test-deploy pipeline with nightly database refresh job (includes docker setup, SSH key handling, cache management) and Renovate-based dependency update job (scheduled and manual workflows with environment validation).
Vortex Test Configurations
.circleci/vortex-test-didi-fi.yml, .circleci/vortex-test-didi-ii.yml, .circleci/vortex-test-postbuild.yml
Three independent test suites: DIDI file-based and image-based database testing workflows (with cache-keyed artifacts and docker compose operations) and post-build PHPUnit testing pipeline.
Implementation & Planning
plan.md, IMPLEMENTATION_SUMMARY.md
Phase-based rollout strategy covering motivation, file structure, implementation phases (preparation, extraction, splitting, testing), acceptance criteria, risk mitigation, timeline, and rollback procedures.

Sequence Diagram(s)

sequenceDiagram
    participant GH as GitHub Push/<br/>Schedule
    participant CI as CircleCI<br/>Multi-File Config
    participant BT as build-test-deploy
    participant DB as database-nightly
    participant UD as update-dependencies
    participant VP as vortex-test-*

    GH->>CI: Commit/Tag to main/develop
    activate CI
    CI->>BT: Trigger: build-test-deploy.yml<br/>Workflow: build-test-deploy
    activate BT
    BT->>BT: build → test → deploy
    BT-->>CI: ✓ Complete
    deactivate BT

    GH->>CI: Nightly cron trigger<br/>(develop branch)
    CI->>DB: Trigger: database-nightly.yml<br/>Workflow: database-nightly
    activate DB
    DB->>DB: Setup SSH, Docker,<br/>Download/Export DB
    DB-->>CI: ✓ Cache updated
    deactivate DB

    GH->>CI: Cron or manual<br/>run_update_dependencies=true
    CI->>UD: Trigger: update-dependencies.yml<br/>Workflows: scheduled/manual
    activate UD
    UD->>UD: Validate env vars,<br/>Execute Renovate
    UD-->>CI: ✓ PR created (if needed)
    deactivate UD

    GH->>CI: Commit/Tag/Manual
    CI->>VP: Trigger: vortex-test-*.yml<br/>Workflows: vortex-test-didi-fi/ii, postbuild
    activate VP
    VP->>VP: Specialized test flow<br/>(DB-from-file, DB-in-image,<br/>post-build PHPUnit)
    VP-->>CI: ✓ Results & artifacts
    deactivate VP
    deactivate CI

    Note over CI: Each config file<br/>self-contained &<br/>independently triggered
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

  • .circleci/database-nightly.yml, .circleci/vortex-test-didi-fi.yml, .circleci/vortex-test-didi-ii.yml: Each introduces dense CircleCI 2.1 configuration with non-trivial logic for SSH key handling, Docker remote setup, cache key generation and restoration, workspace attachment, environment variable overrides, and multi-step job definitions. Requires verification of job sequences, cache strategies, and conditional logic.
  • .circleci/build-test-deploy.yml: Consolidation of multiple workflows and jobs with renamed references; verify job dependencies and trigger conditions align with intended pipeline flow.
  • plan.md: Comprehensive phase-based rollout strategy; ensure alignment with CI configuration logic and identify any gaps between planned and implemented structures.
  • Cross-file consistency: Validate that shared YAML anchors (db_ssh_fingerprint, runner_config, etc.) are correctly defined and referenced across all six configuration files, and that environment variable handling is consistent.

Possibly related PRs

Poem

🐰 The config was one, now it is six,
Each pipeline stands tall, no need to fix,
Self-contained workflows, independent and true,
Split with precision—now CI feels new! ✨

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly references the linked issue #1571 and clearly summarizes the main change: splitting CircleCI config into multiple files.
Linked Issues check ✅ Passed The PR successfully implements the objective from issue #1571 by splitting the CircleCI config into multiple self-contained configuration files.
Out of Scope Changes check ✅ Passed All changes are directly related to splitting CircleCI configuration into multiple files. Documentation and implementation files support this primary objective.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/1571-split-circleci-config

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot temporarily deployed to commit November 17, 2025 09:49 Inactive
@codecov
Copy link

codecov bot commented Nov 17, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 65.98%. Comparing base (de4b6a3) to head (0996b16).
⚠️ Report is 19 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #2105      +/-   ##
===========================================
- Coverage    70.02%   65.98%   -4.04%     
===========================================
  Files           97       44      -53     
  Lines         4898     2214    -2684     
  Branches        44       44              
===========================================
- Hits          3430     1461    -1969     
+ Misses        1468      753     -715     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9da0ba0 and 0996b16.

📒 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-deploy workflow 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-deploy which 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 that drevops/ci-runner:25.10.0 and the v25.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.0 release
  • 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/` directory

Likely 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-ii correctly establishes that vortex-test-didi-build-ii depends on vortex-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.yml consistently define VORTEX_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.yml uses vortex-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.yml match exactly across sibling files (build-test-deploy.yml, database-nightly.yml, vortex-test-didi-fi.yml). The distinction between db_cache_fallback in restore operations and db_cache_fallback_yes in 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-fi vs. 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. The VORTEX_DB_DOWNLOAD_SOURCE distinction between FI and II variants is intentional and correct.

Verification confirms:

  • FI variant correctly uses url for file-based database downloads (line 216)
  • II variant correctly uses VORTEX_CONTAINER_REGISTRY for 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_FALLBACK is 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 version 25.3.0 currency with drevops maintainers.

Confirmed findings:

  • CI runner version is synchronized at 25.10.0 across all 5 CircleCI config files ✓
  • MariaDB version 25.3.0 is pinned in database-nightly.yml:182 and consistent (only one occurrence)
  • Version mismatch exists: 25.10.0 (ci-runner) vs 25.3.0 (mariadb-drupal-data)

Cannot confirm via web search whether 25.3.0 is current or outdated for the custom drevops/mariadb-drupal-data image. Manually verify:

  • If version 25.10.0 exists for the MariaDB image
  • Whether the 25.3.0 pin is intentional or requires update for compatibility

Comment on lines +195 to +203
database-nightly:
triggers:
- schedule:
cron: *nightly_db_schedule
filters:
branches:
only:
- develop
jobs:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

Comment on lines +13 to +217
#### 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.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.


## File Organization

```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

Comment on lines +297 to +299
- **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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

Suggested change
- **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.

Comment on lines +1 to +134
# 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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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 -->

Comment on lines +39 to +78
#### 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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ 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.


### Main Project Pipelines (Consumer Projects)

```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ 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 validation

Also 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.

Comment on lines +25 to +440
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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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 parameter

Apply 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.


Split the configuration into logical, purpose-driven files using GitHub Actions-style naming conventions for consistency:

```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

### 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`
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

@AlexSkrypnyk AlexSkrypnyk added the Requires more work Pull request was reviewed and reviver(s) asked to work further on the pull request label Nov 25, 2025
@AlexSkrypnyk AlexSkrypnyk moved this from BACKLOG to Next release in Vortex Nov 25, 2025
@github-actions github-actions bot added the CONFLICT Pull request has a conflict that needs to be resolved before it can be merged label Nov 26, 2025
@AlexSkrypnyk AlexSkrypnyk added this to the 2.0 milestone Dec 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CONFLICT Pull request has a conflict that needs to be resolved before it can be merged Requires more work Pull request was reviewed and reviver(s) asked to work further on the pull request

Projects

Status: Next release

Development

Successfully merging this pull request may close these issues.

Split CircleCI config into multiple files

2 participants