name: Create Release on: push: tags: ['v*'] permissions: contents: write jobs: release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get previous tag id: prev_tag run: | # Get all tags sorted by version, find the one before current CURRENT_TAG=${GITHUB_REF#refs/tags/} PREV_TAG=$(git tag --sort=-v:refname | grep -A1 "^${CURRENT_TAG}$" | tail -1) # If no previous tag found (first release), use empty if [ "$PREV_TAG" = "$CURRENT_TAG" ]; then PREV_TAG="" fi echo "previous_tag=$PREV_TAG" >> $GITHUB_OUTPUT echo "Current tag: $CURRENT_TAG, Previous tag: $PREV_TAG" - name: Generate changelog id: changelog run: | PREV_TAG="${{ steps.prev_tag.outputs.previous_tag }}" if [ -z "$PREV_TAG" ]; then # First release - get all commits CHANGES=$(git log --pretty=format:"- %s" HEAD) else # Get commits since last tag CHANGES=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD) fi # Write to file for multiline support echo "$CHANGES" > changelog.txt - name: Create Release uses: softprops/action-gh-release@v1 with: body_path: changelog.txt generate_release_notes: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}