This project uses Release Please for automated release management based on Conventional Commits.
📚 Comprehensive Documentation Available
- Release Strategy Guide - Complete release workflows, platform requirements, and emergency procedures
- Deployment Runbook - Step-by-step deployment procedures for all components
- Conventional Commits: Use conventional commit messages for all changes
- Automated PRs: Release Please automatically creates release PRs when new commits are pushed to
main - Version Bumping: Semantic versions are automatically calculated based on commit types
- Automated Deployments: When a release is created:
- Extension is built and submitted to Chrome, Firefox, and Edge stores (requires approval)
- NPM packages (
@wgu-extension/data,@wgu-extension/graphql-client) are published automatically - Firebase Functions are deployed to production (requires approval)
- Firebase Hosting (site) is deployed to production (requires approval)
Use the following format for your commit messages:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
feat:- A new feature (bumps minor version)fix:- A bug fix (bumps patch version)docs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringperf:- Performance improvementstest:- Adding or updating testsbuild:- Changes to build system or dependenciesci:- Changes to CI configurationchore:- Maintenance tasks
Add ! after the type to indicate a breaking change (bumps major version):
feat!: remove deprecated API endpoints
# Feature addition (minor version bump)
git commit -m "feat: add Discord integration to course details panel"
# Bug fix (patch version bump)
git commit -m "fix: resolve course code extraction for WGU format"
# Breaking change (major version bump)
git commit -m "feat!: redesign community panel API"
# Documentation update (no version bump)
git commit -m "docs: update installation instructions"
# Build system change (no version bump)
git commit -m "build: update WXT to latest version"-
Make Changes: Develop your features/fixes on feature branches
-
Create PR: Open a pull request against
mainwith conventional commit messages -
Merge PR: After review, merge the PR to
main -
Automatic Release PR: Release Please will automatically:
- Analyze the new commits
- Calculate the next version based on conventional commits
- Update
CHANGELOG.md - Update
package.jsonversion in all workspaces - Create a release PR
-
Review & Merge: Review the generated release PR and merge it
-
Automatic Release: When the release PR is merged:
- A GitHub release is created with generated release notes
- Extension artifacts are built and attached to the release
- The following automated workflows are triggered (in parallel):
NPM Packages (Fully Automated):
@wgu-extension/datais published to npm@wgu-extension/graphql-clientis published to npm- Skips if version already published
Browser Extension Stores (Requires Approval):
- Approval Gate:
store-submissionenvironment (5-minute wait for reviewers) - After approval, submits to:
- Chrome Web Store (review time: 1-3 days)
- Firefox Add-ons (review time: 1-7 days)
- Microsoft Edge Add-ons (review time: 3-7 days)
- Gracefully skips stores with missing credentials
Firebase Functions (Requires Approval):
- Approval Gate:
production-firebaseenvironment (10-minute wait for reviewers) - After approval, deploys all functions to production
- Runs smoke tests to verify deployment
- Automatically rolls back on verification failure
Firebase Hosting (Requires Approval):
- Approval Gate:
production-firebaseenvironment (10-minute wait for reviewers) - After approval, deploys site to Firebase Hosting
- Runs smoke tests to verify deployment
- Automatically rolls back on verification failure
When a release is created, certain deployments require manual approval via GitHub Environments:
Store Submission Approval:
- Navigate to GitHub Actions
- Find the "Release Please" workflow run
- Click on the
store-submissionjob - Review the extension changes and version
- Click "Review pending deployments"
- Check the
store-submissionenvironment box - Click "Approve and deploy"
Firebase Deployment Approval:
- Follow steps 1-4 above for
deploy-functionsordeploy-hostingjobs - Review the changes being deployed
- Check the
production-firebaseenvironment box - Click "Approve and deploy"
Using GitHub CLI:
# List pending runs
gh run list --workflow=release-please.yml
# Approve specific deployment
gh run approve <RUN_ID>Important Notes:
- Only repository maintainers can approve deployments
- Wait timers are configured (5 min for stores, 10 min for Firebase)
- Auto-approval occurs if no action is taken within the wait period
- For emergency deployments, approve immediately to skip wait timer
For critical hotfixes requiring immediate deployment:
# Skip all approval gates and deploy immediately
gh run approve <RUN_ID>
# Or manually deploy
cd functions && pnpm run deploy --force
firebase deploy --only hosting --forceSee Deployment Runbook for complete emergency procedures.
npm run release# Generate release notes for all stores
node scripts/generate-store-release-notes.js 1.2.3
# Generate for specific store
node scripts/generate-store-release-notes.js 1.2.3 --store=chrome
node scripts/generate-store-release-notes.js 1.2.3 --store=firefox
node scripts/generate-store-release-notes.js 1.2.3 --store=edgeOutput will be saved to .output/release-notes/
The release PR will show you exactly what changes will be included and what the new version will be.
release-please-config.json- Release Please configuration.release-please-manifest.json- Current version trackingCHANGELOG.md- Automatically generated changelog.github/workflows/release-please.yml- Release automation workflow
The following GitHub secrets are required for automated deployments:
NPM_TOKEN- NPM authentication token with publish access to@wgu-extensionscope
CHROME_EXTENSION_ID- Extension ID from Chrome Web StoreCHROME_CLIENT_ID- OAuth client IDCHROME_CLIENT_SECRET- OAuth client secretCHROME_REFRESH_TOKEN- OAuth refresh token
FIREFOX_EXTENSION_ID- Extension UUID from AMOFIREFOX_JWT_ISSUER- API key (JWT issuer)FIREFOX_JWT_SECRET- API secret
EDGE_PRODUCT_ID- Product ID from Partner CenterEDGE_CLIENT_ID- Azure AD client IDEDGE_CLIENT_SECRET- Azure AD client secretEDGE_TENANT_ID- Azure AD tenant ID
FIREBASE_TOKEN- Firebase CI token (generate withfirebase login:ci)FIREBASE_PROJECT_ID- Firebase project ID
Notes:
- Edge submission uses the official edge-addons-cli. The access token URL is constructed from your Azure AD tenant ID.
- Store submissions run under the
store-submissionenvironment for approval protection. - Firebase deployments run under the
production-firebaseenvironment for approval protection. - Missing store credentials will gracefully skip that store without failing the workflow.
You can manually trigger store submissions with the "Publish to Web Stores" workflow. This is useful for hotfixes, re-submissions, or testing.
Inputs:
chrome(boolean): Submit to Chrome Web Storefirefox(boolean): Submit to Firefox Add-onsedge(boolean): Submit to Microsoft Edge Add-onsmode(choice): Build mode (production,preview,development)
Behavior:
- The workflow builds and zips artifacts for Chrome, Firefox, and Edge.
- Each submission step checks whether the necessary secrets are configured; if not, it skips gracefully.
Store submission uses the production environment for additional security. Make sure to configure environment protection rules in your repository settings if needed.