Files
accessibility-widgets/.github/workflows/release.yml
T

182 lines
7.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Release Accessibility Widget
on:
push:
branches:
- main
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Full history for changelog generation
- name: Get current version from package.json
id: get_version
run: |
version=$(grep -oP '"version":\s*"\K[0-9.]+' package.json)
echo "Current version: $version"
echo "current_version=$version" >> $GITHUB_OUTPUT
echo "CURRENT_VERSION=$version" >> $GITHUB_ENV
- name: Determine if release is needed
id: should_release
run: |
commit_msg="${{ github.event.head_commit.message }}"
echo "Commit message: $commit_msg"
if [[ "$commit_msg" =~ release ]]; then
echo "should_release=true" >> $GITHUB_OUTPUT
echo "SHOULD_RELEASE=true" >> $GITHUB_ENV
else
echo "should_release=false" >> $GITHUB_OUTPUT
echo "SHOULD_RELEASE=false" >> $GITHUB_ENV
echo "️ Commit does not contain 'release' keyword - skipping release"
fi
- name: Calculate new version
id: new_version
if: steps.should_release.outputs.should_release == 'true'
run: |
current="${{ steps.get_version.outputs.current_version }}"
IFS='.' read -ra parts <<< "$current"
major="${parts[0]:-2}"
minor="${parts[1]:-0}"
# Increment minor version (2.0 -> 2.1 -> 2.2, etc.)
minor=$((minor + 1))
new_version="$major.$minor"
echo "New version will be: $new_version"
echo "new_version=$new_version" >> $GITHUB_OUTPUT
echo "NEW_VERSION=$new_version" >> $GITHUB_ENV
- name: Check if version already exists
id: check_tag
if: steps.should_release.outputs.should_release == 'true'
run: |
new_version="${{ steps.new_version.outputs.new_version }}"
if git rev-parse "v$new_version" >/dev/null 2>&1; then
echo "Tag v$new_version already exists!"
echo "tag_exists=true" >> $GITHUB_OUTPUT
else
echo "Tag v$new_version does not exist, proceeding..."
echo "tag_exists=false" >> $GITHUB_OUTPUT
fi
- name: Update version in package.json
if: steps.should_release.outputs.should_release == 'true' && steps.check_tag.outputs.tag_exists == 'false'
run: |
current="${{ steps.get_version.outputs.current_version }}"
new="${{ steps.new_version.outputs.new_version }}"
# Update package.json version
sed -i "s/\"version\": \"$current\"/\"version\": \"$new\"/" package.json
echo "Updated version from $current to $new in package.json"
- name: Generate changelog
id: changelog
if: steps.should_release.outputs.should_release == 'true' && steps.check_tag.outputs.tag_exists == 'false'
run: |
# Get the latest tag or use initial commit if no tags exist
latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)
echo "## What's Changed" > CHANGELOG.md
echo "" >> CHANGELOG.md
# Get commits since last tag
git log $latest_tag..HEAD --pretty=format:"- %s (%h)" --no-merges >> CHANGELOG.md
echo "" >> CHANGELOG.md
echo "" >> CHANGELOG.md
echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/$latest_tag...v${{ steps.new_version.outputs.new_version }}" >> CHANGELOG.md
# Output for release body
cat CHANGELOG.md
# Save changelog for release
{
echo 'changelog<<EOF'
cat CHANGELOG.md
echo EOF
} >> $GITHUB_OUTPUT
- name: Commit version bump
if: steps.should_release.outputs.should_release == 'true' && steps.check_tag.outputs.tag_exists == 'false'
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add package.json
git commit -m "chore: bump version to ${{ steps.new_version.outputs.new_version }}"
git push
- name: Create release package
if: steps.should_release.outputs.should_release == 'true' && steps.check_tag.outputs.tag_exists == 'false'
run: |
mkdir -p accessibility-widgets
cp widget.js accessibility-widgets/
cp README.md accessibility-widgets/
cp LICENSE accessibility-widgets/
cp package.json accessibility-widgets/
zip -r accessibility-widgets-v${{ steps.new_version.outputs.new_version }}.zip accessibility-widgets
rm -rf accessibility-widgets
# Verify zip was created
ls -lh accessibility-widgets-v${{ steps.new_version.outputs.new_version }}.zip
- name: Create GitHub Release
if: steps.should_release.outputs.should_release == 'true' && steps.check_tag.outputs.tag_exists == 'false'
uses: softprops/action-gh-release@v1
with:
files: accessibility-widgets-v${{ steps.new_version.outputs.new_version }}.zip
tag_name: "v${{ steps.new_version.outputs.new_version }}"
name: "Accessibility Widgets v${{ steps.new_version.outputs.new_version }}"
body: |
# 🎉 Accessibility Widgets v${{ steps.new_version.outputs.new_version }}
A comprehensive, lightweight accessibility widget that enhances web accessibility for all users.
## 📦 Installation
### CDN (Recommended)
```html
<script src="https://cdn.jsdelivr.net/gh/sinanisler/accessibility-widgets@v${{ steps.new_version.outputs.new_version }}/widget.js"></script>
```
### NPM
```bash
npm install accessibility-widgets@${{ steps.new_version.outputs.new_version }}
```
${{ steps.changelog.outputs.changelog }}
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Summary
if: steps.should_release.outputs.should_release == 'true'
run: |
if [ "${{ steps.check_tag.outputs.tag_exists }}" = "true" ]; then
echo "⚠️ Release skipped - version v${{ steps.new_version.outputs.new_version }} already exists"
else
echo "✅ Successfully created release v${{ steps.new_version.outputs.new_version }}"
echo "📦 Widget package attached to release"
echo "🔄 Available via CDN and npm"
fi
- name: Skip Release Info
if: steps.should_release.outputs.should_release == 'false'
run: |
echo "️ No release triggered. To create a release, include 'release' in your commit message."
echo "Example: git commit -m 'feat: new feature release'"