diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..5e5cf10 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,58 @@ +name: Create Release + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Generate changelog + id: changelog + run: | + # Get the previous tag + PREVIOUS_TAG=$(git tag --sort=-version:refname | sed -n '2p') + CURRENT_TAG=${GITHUB_REF#refs/tags/} + + echo "## Changes" > 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..$CURRENT_TAG >> changelog.md + else + echo "### All commits:" >> changelog.md + git log --pretty=format:"- %s (%h)" $CURRENT_TAG >> changelog.md + fi + + echo "" >> changelog.md + echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/$PREVIOUS_TAG...$CURRENT_TAG" >> changelog.md + + # Set output for use in release step + { + echo 'CHANGELOG<> $GITHUB_OUTPUT + + - name: Create Release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref_name }} + release_name: Release ${{ github.ref_name }} + body: ${{ steps.changelog.outputs.CHANGELOG }} + draft: false + prerelease: ${{ contains(github.ref_name, '-') }} \ No newline at end of file