[sdlc] Implement semantic-release versioning for local and deployed apps

Problem to solve

The knowledge-graph repository contains two apps that need independent versioning and releases:

  1. Local KG - the existing Rust application with semantic releases
  2. Deployed KG - the new Docker image for indexer/web-server

Semantic-release is designed for a 1:1 relationship between git repo and released app. There's no straightforward way to version two apps in one repository, which creates challenges for release notes and versioning.

Proposed solutions

  1. Isolate semantic-release configs with different tag prefixes (e.g., local-v0.15.3 vs deployed-v0.17.5)

    • Hook into the generateNotes step for semantic-release
    • Configure git commit parsing to check if commit/MR title contains identifier (e.g., "deployed")
    • Enforce MRs to have identification via CI
    • Caveat: Requires discipline to always include identifier in titles, but manageable
  2. Create a new repository for Docker image releases, helm chart releases, and sandbox deployments

    • Pull commit messages for release notes via GitLab API using labels (deployed or sdlc)
    • Caveat: Additional repository overhead and complexity
  3. Use other release tools or manual versioning

    • Caveat: Loss of automation benefits
  4. Reuse local KG version for deployed version

    • Caveat: Shared release notes issues plus weird versioning, especially for major releases

Goal

Investigate and implement Option 1 - configure semantic-release with:

  • Different tag prefixes for local vs deployed apps
  • Custom generateNotes step to filter commits/MRs by identifier
  • CI enforcement for MR title conventions