This guide covers the complete process for deploying the Aurelia DevTools extension to the Chrome Web Store using automated GitHub Actions.
Our deployment system provides:
- ✅ Automated builds triggered by GitHub releases
- ✅ Version synchronization between package.json and manifest.json
- ✅ Quality gates (linting, testing) before deployment
- ✅ Secure credential management using GitHub secrets
- ✅ Manual deployment option for urgent releases
- ✅ Release preparation workflow for team collaboration
- One-time setup: Configure Chrome Web Store API credentials (Setup Guide)
- Prepare release: Run
./scripts/prepare-release.shor use the GitHub workflow - Create release: Tag and create a GitHub release
- Automatic deployment: GitHub Actions handles the rest
Trigger: Creating a GitHub release with a semver tag (e.g., v1.2.3)
# .github/workflows/chrome-store-deploy.yml
# Automatically triggered on GitHub releasesProcess:
- Extract version from release tag
- Update package.json and manifest.json versions
- Run quality checks (lint, test)
- Build extension
- Upload to Chrome Web Store
- Publish for review
Trigger: Manual workflow dispatch
Use cases:
- Hotfix releases
- Pre-release testing
- Emergency deployments
# Can be triggered manually with custom version
workflow_dispatch:
inputs:
version:
description: 'Version to deploy (e.g., 1.0.0)'
required: trueTrigger: Manual workflow dispatch
Purpose: Team collaboration and review process
# Creates a PR with version updates and changelog
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g., 1.0.0)'
required: true# Interactive release preparation
./scripts/prepare-release.sh
# Follow the prompts to:
# 1. Choose new version number
# 2. Run all quality checks
# 3. Build and verify the extension
# 4. Preview changelog
# 5. Get next steps instructions# 1. Update versions
npm version 1.2.3 --no-git-tag-version
# 2. Update manifest.json version
node -e "
const fs = require('fs');
const manifest = JSON.parse(fs.readFileSync('manifest.json', 'utf8'));
manifest.version = '1.2.3';
fs.writeFileSync('manifest.json', JSON.stringify(manifest, null, 2) + '\n');
"
# 3. Run quality checks
npm run lint
npm test
# 4. Build extension
npm run build
# 5. Verify build
ls -la dist/
cat dist/manifest.json | grep version
# 6. Create release
git add .
git commit -m "chore: prepare release v1.2.3"
git tag v1.2.3
git push origin main --tags- Google Cloud Console account
- Chrome Web Store developer account
- Admin access to the GitHub repository
- Follow the detailed setup guide
- Run the credential generation script:
./scripts/generate-refresh-token.sh
- Add GitHub secrets:
CHROME_EXTENSION_IDCHROME_CLIENT_IDCHROME_CLIENT_SECRETCHROME_REFRESH_TOKEN
| Secret | Description | Example |
|---|---|---|
CHROME_EXTENSION_ID |
Extension ID from Chrome Web Store | abcdefghijklmnopqrstuvwxyzabcdef |
CHROME_CLIENT_ID |
OAuth Client ID | 123456789.apps.googleusercontent.com |
CHROME_CLIENT_SECRET |
OAuth Client Secret | GOCSPX-abc123def456... |
CHROME_REFRESH_TOKEN |
Generated refresh token | 1//abc123def456... |
We follow semantic versioning:
- MAJOR (1.0.0): Breaking changes
- MINOR (0.1.0): New features, backward compatible
- PATCH (0.0.1): Bug fixes, backward compatible
The deployment system automatically ensures:
package.jsonversion matchesmanifest.jsonversion- Build artifacts contain the correct version
- Git tags match the deployed version
# Current: 1.2.0
# Bug fix: 1.2.1
# New feature: 1.3.0
# Breaking change: 2.0.0All deployments must pass:
- ESLint: TypeScript/JavaScript code quality
- HTMLHint: HTML template validation
- Jest: Unit test coverage
- Build verification: Successful dist/ generation
- Manifest validation: Chrome extension requirements
# Required files in dist/:
├── manifest.json # Extension manifest
├── sidebar.html # Sidebar pane entry
├── build/
│ ├── sidebar.js # Sidebar application
│ ├── background.js # Service worker
│ ├── contentscript.js # Content script
│ └── detector.js # Aurelia detector
├── devtools/ # DevTools page
├── images/ # Extension icons
└── popups/ # Extension popups- Automated upload: GitHub Actions uploads the ZIP file
- Auto-publish: Extension is submitted for review
- Review timeline: Typically 1-3 business days
- Publication: Automatic upon approval
Ensure compliance with:
- Chrome Web Store Developer Policies
- Manifest V3 requirements
- Privacy policy requirements for developer tools
- ❌ Overly broad permissions: Only request necessary permissions
- ❌ Missing privacy policy: Required for all extensions
- ❌ Insufficient functionality: Extension must provide clear value
- ❌ Manifest errors: Validate manifest.json format
Monitor deployment status:
- Actions tab: Check workflow runs
- Release page: Verify ZIP file attachment
- Chrome Web Store: Check extension status
# Symptoms: 401 Unauthorized errors
# Solutions:
# 1. Verify all secrets are set correctly
# 2. Regenerate refresh token if expired
# 3. Check OAuth client configuration# Symptoms: Missing files in dist/
# Solutions:
# 1. Check Vite configuration
# 2. Verify all dependencies are installed
# 3. Review build logs for errors# Symptoms: Version already exists error
# Solutions:
# 1. Ensure version was incremented
# 2. Check manifest.json vs package.json sync
# 3. Verify no duplicate releasesIf automated deployment fails:
- Download build artifacts from GitHub release
- Chrome Web Store Developer Dashboard:
- Go to your extension
- Click "Upload new package"
- Select the ZIP file
- Submit for review
- ✅ Never commit credentials to the repository
- ✅ Use GitHub secrets for all sensitive data
- ✅ Rotate credentials regularly (quarterly)
- ✅ Monitor API usage in Google Cloud Console
- ✅ Use least-privilege OAuth scopes
- ✅ Limit repository access to trusted team members
- ✅ Review deployment logs for unauthorized changes
- ✅ Enable 2FA on all Google accounts
- ✅ Audit secret access regularly
- Feature development: Work on feature branches
- Pull request: Code review and CI checks
- Merge to main: Triggers development builds
- Release preparation: Use preparation workflow
- Release creation: Team lead creates GitHub release
- Automatic deployment: GitHub Actions handles deployment
- Patch releases: As needed for critical bugs
- Minor releases: Monthly for new features
- Major releases: Quarterly for significant changes
- Release announcements: Notify team via Slack/email
- Breaking changes: Document in CHANGELOG.md
- Rollback procedures: Document emergency procedures
- Chrome Web Store: Developer Support
- GitHub Actions: Community Forum
- Aurelia: Discord Community