name: Create Release on: push: tags: - 'v*.*.*' jobs: release: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get version from tag id: get_version run: | VERSION=${GITHUB_REF#refs/tags/v} echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Version: $VERSION" - name: Generate changelog id: changelog run: | # Get previous tag PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "") if [ -z "$PREVIOUS_TAG" ]; then PREVIOUS_TAG=$(git rev-list --max-parents=0 HEAD) fi echo "Generating changelog from $PREVIOUS_TAG to ${GITHUB_REF#refs/tags/}" # Generate changelog CHANGELOG=$(git log --pretty=format:"- %s (%h)" $PREVIOUS_TAG..HEAD | head -20) if [ -z "$CHANGELOG" ]; then CHANGELOG="No changes since last release" fi # Escape newlines for GitHub output CHANGELOG="${CHANGELOG//'%'/'%25'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" echo "changelog<> $GITHUB_OUTPUT echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create GitHub release uses: softprops/action-gh-release@v2 with: name: "Release ${{ steps.get_version.outputs.version }}" body: | ## What's Changed ${{ steps.changelog.outputs.changelog }} ## Downloads - Backend binary: Download from CI artifacts - Web app: Automatically deployed - Mobile app: Download APK from CI artifacts draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} update-version: runs-on: ubuntu-latest needs: release steps: - name: Checkout code uses: actions/checkout@v4 - name: Update version in pubspec files run: | VERSION=${GITHUB_REF#refs/tags/v} echo "Updating version to $VERSION" # Update main app version sed -i "s/version: .*/version: $VERSION+$(date +%s)/" mnemo_cards/pubspec.yaml # Update backend version sed -i "s/version: .*/version: $VERSION+$(date +%s)/" mnemo_cards_backend/pubspec.yaml # Update web version sed -i "s/version: .*/version: $VERSION+$(date +%s)/" mnemo_cards_web_v2/pubspec.yaml - name: Commit version update run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add -A git commit -m "chore: bump version to ${{ github.ref_name }}" || echo "No changes to commit" - name: Push version update run: | git push origin main || git push origin master