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

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

Problem

release_create.php only creates stream tags (stable, development, release-candidate) but no semver version tags. Package registries (Packagist, npm, Gitea Composer) need proper semver tags to index versions.

Solution

After creating the stream tag release, also create a version tag based on the repo's metadata:

Tag Format by Platform (from metadata API)

Platform Version Prefix Tag Format Example
php (none) v{major}.{minor}.{patch} v9.37.0
joomla (none) v{XX}.{YY}.{ZZ} v01.00.00
go v1.26.1+moko. v1.26.1-moko.{XX}.{YY}.{ZZ} v1.26.1-moko.06.20.00
node (none) v{major}.{minor}.{patch} v1.4.1

Implementation

In cli/release_create.php, after the stream release is created:

  1. Call metadata API: GET /repos/{owner}/{repo}/metadata
  2. Read platform, version_prefix, element_name
  3. Convert internal version (09.37.00) to platform-appropriate semver
  4. For PHP: strip leading zeros → 9.37.0
  5. For Joomla: keep padded → 01.00.00
  6. Create additional git tag: POST /repos/{owner}/{repo}/tags with version tag
  7. The version tag points to the same commit as the stream tag

Affected Files

  • cli/release_create.php — add version tag creation after stream release
  • cli/release_publish.php — may also need the same logic
  • composer-publish.yml — already triggers on version tags

Why This Matters

  • Packagist indexes from semver tags, not stream tags
  • Gitea Composer registry uses tags for version discovery
  • npm uses package.json version but tags help with git-based installs
  • Enables composer require mokoconsulting/mokocli:^9.37 syntax

Related

  • mokocli registered on Packagist as mokoconsulting/mokocli
  • composer-publish.yml workflow already triggers on v* tags
  • Current stream tags (stable, development, etc.) are skipped by Packagist
## Problem release_create.php only creates stream tags (stable, development, release-candidate) but no semver version tags. Package registries (Packagist, npm, Gitea Composer) need proper semver tags to index versions. ## Solution After creating the stream tag release, also create a version tag based on the repo's metadata: ### Tag Format by Platform (from metadata API) | Platform | Version Prefix | Tag Format | Example | |----------|---------------|------------|---------| | php | (none) | `v{major}.{minor}.{patch}` | `v9.37.0` | | joomla | (none) | `v{XX}.{YY}.{ZZ}` | `v01.00.00` | | go | `v1.26.1+moko.` | `v1.26.1-moko.{XX}.{YY}.{ZZ}` | `v1.26.1-moko.06.20.00` | | node | (none) | `v{major}.{minor}.{patch}` | `v1.4.1` | ### Implementation In `cli/release_create.php`, after the stream release is created: 1. Call metadata API: `GET /repos/{owner}/{repo}/metadata` 2. Read `platform`, `version_prefix`, `element_name` 3. Convert internal version (`09.37.00`) to platform-appropriate semver 4. For PHP: strip leading zeros → `9.37.0` 5. For Joomla: keep padded → `01.00.00` 6. Create additional git tag: `POST /repos/{owner}/{repo}/tags` with version tag 7. The version tag points to the same commit as the stream tag ### Affected Files - `cli/release_create.php` — add version tag creation after stream release - `cli/release_publish.php` — may also need the same logic - `composer-publish.yml` — already triggers on version tags ### Why This Matters - Packagist indexes from semver tags, not stream tags - Gitea Composer registry uses tags for version discovery - npm uses package.json version but tags help with git-based installs - Enables `composer require mokoconsulting/mokocli:^9.37` syntax ### Related - mokocli registered on Packagist as `mokoconsulting/mokocli` - composer-publish.yml workflow already triggers on `v*` tags - Current stream tags (stable, development, etc.) are skipped by Packagist
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