This document explains the automated workflows and custom actions used for version management and release processes in the Temporal UI repository.
The release management system enforces version bump PRs before any release can be published, maintains dual version sync between package.json and version.go, and leverages intelligent version increments with clear, automated workflows.
Version Source of Truth: The Go UIVersion constant in server/server/version/version.go is the authoritative source of truth for the application version. All validation and comparison logic is based on this value, and package.json must be kept in sync with it.
The workflow system uses 8 custom GitHub Actions for modular, reusable functionality:
- Purpose: Validates that package.json and version.go have matching versions
- Inputs:
force(override validation failures) - Outputs:
package-version,go-version,versions-match,current-version - Source of Truth: Uses Go UIVersion as authoritative version
- Purpose: Calculates new semantic version based on bump type or specific version
- Inputs:
current-version,bump-type,specific-version,mode - Outputs:
new-version,version-changed,major,minor,patch - Features: Supports manual version override and semantic version validation
- Purpose: Analyzes commits since last tag to determine version bump type
- Inputs:
last-tag,max-commits - Outputs:
bump-type,changelog,commit-count - Logic: Scans commit messages for breaking changes (major), features (minor), or fixes (patch)
- Purpose: Updates both package.json and version.go with new version atomically
- Inputs:
new-version,dry-run - Outputs:
files-updated,package-updated,go-updated - Safety: Validates successful updates and ensures files remain in sync
- Purpose: Validates that current version is ready for release (sync + version increase)
- Outputs:
version-ready,current-version,previous-version - Validation: Uses validation script to check sync and compares against last git tag
- Purpose: Validates that published release version matches current codebase versions
- Inputs:
release-tag - Outputs:
release-version,validation-passed - Checks: Version format, file sync, and tag-to-code consistency
- Purpose: Builds the UI package and creates tarball for release
- Outputs:
package-path,package-size - Process: Runs
pnpm packageand creates compressed tarball
- Purpose: Updates version.go to match published release tag
- Inputs:
release-tag - Outputs:
updated-version - Use Case: Post-release version synchronization
Purpose: Creates PRs with updated versions based on merged changes or manual input.
Triggers:
- Manual dispatch via GitHub Actions UI
Inputs:
mode:auto(analyze commits) |manual(specify type) |dry-run(preview only)version_type:major|minor|patch(used in manual mode)specific_version: Exact version to set (e.g., "2.38.0") - overrides version_typeforce_update: Override validation checks (admin only)
Custom Actions Used:
validate-version-sync- Ensures current versions matchanalyze-version-bump-type- Analyzes commits for bump type (auto/dry-run modes)calculate-version-bump- Calculates new version with override supportupdate-version-files- Updates both version files atomically
Process:
- Validation: Ensures current versions are in sync using Go UIVersion as source of truth
- Analysis (auto mode): Scans commit messages since last tag for version bump indicators
- Calculation: Determines new version using semantic versioning or specific override
- Updates: Modifies both
package.jsonandserver/server/version/version.go - PR Creation: Uses Peter Evans action to create pull request with changes and changelog
Example Usage:
# Auto mode - analyze recent commits
Actions β Version Bump β Run workflow β Mode: auto
# Manual mode - specify version type
Actions β Version Bump β Run workflow β Mode: manual β Version Type: minor
# Specific version - override with exact version
Actions β Version Bump β Run workflow β Mode: manual β Specific Version: 2.38.0
# Dry run - preview changes
Actions β Version Bump β Run workflow β Mode: dry-runPurpose: Automatically creates draft releases when version changes are detected.
Triggers:
- Push to
mainbranch
Custom Actions Used:
validate-release-readiness- Validates version sync and increase
Process:
- Version Detection: Uses custom action to compare current Go UIVersion with last git tag
- Validation: Ensures package.json matches Go UIVersion (Go version is source of truth)
- Version Increase Check: Verifies new version is higher than last released version
- Conditional Execution: Only creates draft if validation passes
- Release Draft: Uses Release Drafter with current version from UIVersion constant
- Downstream Trigger: Notifies downstream repositories
Skip Conditions:
- No version increase detected (same or lower version than last tag)
- Version files are out of sync
Purpose: Validates release and builds packages when a draft release is published.
Triggers:
- Release published event
Custom Actions Used:
validate-published-release- Validates release tag matches code versionsbuild-and-package- Creates distributable package
Process:
- Version Validation: Ensures release tag matches current version files using custom action
- Package Building: Uses custom action to create distributable package
- Asset Upload: Attaches package to release using custom action output
- Downstream Trigger: Notifies downstream repositories
Developer workflow remains unchanged:
β Create feature branches
β Submit PRs with appropriate labels (major/minor/patch)
β Merge PRs to main
β No version changes needed in regular PRs
1. Go to Actions β "Version Bump"
2. Click "Run workflow"
3. Choose mode:
β’ Auto: Analyze merged commits since last tag
β’ Manual: Specify major/minor/patch explicitly
β’ Specific: Set exact version (e.g., 2.38.0)
β’ Dry Run: Preview what version would be calculated
4. Review the workflow output
5. If successful, a PR will be created automatically using Peter Evans action1. Review the auto-generated PR
β’ Check version changes in package.json and version.go
β’ Review changelog of changes included
β’ Verify version increment is correct
2. Merge the PR to main1. After version bump PR merges to main
2. Release Draft workflow automatically triggers
3. Custom action validates version readiness
4. Creates draft release with version from UIVersion constant
5. Draft includes auto-generated release notes1. Go to Releases β Draft release
2. Review auto-generated content
3. Edit release notes if needed
4. Click "Publish release"
5. Release Published workflow validates and handles packagingLocation: scripts/validate-versions.sh
Usage:
# Validate versions match and increased
pnpm validate:versions
# or directly:
./scripts/validate-versions.sh
# Quiet output (CI-friendly)
./scripts/validate-versions.sh --quiet
# Help
./scripts/validate-versions.sh --helpPurpose:
- Ensures
package.jsonmatchesversion.goUIVersion (Go version is source of truth) - Verifies current version has increased compared to last git tag (not last commit)
- Acts as gate-keeper for draft release creation
- Used by
validate-release-readinesscustom action
Symptoms: Version bump PR merged but no draft release appears
Diagnosis:
- Check if both version files were updated in the PR
- Verify versions in both files match exactly
- Check Release Draft workflow logs and custom action outputs
Resolution:
1. If versions don't match:
β Run Version Bump workflow again
β Or manually sync versions and push to main
2. If workflow failed:
β Check workflow logs for custom action failures
β Re-run failed jobs if applicableSymptoms: Workflows fail with version sync errors from custom actions
Diagnosis: package.json and version.go have different versions
Resolution:
1. Immediate fix:
β Run: pnpm validate:versions
β Check which file is incorrect (Go UIVersion is source of truth)
β Manually update mismatched file
β Commit and push changes
2. Proper fix:
β Use Version Bump workflow with force_update: true
β This will sync both files to correct version using custom actionsSymptoms: Published release fails validation from custom action
Diagnosis: Release tag doesn't match current version files
Resolution:
1. Check release tag format (should be vX.Y.Z or X.Y.Z)
2. Verify tag matches package.json and version.go versions
3. If mismatch:
β Delete the release
β Fix version sync issues using custom actions
β Re-run Version Bump workflow
β Create new release- Check individual custom action logs in workflow runs
- Verify inputs are correctly passed between actions
- Ensure repository permissions allow custom action execution
- Ensure
GITHUB_TOKENhas write permissions for contents and PRs - Verify
TEMPORAL_CICD_APP_IDandTEMPORAL_CICD_PRIVATE_KEYsecrets exist - Custom actions require same permissions as parent workflows
- All versions must follow semantic versioning (X.Y.Z)
- No prefixes like 'v' in version files (only in git tags)
- Custom actions validate semantic version format
- Ensure main branch allows admin overrides for automated PRs
- Version bump PRs should be exempt from certain checks
- Peter Evans action requires appropriate permissions
- Check Workflow Logs: Actions tab β Select workflow run β View detailed logs including custom action steps
- Validate Locally: Run
pnpm validate:versionsbefore debugging - Test Version Bump: Use dry-run mode to preview changes without custom action modifications
- Manual Intervention: Force update option available for emergencies
# Only in emergencies - manually sync versions
1. Update package.json version
2. Update version.go UIVersion (must match package.json)
3. Commit both changes
4. Create release manually# If wrong version was released
1. Revert version bump PR
2. Delete incorrect release and tag
3. Re-run Version Bump workflow (custom actions will recalculate)
4. Create new release- Modular Design: Each action has single responsibility
- Reusable Components: Actions used across multiple workflows
- Error Handling: Individual actions provide detailed error messages
- Output Chaining: Actions pass data between workflow steps
- Git Tag Based: Compares against last released version, not last commit
- Semantic Versioning: Uses proper semver comparison algorithms
- Go Source of Truth: Always uses UIVersion constant as authoritative source
- Reliable PR Creation: Uses battle-tested create-pull-request action
- Rich PR Content: Includes changelog and detailed commit information
- Branch Management: Automatic branch creation and cleanup
- Semantic Versioning
- GitHub Actions Documentation
- Custom Actions Documentation
- Peter Evans Actions
- Release Drafter Configuration
- Version Bump:
.github/workflows/version-bump.yml - Release Draft:
.github/workflows/release-draft.yml - Release Published:
.github/workflows/release-published.yml
- Validate Version Sync:
.github/actions/validate-version-sync/action.yml - Calculate Version Bump:
.github/actions/calculate-version-bump/action.yml - Analyze Version Bump Type:
.github/actions/analyze-version-bump-type/action.yml - Update Version Files:
.github/actions/update-version-files/action.yml - Validate Release Readiness:
.github/actions/validate-release-readiness/action.yml - Validate Published Release:
.github/actions/validate-published-release/action.yml - Build and Package:
.github/actions/build-and-package/action.yml - Update Version from Release:
.github/actions/update-version-from-release/action.yml
- Release Drafter Config:
.github/release-drafter.yml - Version Validation Script:
scripts/validate-versions.sh