feat: create semver version tags alongside stream tags based on repo metadata #304

Closed
opened 2026-06-21 06:08:29 +00:00 by jmiller · 0 comments
Owner

Summary

Replace stream tags with semver version tags for package-based repos (npm, Composer, Go). Joomla repos keep existing stream tag behavior.

Repo Type Behavior

Repo Type Tag Style Auto-Bump Trigger Examples
Joomla Stream tags (stable, development, release-candidate) Push to dev/rc MokoSuiteHQ, client repos
npm (MCP) Semver only (v1.2.3) Merge to main only mcp-mokogitea-api, all MCP repos
Composer (PHP) Semver only (v9.38.0) Merge to main only mokocli
Go Semver only (v1.27.0) Merge to main only MokoGitea-Fork

What Changes

1. pre-release.yml — Conditional auto-bump

  • Check repo metadata type field
  • If type is joomla-*: auto-bump on push to dev/rc (current behavior)
  • If type is npm, composer, go, or similar: skip entirely — no auto-bump on dev/rc

2. auto-release.yml — Semver tag creation on main

  • For non-Joomla repos: on merge to main, read version from metadata, create release at tag v{version}
  • No stream tag manipulation needed — just one immutable semver tag per release
  • Bump version (patch) in metadata after release

3. release_publish.php — Type-aware release logic

  • Read repo type from metadata API
  • For Joomla: existing stream tag behavior
  • For npm/Composer/Go: create release at v{version} tag, skip stream tag manipulation

4. enforce_tags.sh — Skip non-Joomla repos

  • Only enforce standard stream tags on Joomla repos
  • Leave npm/Composer/Go repos with their semver tags only

Detection

Repo type detected from metadata API field type or platform:

  • joomla-component, joomla-plugin, joomla-package → Joomla behavior
  • npm, mcp, typescript → npm behavior
  • composer, php-cli → Composer behavior
  • go → Go behavior

Benefits

  • Prevents duplicate/overwritten releases (stream tags are mutable, semver tags are not)
  • Aligns with package registry expectations (Packagist/npm use tags for version discovery)
  • Simplifies release history (one tag = one version, forever)
## Summary Replace stream tags with semver version tags for package-based repos (npm, Composer, Go). Joomla repos keep existing stream tag behavior. ## Repo Type Behavior | Repo Type | Tag Style | Auto-Bump Trigger | Examples | |-----------|-----------|-------------------|----------| | Joomla | Stream tags (stable, development, release-candidate) | Push to dev/rc | MokoSuiteHQ, client repos | | npm (MCP) | Semver only (v1.2.3) | Merge to main only | mcp-mokogitea-api, all MCP repos | | Composer (PHP) | Semver only (v9.38.0) | Merge to main only | mokocli | | Go | Semver only (v1.27.0) | Merge to main only | MokoGitea-Fork | ## What Changes ### 1. `pre-release.yml` — Conditional auto-bump - Check repo metadata `type` field - If type is `joomla-*`: auto-bump on push to dev/rc (current behavior) - If type is `npm`, `composer`, `go`, or similar: **skip entirely** — no auto-bump on dev/rc ### 2. `auto-release.yml` — Semver tag creation on main - For non-Joomla repos: on merge to main, read version from metadata, create release at tag `v{version}` - No stream tag manipulation needed — just one immutable semver tag per release - Bump version (patch) in metadata after release ### 3. `release_publish.php` — Type-aware release logic - Read repo type from metadata API - For Joomla: existing stream tag behavior - For npm/Composer/Go: create release at `v{version}` tag, skip stream tag manipulation ### 4. `enforce_tags.sh` — Skip non-Joomla repos - Only enforce standard stream tags on Joomla repos - Leave npm/Composer/Go repos with their semver tags only ## Detection Repo type detected from metadata API field `type` or `platform`: - `joomla-component`, `joomla-plugin`, `joomla-package` → Joomla behavior - `npm`, `mcp`, `typescript` → npm behavior - `composer`, `php-cli` → Composer behavior - `go` → Go behavior ## Benefits - Prevents duplicate/overwritten releases (stream tags are mutable, semver tags are not) - Aligns with package registry expectations (Packagist/npm use tags for version discovery) - Simplifies release history (one tag = one version, forever)
Sign in to join this conversation.
No labels
Priority Medium
Type Feature
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoCLI#304