Add release system with semver versioning, changelog, and release skill

- Switch from CalVer (date+SHA) to semantic versioning starting at v2.0.0
- Create release skill (.agents/skills/release/) with full AI-guided release workflow
- Add CHANGELOG.md with initial 2.0.0 entry
- Update CI tag regex to match semver tags (v2.0.0 instead of v2026.03.24-sha)
- Extract changelog content into GitLab release descriptions
- Update Android versionName to 2.0.0 in build.gradle
- Update iOS MARKETING_VERSION to 2.0.0 in pbxproj
- Expose VERSION (semver) and BUILD_DATE (ISO 8601) as build-time constants
- Display version and build date in Settings page footer
- Remove npm release script (releases are now done via the AI skill)
This commit is contained in:
Alex Gleason
2026-03-26 21:13:32 -05:00
parent 1dbbaa283c
commit cbbb576b26
10 changed files with 246 additions and 27 deletions
+19 -6
View File
@@ -46,7 +46,7 @@ build-apk:
timeout: 15 minutes
needs: []
rules:
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+-/
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
variables:
ANDROID_SDK_ROOT: /opt/android-sdk
ANDROID_HOME: /opt/android-sdk
@@ -97,8 +97,7 @@ build-apk:
storeFile=my-upload-key.keystore
EOF
script:
# Extract version from git tag (e.g., v2026.03.16+974041a)
# versionName: full calver+sha string (e.g., 2026.03.16+974041a)
# Extract semver version from git tag (e.g., v2.1.0 -> 2.1.0)
- TAG="${CI_COMMIT_TAG#v}"
- VERSION_NAME="${TAG}"
- VERSION_CODE="${CI_PIPELINE_IID}"
@@ -152,13 +151,27 @@ release:
needs:
- build-apk
rules:
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+-/
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
script:
- echo "Creating release for $CI_COMMIT_TAG"
# Extract the latest changelog section for the release description.
# Reads from "## [version]" to the next "## [" or end of file.
- |
VERSION="${CI_COMMIT_TAG#v}"
RELEASE_NOTES=$(awk "/^## \\[${VERSION}\\]/{found=1; next} /^## \\[/{if(found) exit} found{print}" CHANGELOG.md)
if [ -z "$RELEASE_NOTES" ]; then
RELEASE_NOTES="Ditto ${CI_COMMIT_TAG}"
fi
echo "RELEASE_NOTES<<ENDOFNOTES" >> release.env
echo "$RELEASE_NOTES" >> release.env
echo "ENDOFNOTES" >> release.env
artifacts:
reports:
dotenv: release.env
release:
tag_name: $CI_COMMIT_TAG
name: $CI_COMMIT_TAG
description: "Ditto $CI_COMMIT_TAG"
description: $RELEASE_NOTES
assets:
links:
- name: "Ditto-${CI_COMMIT_TAG}.apk"
@@ -174,7 +187,7 @@ publish-zapstore:
needs:
- build-apk
rules:
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+-/
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
variables:
SIGN_WITH: $ZAPSTORE_BUNKER_URL
script: