mirror of
https://github.com/mue/mue.git
synced 2026-07-12 10:46:12 +02:00
* feat: add professional three-branch release workflow automation (#1129) (#1130) - Add version-bump workflow for semantic versioning across all files - Add beta-release workflow for automated pre-release testing - Add production-release workflow with manual approval gates - Add hotfix-release workflow for emergency patches - Create comprehensive CONTRIBUTING.md with workflow guide - Create detailed RELEASE_PROCESS.md for maintainers - Add PR template with release checklists - Update CODEOWNERS to protect workflow files - Update README with contribution links - Remove /docs from .gitignore to allow documentation This implements a dev beta main branching strategy with: - Automated version management across 6 files - Changelog generation from conventional commits - GitHub Releases with build artifacts - Environment-based approvals for production - Back-merge support for hotfixes * feat: new default quotes experience, improve added page * Sync/workflow fixes to beta (#1132) * feat: add professional three-branch release workflow automation (#1129) - Add version-bump workflow for semantic versioning across all files - Add beta-release workflow for automated pre-release testing - Add production-release workflow with manual approval gates - Add hotfix-release workflow for emergency patches - Create comprehensive CONTRIBUTING.md with workflow guide - Create detailed RELEASE_PROCESS.md for maintainers - Add PR template with release checklists - Update CODEOWNERS to protect workflow files - Update README with contribution links - Remove /docs from .gitignore to allow documentation This implements a dev beta main branching strategy with: - Automated version management across 6 files - Changelog generation from conventional commits - GitHub Releases with build artifacts - Environment-based approvals for production - Back-merge support for hotfixes * fix(workflows): prevent beta release for non-beta versions * Fix/beta workflow version check (#1131) * fix(workflows): prevent beta release for non-beta versions * fix(workflows): address copilot PR review feedback - Support iterative beta versions (7.6.0-beta.1 -> 7.6.0-beta.2) - Remove tag trigger from beta workflow to prevent premature releases - Fix tag format in docs/summaries to include 'v' prefix - Clarify deployment approval wording --------- Signed-off-by: Alex Sparkes <alexsparkes@gmail.com> * feat: replace mui with new style * feat: improve time formatting in Clock component with padded digits * fix: change Checkbox component from label to div for better semantics * fix: change Switch component from label to div for better semantics * feat: add smooth animation to reset functionality in Slider component * feat: enhance accessibility and styling for form components including Checkbox, Dropdown, Radio, Slider, and Text * feat: enhance WeatherOptions component with improved layout and auto location reset functionality * feat: update Slider and Dropdown components with improved layout and z-index adjustments * feat: add reset functionality to Dropdown component with toast notification * feat: update Dropdown component styles for improved layout and structure * feat: update languageSettings component with increased padding for better spacing * feat: bump version to 7.6.0 across all manifests and documentation * Dev (#1134) * feat: add professional three-branch release workflow automation (#1129) - Add version-bump workflow for semantic versioning across all files - Add beta-release workflow for automated pre-release testing - Add production-release workflow with manual approval gates - Add hotfix-release workflow for emergency patches - Create comprehensive CONTRIBUTING.md with workflow guide - Create detailed RELEASE_PROCESS.md for maintainers - Add PR template with release checklists - Update CODEOWNERS to protect workflow files - Update README with contribution links - Remove /docs from .gitignore to allow documentation This implements a dev beta main branching strategy with: - Automated version management across 6 files - Changelog generation from conventional commits - GitHub Releases with build artifacts - Environment-based approvals for production - Back-merge support for hotfixes * feat: new default quotes experience, improve added page * Fix/beta workflow version check (#1131) * fix(workflows): prevent beta release for non-beta versions * fix(workflows): address copilot PR review feedback - Support iterative beta versions (7.6.0-beta.1 -> 7.6.0-beta.2) - Remove tag trigger from beta workflow to prevent premature releases - Fix tag format in docs/summaries to include 'v' prefix - Clarify deployment approval wording * feat: replace mui with new style * feat: improve time formatting in Clock component with padded digits * fix: change Checkbox component from label to div for better semantics * fix: change Switch component from label to div for better semantics * feat: add smooth animation to reset functionality in Slider component * feat: enhance accessibility and styling for form components including Checkbox, Dropdown, Radio, Slider, and Text * feat: enhance WeatherOptions component with improved layout and auto location reset functionality * feat: update Slider and Dropdown components with improved layout and z-index adjustments * feat: add reset functionality to Dropdown component with toast notification * feat: update Dropdown component styles for improved layout and structure * feat: update languageSettings component with increased padding for better spacing * feat: bump version to 7.6.0 across all manifests and documentation --------- Signed-off-by: Alex Sparkes <alexsparkes@gmail.com> Co-authored-by: David Ralph <me@davidcralph.co.uk> * font: replace montserrat with inter * cleanup: remove unused code from addons and marketplace * fix(greeting/events): event text box styling * fix(quote/buttons): improve state management and event handling * feat(background): implement custom background loading and improve state management * feat: enhance image management features - Added new localization strings for image management, including upload and storage information. - Refactored custom background database functions to support metadata and backward compatibility. - Introduced a new FolderTaggingModal component for organizing images into folders. - Created utility functions for image metadata extraction, including dimensions, blur hash generation, and file size calculation. - Implemented functions to delete multiple backgrounds and update background metadata. * Add new localization strings and improve image metadata utility functions - Updated localization files for multiple languages (Hungarian, Indonesian, Japanese, Lithuanian, Latvian, Dutch, Norwegian, Persian, Portuguese, Brazilian Portuguese, Russian, Slovenian, Swedish, Tamil, Turkish, Ukrainian, Vietnamese, Simplified Chinese, Traditional Chinese) to include new strings for image management features such as "Delete Selected", "Uploading", "Tag Images", and storage information. - Enhanced the `getDataUrlSize` and `formatBytes` functions in `imageMetadata.js` for better readability and maintainability by adding braces for conditional statements. * fix(background/custom): prevent flashing during uploads * feat(storage): implement dynamic storage quota estimation and request persistence * feat(modal): enhance close button styling and theming support * fix(Custom): remove unnecessary characters from loading state * feat(Dropdown): implement dropdown closing animation and portal rendering * fix(QuoteOptions): ensure authorDetails is set to true for all users during migration * refactor(Items): remove unused imports and hex color conversion logic * fix: add blurhash dependency for image metadata encoding --------- Signed-off-by: Alex Sparkes <alexsparkes@gmail.com> Co-authored-by: David Ralph <me@davidcralph.co.uk>
188 lines
7.6 KiB
YAML
188 lines
7.6 KiB
YAML
name: Production Release
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
types:
|
|
- closed
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
# Only run if PR was merged (not just closed)
|
|
check-merge:
|
|
if: github.event.pull_request.merged == true && github.event.pull_request.head.ref == 'beta'
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
should_release: ${{ steps.check.outputs.should_release }}
|
|
steps:
|
|
- name: Check if this is a beta to main merge
|
|
id: check
|
|
run: |
|
|
echo "should_release=true" >> $GITHUB_OUTPUT
|
|
echo "✅ This is a beta → main merge, proceeding with production release" >> $GITHUB_STEP_SUMMARY
|
|
|
|
build-and-release:
|
|
needs: check-merge
|
|
if: needs.check-merge.outputs.should_release == 'true'
|
|
runs-on: ubuntu-latest
|
|
environment: production # Requires manual approval from maintainers
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: main
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Bun
|
|
uses: oven-sh/setup-bun@v2
|
|
with:
|
|
bun-version: '1.3.1'
|
|
|
|
- name: Install dependencies
|
|
run: bun install
|
|
|
|
- name: Build extension
|
|
run: bun run build
|
|
env:
|
|
NODE_ENV: production
|
|
|
|
- name: Get version from package.json
|
|
id: version
|
|
run: |
|
|
VERSION=$(node -p "require('./package.json').version")
|
|
# Remove any pre-release suffix for production
|
|
STABLE_VERSION=$(echo $VERSION | sed 's/-.*$//')
|
|
echo "version=$STABLE_VERSION" >> $GITHUB_OUTPUT
|
|
echo "full_version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "Building production version: $STABLE_VERSION"
|
|
|
|
- name: Generate production changelog
|
|
id: changelog
|
|
run: |
|
|
# Get the latest production (non-beta) tag
|
|
PREVIOUS_TAG=$(git tag -l 'v*' --sort=-v:refname | grep -v 'beta\|alpha\|rc' | head -n 1 || echo "")
|
|
|
|
if [ -z "$PREVIOUS_TAG" ]; then
|
|
echo "No previous production tag found, using all commits"
|
|
COMMITS=$(git log --pretty=format:"- %s (%h)" main)
|
|
else
|
|
echo "Generating changelog from $PREVIOUS_TAG to main"
|
|
COMMITS=$(git log --pretty=format:"- %s (%h)" ${PREVIOUS_TAG}..main)
|
|
fi
|
|
|
|
# Categorize commits
|
|
FEATURES=$(echo "$COMMITS" | grep -i "^- feat" || echo "")
|
|
FIXES=$(echo "$COMMITS" | grep -i "^- fix" || echo "")
|
|
PERFORMANCE=$(echo "$COMMITS" | grep -i "^- perf" || echo "")
|
|
BREAKING=$(echo "$COMMITS" | grep -i "BREAKING CHANGE" || echo "")
|
|
|
|
{
|
|
echo "changelog<<EOF"
|
|
if [ -n "$BREAKING" ]; then
|
|
echo "### ⚠️ Breaking Changes"
|
|
echo "$BREAKING"
|
|
echo ""
|
|
fi
|
|
if [ -n "$FEATURES" ]; then
|
|
echo "### ✨ New Features"
|
|
echo "$FEATURES"
|
|
echo ""
|
|
fi
|
|
if [ -n "$FIXES" ]; then
|
|
echo "### 🐛 Bug Fixes"
|
|
echo "$FIXES"
|
|
echo ""
|
|
fi
|
|
if [ -n "$PERFORMANCE" ]; then
|
|
echo "### ⚡ Performance Improvements"
|
|
echo "$PERFORMANCE"
|
|
fi
|
|
echo "EOF"
|
|
} >> $GITHUB_OUTPUT
|
|
|
|
- name: Check if tag exists
|
|
id: check_tag
|
|
run: |
|
|
if git rev-parse "v${{ steps.version.outputs.version }}" >/dev/null 2>&1; then
|
|
echo "exists=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "exists=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Create production tag
|
|
if: steps.check_tag.outputs.exists == 'false'
|
|
run: |
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
git tag -a "v${{ steps.version.outputs.version }}" -m "Release v${{ steps.version.outputs.version }}"
|
|
git push origin "v${{ steps.version.outputs.version }}"
|
|
|
|
- name: Create GitHub Release
|
|
run: |
|
|
RELEASE_NOTES=$(cat <<EOF
|
|
## 🎉 Mue v${{ steps.version.outputs.version }}
|
|
|
|
${{ steps.changelog.outputs.changelog }}
|
|
|
|
### 📦 Installation
|
|
|
|
**Browser Extensions:**
|
|
- **Chrome**: [Chrome Web Store](https://chromewebstore.google.com/detail/mue/bngmbednanpcfochchhgbkookpiaiaid)
|
|
- **Edge**: [Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/mue/aepnglgjfokepefimhbnibfjekidhmja)
|
|
- **Firefox**: [Firefox Add-ons](https://addons.mozilla.org/en-GB/firefox/addon/mue/)
|
|
|
|
**Manual Installation:**
|
|
- Download the appropriate ZIP file below
|
|
- Chrome/Edge: Load unpacked extension from extracted folder
|
|
- Firefox: Install from about:debugging → Load Temporary Add-on
|
|
|
|
### 🔗 Links
|
|
- **Demo**: [demo.muetab.com](https://demo.muetab.com)
|
|
- **Changelog**: [muetab.com/blog/changelog](https://muetab.com/blog/changelog)
|
|
- **Documentation**: [github.com/mue/mue](https://github.com/mue/mue)
|
|
|
|
---
|
|
|
|
### 📝 Build Information
|
|
- **Version**: ${{ steps.version.outputs.version }}
|
|
- **Build Date**: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
|
- **Commit**: ${{ github.sha }}
|
|
EOF
|
|
)
|
|
|
|
gh release create "v${{ steps.version.outputs.version }}" \
|
|
"build/chrome-${{ steps.version.outputs.version }}.zip" \
|
|
"build/firefox-${{ steps.version.outputs.version }}.zip" \
|
|
--title "Mue v${{ steps.version.outputs.version }}" \
|
|
--notes "$RELEASE_NOTES" \
|
|
--latest
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
|
|
- name: Output success summary
|
|
run: |
|
|
echo "## 🚀 Production Release Published!" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "**Version**: v${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "**Release URL**: https://github.com/${{ github.repository }}/releases/tag/v${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "### 📦 Build Artifacts" >> $GITHUB_STEP_SUMMARY
|
|
echo "- Chrome/Edge: \`chrome-${{ steps.version.outputs.version }}.zip\`" >> $GITHUB_STEP_SUMMARY
|
|
echo "- Firefox: \`firefox-${{ steps.version.outputs.version }}.zip\`" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "### ⚠️ Manual Steps Required" >> $GITHUB_STEP_SUMMARY
|
|
echo "1. Go to [GitHub Actions](https://github.com/${{ github.repository }}/actions/workflows/submit.yml)" >> $GITHUB_STEP_SUMMARY
|
|
echo "2. Click 'Run workflow'" >> $GITHUB_STEP_SUMMARY
|
|
echo "3. Enter tag: \`${{ steps.version.outputs.version }}\`" >> $GITHUB_STEP_SUMMARY
|
|
echo "4. Click 'Run workflow' to submit to Chrome/Firefox/Edge stores" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "### 📢 Post-Release Checklist" >> $GITHUB_STEP_SUMMARY
|
|
echo "- [ ] Submit to browser stores (see manual steps above)" >> $GITHUB_STEP_SUMMARY
|
|
echo "- [ ] Update [muetab.com/blog/changelog](https://muetab.com/blog/changelog)" >> $GITHUB_STEP_SUMMARY
|
|
echo "- [ ] Announce release on Discord/social media" >> $GITHUB_STEP_SUMMARY
|
|
echo "- [ ] Monitor issue tracker for bug reports" >> $GITHUB_STEP_SUMMARY
|
|
echo "- [ ] Merge \`main\` back to \`beta\` and \`dev\` to sync version" >> $GITHUB_STEP_SUMMARY
|