|  | 
| 42 | 42 |             echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | 
| 43 | 43 |           fi | 
| 44 | 44 |           echo "RELEASE_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV | 
|  | 45 | +      - name: Generate Changelog | 
|  | 46 | +        id: changelog | 
|  | 47 | +        run: | | 
|  | 48 | +          CURRENT_VERSION_TAG="${{ env.VERSION }}" | 
|  | 49 | +          echo "Generating changelog for version $CURRENT_VERSION_TAG" | 
|  | 50 | +
 | 
|  | 51 | +          git fetch --tags --force | 
|  | 52 | +
 | 
|  | 53 | +          # Get the commit hash for the current version tag | 
|  | 54 | +          CURRENT_TAG_COMMIT=$(git rev-parse "$CURRENT_VERSION_TAG^{commit}") | 
|  | 55 | +
 | 
|  | 56 | +          PREVIOUS_TAG_NAME=$(git describe --tags --abbrev=0 "${CURRENT_TAG_COMMIT}^" 2>/dev/null || echo "") | 
|  | 57 | +
 | 
|  | 58 | +          CHANGELOG_RANGE="" | 
|  | 59 | +          if [ -n "$PREVIOUS_TAG_NAME" ] && [ "$PREVIOUS_TAG_NAME" != "$CURRENT_VERSION_TAG" ]; then | 
|  | 60 | +            echo "Previous tag found: $PREVIOUS_TAG_NAME. Current tag: $CURRENT_VERSION_TAG" | 
|  | 61 | +            CHANGELOG_RANGE="${PREVIOUS_TAG_NAME}..${CURRENT_VERSION_TAG}" | 
|  | 62 | +          else | 
|  | 63 | +            if [ "$PREVIOUS_TAG_NAME" == "$CURRENT_VERSION_TAG" ]; then | 
|  | 64 | +              echo "Warning: Previous tag detection resolved to the current tag ('$CURRENT_VERSION_TAG'). This can happen in specific tagging scenarios." | 
|  | 65 | +            fi | 
|  | 66 | +            echo "No distinct previous tag found, or it's the first release. Generating changelog for all commits leading to $CURRENT_VERSION_TAG." | 
|  | 67 | +            # This will list all commits that are ancestors of CURRENT_VERSION_TAG. | 
|  | 68 | +            # For the first tag, it lists all commits from the beginning. | 
|  | 69 | +            CHANGELOG_RANGE="$CURRENT_VERSION_TAG" | 
|  | 70 | +          fi | 
|  | 71 | +
 | 
|  | 72 | +          echo "Using commit range for git log: $CHANGELOG_RANGE" | 
|  | 73 | +          # Format: - Commit subject (short_hash) | 
|  | 74 | +          GENERATED_CHANGELOG=$(git log --pretty="format:- %s (%h)" $CHANGELOG_RANGE) | 
|  | 75 | +
 | 
|  | 76 | +          if [ -z "$GENERATED_CHANGELOG" ]; then | 
|  | 77 | +            echo "Changelog is empty. Setting a default message." | 
|  | 78 | +            GENERATED_CHANGELOG="- Initial release or no new commits identified for this version." | 
|  | 79 | +          fi | 
|  | 80 | +
 | 
|  | 81 | +          echo "--- Generated Changelog ---" | 
|  | 82 | +          echo "$GENERATED_CHANGELOG" | 
|  | 83 | +          echo "--------------------------" | 
|  | 84 | +
 | 
|  | 85 | +          echo "CHANGELOG_CONTENT<<__EOF__" >> $GITHUB_ENV | 
|  | 86 | +          echo "$GENERATED_CHANGELOG" >> $GITHUB_ENV | 
|  | 87 | +          echo "__EOF__" >> $GITHUB_ENV | 
| 45 | 88 |       - name: Setup Nix | 
| 46 | 89 |         uses: cachix/install-nix-action@v31 | 
| 47 | 90 |         with: | 
|  | 
| 68 | 111 | 
 | 
| 69 | 112 |             Release date: ${{ env.RELEASE_DATE }} | 
| 70 | 113 | 
 | 
|  | 114 | +            ## Changelog | 
|  | 115 | +            ${{env.CHANGELOG_CONTENT}} | 
|  | 116 | +
 | 
| 71 | 117 |             ## 📦 Support Platforms | 
| 72 | 118 |             - Linux (x86_64) | 
| 73 | 119 |             - macOS (x86_64, arm64) | 
|  | 
0 commit comments