Files
osm-maker-vibes/.github/workflows/release.yml
dependabot[bot] da65d09cf5 ci(deps): bump gradle/gradle-build-action from 2 to 3
Bumps [gradle/gradle-build-action](https://github.com/gradle/gradle-build-action) from 2 to 3.
- [Release notes](https://github.com/gradle/gradle-build-action/releases)
- [Commits](https://github.com/gradle/gradle-build-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: gradle/gradle-build-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-30 19:48:22 +00:00

198 lines
6.1 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g., v1.0.0)'
required: true
type: string
env:
GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true
jobs:
validate-release:
name: Validate Release
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine version
id: version
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
else
echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
fi
- name: Validate version format
run: |
VERSION="${{ steps.version.outputs.version }}"
if [[ ! $VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
echo "Invalid version format: $VERSION"
echo "Expected format: v1.0.0 or v1.0.0-beta"
exit 1
fi
build-release:
name: Build Release Artifacts
runs-on: ubuntu-latest
needs: validate-release
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/gradle-build-action@v3
- name: Update version in build.gradle.kts
run: |
VERSION="${{ needs.validate-release.outputs.version }}"
VERSION_NUMBER="${VERSION#v}"
sed -i "s/version = \".*\"/version = \"$VERSION_NUMBER\"/" build.gradle.kts
- name: Build all targets
run: |
./gradlew clean build --stacktrace
./gradlew jvmJar --stacktrace
./gradlew wasmJsBrowserDistribution --stacktrace
- name: Run tests
run: ./gradlew test --stacktrace
- name: Create distribution package
run: |
mkdir -p dist/osm-maker-${{ needs.validate-release.outputs.version }}
# Copy JVM artifacts
cp -r build/libs/* dist/osm-maker-${{ needs.validate-release.outputs.version }}/
# Copy WASM artifacts
mkdir -p dist/osm-maker-${{ needs.validate-release.outputs.version }}/wasm
cp -r build/dist/wasmJs/productionExecutable/* dist/osm-maker-${{ needs.validate-release.outputs.version }}/wasm/
cp wasm_demo.html dist/osm-maker-${{ needs.validate-release.outputs.version }}/wasm/
# Copy configuration files
cp config.json* dist/osm-maker-${{ needs.validate-release.outputs.version }}/
cp README*.md dist/osm-maker-${{ needs.validate-release.outputs.version }}/
# Create archive
cd dist
tar -czf osm-maker-${{ needs.validate-release.outputs.version }}.tar.gz osm-maker-${{ needs.validate-release.outputs.version }}/
zip -r osm-maker-${{ needs.validate-release.outputs.version }}.zip osm-maker-${{ needs.validate-release.outputs.version }}/
- name: Upload release artifacts
uses: actions/upload-artifact@v3
with:
name: release-artifacts
path: |
dist/*.tar.gz
dist/*.zip
generate-changelog:
name: Generate Changelog
runs-on: ubuntu-latest
needs: validate-release
outputs:
changelog: ${{ steps.changelog.outputs.changelog }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate changelog
id: changelog
run: |
VERSION="${{ needs.validate-release.outputs.version }}"
# Get the previous tag
PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
echo "## What's Changed" > CHANGELOG.md
echo "" >> CHANGELOG.md
if [[ -n "$PREVIOUS_TAG" ]]; then
echo "### Commits since $PREVIOUS_TAG:" >> CHANGELOG.md
git log --pretty=format:"- %s (%h)" $PREVIOUS_TAG..HEAD >> CHANGELOG.md
else
echo "### All commits:" >> CHANGELOG.md
git log --pretty=format:"- %s (%h)" >> CHANGELOG.md
fi
echo "" >> CHANGELOG.md
echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/$PREVIOUS_TAG...$VERSION" >> CHANGELOG.md
# Set output for use in release
{
echo 'changelog<<EOF'
cat CHANGELOG.md
echo EOF
} >> $GITHUB_OUTPUT
- name: Upload changelog
uses: actions/upload-artifact@v3
with:
name: changelog
path: CHANGELOG.md
create-release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: [validate-release, build-release, generate-changelog]
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download release artifacts
uses: actions/download-artifact@v3
with:
name: release-artifacts
path: dist/
- name: Create Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ needs.validate-release.outputs.version }}
name: OSM Maker ${{ needs.validate-release.outputs.version }}
body: ${{ needs.generate-changelog.outputs.changelog }}
draft: false
prerelease: ${{ contains(needs.validate-release.outputs.version, '-') }}
files: |
dist/*.tar.gz
dist/*.zip
token: ${{ secrets.GITHUB_TOKEN }}
notify-release:
name: Notify Release
runs-on: ubuntu-latest
needs: [validate-release, create-release]
if: always() && needs.create-release.result == 'success'
steps:
- name: Notify success
run: |
echo "🎉 Successfully released OSM Maker ${{ needs.validate-release.outputs.version }}"
echo "Release URL: https://github.com/${{ github.repository }}/releases/tag/${{ needs.validate-release.outputs.version }}"