7.9 KiB
VS Code Extension CI/CD Setup
This document explains the CI/CD setup for the Task Master VS Code extension using automated changesets.
🔄 Workflows Overview
1. Extension CI (extension-ci.yml)
Triggers
- Push to
mainornextbranches (only when extension files change) - Pull requests to
mainornext(only when extension files change)
What it does
- ✅ Lints and type-checks the extension code
- 🔨 Builds the extension (
npm run build) - 📦 Creates a clean package (
npm run package) - 🧪 Runs tests with VS Code test framework
- 📋 Creates a test VSIX package to verify packaging works
- 💾 Uploads build artifacts for inspection
2. Version & Publish (version.yml)
Triggers:
- Push to
mainbranch
What it does:
- 🔍 Detects changeset files for pending releases
- 📝 Creates "Version Packages" PR with updated versions and CHANGELOG
- 🤖 When Version PR is merged, automatically:
- 🔨 Builds and packages the extension
- 🏷️ Creates git tags with changeset automation
- 📤 Publishes to VS Code Marketplace
- 🌍 Publishes to Open VSX Registry
- 📊 Updates package versions and CHANGELOG
🚀 Changeset Workflow
Creating Changes
When making changes to the extension:
- Make your code changes
- Create a changeset:
# From project root npx changeset add - Select the extension package: Choose
taskr-kanbanwhen prompted - Select version bump type:
patch: Bug fixes, minor updatesminor: New features, backwards compatiblemajor: Breaking changes
- Write a summary: Describe what changed for users
- Commit changeset file along with your code changes
- Push to feature branch and create PR
Automated Publishing Process
- PR with changeset gets merged to
main - Version workflow detects changesets and creates "Version Packages" PR
- Review and merge the Version PR
- Automated publishing happens immediately:
- Extension is built using 3-file packaging system
- VSIX package is created and tested
- Published to VS Code Marketplace (if
VSCE_PATis set) - Published to Open VSX Registry (if
OVSX_PATis set) - Git tags are created:
taskr-kanban@1.0.1 - CHANGELOG is updated automatically
🔑 Required Secrets
To use the automated publishing, you need to set up these GitHub repository secrets:
VSCE_PAT (VS Code Marketplace Personal Access Token)
- Go to Azure DevOps
- Sign in with your Microsoft account
- Create a Personal Access Token:
- Name: VS Code Extension Publishing
- Organization: All accessible organizations
- Expiration: Custom (recommend 1 year)
- Scopes: Custom defined → Marketplace → Manage
- Copy the token and add it to GitHub Secrets as
VSCE_PAT
OVSX_PAT (Open VSX Registry Personal Access Token)
- Go to Open VSX Registry
- Sign in with your GitHub account
- Go to your User Settings
- Create a new Access Token:
- Description: VS Code Extension Publishing
- Scopes: Leave default (full access)
- Copy the token and add it to GitHub Secrets as
OVSX_PAT
GITHUB_TOKEN (automatically provided)
This is automatically available in GitHub Actions - no setup required.
📋 Version Management
Changeset-Based Versioning
Versions are automatically managed by changesets:
- No manual version updates needed - changesets handle this automatically
- Semantic versioning is enforced based on changeset types
- Changelog generation happens automatically
- Git tagging is handled by the automation
Critical Fields Sync
The automation ensures these fields stay in sync between package.json and package.publish.json:
{
"version": "1.0.2", // ✅ AUTO-SYNCED
"publisher": "Hamster", // ⚠️ MUST MATCH MANUALLY
"displayName": "taskr: Task Master Kanban", // ⚠️ MUST MATCH MANUALLY
"description": "...", // ⚠️ MUST MATCH MANUALLY
"engines": { "vscode": "^1.93.0" }, // ⚠️ MUST MATCH MANUALLY
"categories": [...], // ⚠️ MUST MATCH MANUALLY
"contributes": { ... } // ⚠️ MUST MATCH MANUALLY
}
Note: Only version is automatically synced. Other fields must be manually kept in sync.
🔍 Monitoring Builds
CI Status
- Green ✅: Extension builds and tests successfully
- Red ❌: Build/test failures - check logs for details
- Yellow 🟡: Partial success - some jobs may have warnings
Version PR Status
- Version PR Created: Changesets detected, review and merge to publish
- No Version PR: No changesets found, no releases pending
- Version PR Merged: Automated publishing triggered
Release Status
- Published 🎉: Extension live on VS Code Marketplace and Open VSX
- Skipped ℹ️: No changesets found, no release needed
- Failed ❌: Check logs - often missing secrets or build issues
Artifacts
Workflows upload artifacts that you can download:
- CI: Test results, built files, and VSIX package
- Version: Final VSIX package and published extension
🛠️ Troubleshooting
Common Issues
No Version PR Created
- Check: Changeset files exist in
.changeset/directory - Check: Changeset refers to
taskr-kanbanpackage name - Check: Changes were pushed to
mainbranch - Solution: Create changeset with
npx changeset add
Version PR Not Publishing
- Check: Version PR was actually merged (not just closed)
- Check: Required secrets (
VSCE_PAT,OVSX_PAT) are set - Check: No build failures in workflow logs
- Solution: Re-run workflow or check secret configuration
VSCE_PAT is not set Error
- Ensure
VSCE_PATsecret is added to repository - Check token hasn't expired
- Verify token has Marketplace → Manage permissions
OVSX_PAT is not set Error
- Ensure
OVSX_PATsecret is added to repository - Check token hasn't expired
- Verify you're signed in to Open VSX Registry with GitHub
Build Failures
- Check extension code compiles locally:
cd apps/extension && npm run build - Verify tests pass locally:
npm run test - Check for TypeScript errors:
npm run typecheck
Packaging Failures
- Ensure clean package builds:
npm run package - Check vsix-build structure is correct
- Verify
package.publish.jsonhas correctrepositoryfield
Changeset Issues
- Wrong package name: Ensure changeset refers to
taskr-kanban - Invalid format: Check changeset markdown format is correct
- Merge conflicts: Resolve any conflicts in changeset files
📁 File Structure Impact
The CI workflows respect the 3-file packaging system:
- Development: Uses
package.jsonfor dependencies and scripts - Release: Uses
package.publish.jsonfor clean marketplace package - Build: Uses
package.mjsto createvsix-build/for final packaging - Changesets: Automatically manage versions across the system
🌍 Dual Registry Publishing
Your extension will be automatically published to both:
- VS Code Marketplace - For official VS Code users
- Open VSX Registry - For Cursor, Windsurf, VSCodium, Gitpod, Eclipse Theia, and other compatible editors
🎯 Benefits of Changeset Automation
- ✅ Automated versioning: No manual version bumps needed
- ✅ Generated changelogs: Automatic, accurate release notes
- ✅ Semantic versioning: Enforced through changeset types
- ✅ Git tagging: Proper tags for extension releases
- ✅ Conflict prevention: Clear separation of extension vs. main package versions
- ✅ Review process: Version changes are reviewable via PR
- ✅ Rollback capability: Easy to revert if issues arise
This ensures clean, predictable, and fully automated publishing to both registries! 🚀