FVM GitHub Workflows
February 13, 2026 ยท View on GitHub
Active Workflows
release.yml
Trigger: Git tag push with v* pattern + manual dispatch
Purpose: Main deployment pipeline triggered by pushing a version tag
Process:
- Test - Run all tests and quality checks
- Release - Create GitHub release and deploy core packages:
- ๐ฆ pub.dev
- ๐ง GitHub Linux binaries
- Uses cli_pkg's
pkg-github-releaseto create GitHub release from CHANGELOG
- Deploy - Deploy to all platforms simultaneously:
- ๐ GitHub macOS binaries + Homebrew
- ๐ช GitHub Windows binaries + Chocolatey
- ๐ณ Docker Hub
Release Grinder tasks now live in
tool/release_tooland require Dart SDK โฅ 3.8. Run release commands from that directory (e.g.cd tool/release_tool && dart pub get && dart run grinder pkg-github-release). CI pins this toolchain via theRELEASE_DART_SDKenvironment variable (currently3.9.0, aligned with our Homebrew formula) while the rest of the repo targets the lower (>=3.6.0) constraint for everyday development.
Usage:
- Update
pubspec.yamlversion - Update
CHANGELOG.mdwith release notes - Run
dart run build_runner buildto generate version.dart - Commit changes
- Tag with
vprefix:git tag v4.0.0-beta.3 - Push tag:
git push origin v4.0.0-beta.3 - Everything deploys automatically!
release-fvm-mcp.yml
Trigger: Git tag push with fvm-mcp-v* pattern + manual dispatch
Purpose: Build and publish fvm_mcp standalone binaries to GitHub Releases
Process:
- Validate - Enforce release tag format and version consistency:
- Tag must match
fvm-mcp-v<semver> - Tag version must match
fvm_mcp/pubspec.yaml - Tag version must match
fvm_mcp/lib/src/server.dartdefault server version
- Tag must match
- Build - Compile binaries on all supported runners:
- ๐ง Linux (
tar.gz) - ๐ macOS (
tar.gz) - ๐ช Windows (
zip)
- ๐ง Linux (
- Publish - Create/update GitHub release and upload:
- Platform archives
SHA256SUMSintegrity file
Usage:
- Update
fvm_mcp/pubspec.yamlversion - Update
fvm_mcp/lib/src/server.dartFVM_MCP_VERSIONdefault - Add/update
fvm_mcp/CHANGELOG.mdentry for that exact version - Commit changes
- Tag with MCP prefix:
git tag fvm-mcp-v0.0.1-alpha.1 - Push tag:
git push origin fvm-mcp-v0.0.1-alpha.1 release-fvm-mcp.ymlpublishes release assets automatically
test.yml
Trigger: Push, PR, workflow_call
Purpose: Run all tests and quality checks
Used by: Other workflows for validation before deployment
test-install.yml
Trigger: Manual dispatch
Purpose: Test FVM installation across different platforms
Standalone Deploy Workflows
Platform-Specific Deploy Workflows
deploy_docker.yml- Standalone Docker deploymentdeploy_homebrew.yml- Standalone Homebrew updatesdeploy_macos.yml- Standalone macOS deploymentdeploy_windows.yml- Standalone Windows deployment
Recommended Release Process
๐ Standard Release (Recommended)
-
Prepare Release
- Update
pubspec.yamlwith new version number - Update
CHANGELOG.mdwith release notes (use traditional format with bullet points) - Run
dart run build_runner build --delete-conflicting-outputsto generatelib/src/version.dart - Commit all changes:
git commit -m "chore: prepare vX.Y.Z release"
- Update
-
Create and Push Tag
- Create tag:
git tag vX.Y.Z(e.g.,v4.0.0-beta.3) - Push tag:
git push origin vX.Y.Z
- Create tag:
-
Automatic Deployment
release.ymltriggers automatically on tag push- cli_pkg creates GitHub release from CHANGELOG content
- Monitor progress in Actions
- All platforms deployed simultaneously
๐งฉ FVM MCP Release (Standalone)
-
Prepare MCP version
- Update
fvm_mcp/pubspec.yamlversion (for example0.0.1-alpha.1) - Update
fvm_mcp/lib/src/server.dartdefaultFVM_MCP_VERSION - Add a matching section in
fvm_mcp/CHANGELOG.md - Commit changes
- Update
-
Create and Push MCP Tag
- Create tag:
git tag fvm-mcp-vX.Y.Zorgit tag fvm-mcp-vX.Y.Z-alpha.N - Push tag:
git push origin fvm-mcp-vX.Y.Z
- Create tag:
-
Automatic MCP Deployment
release-fvm-mcp.ymlvalidates version alignment- Builds Linux/macOS/Windows standalone binaries
- Publishes assets and checksums to the tagged GitHub release
โก Emergency Release (Alternative)
For hotfixes or platform-specific urgent updates, use individual platform workflows:
- Manual dispatch
deploy_homebrew.ymlfor Homebrew-only updates - Manual dispatch
deploy_docker.ymlfor Docker-only updates - Manual dispatch individual platform workflows as needed
Version Management
- Version Source:
pubspec.yaml(manually updated before tagging) - Tag Format (FVM CLI): Must follow semver with
vprefix:v4.0.0-beta.2 - Tag Format (FVM MCP): Must follow semver with
fvm-mcp-vprefix:fvm-mcp-v0.0.1-alpha.1 - CHANGELOG: cli_pkg reads CHANGELOG.md to populate GitHub release notes
- Generated Files:
lib/src/version.dartis generated by build_runner from pubspec.yaml
Troubleshooting
Workflow doesn't trigger
- Ensure tag is pushed to remote (not just created locally)
- Check that tag follows the correct pattern for the workflow:
v*forrelease.ymlfvm-mcp-v*forrelease-fvm-mcp.yml
- Verify all required secrets are configured
Binary upload fails
- Check if GitHub release exists with matching tag
- Verify
GITHUB_TOKENhas release permissions - Ensure standalone binaries built successfully
Platform deployment fails
- Check platform-specific tokens (Chocolatey, Homebrew, Docker)
- Verify runner OS matches deployment target
- Review build logs for specific error details