From fbc2e5783076d9270d0801b5a724331be8f41142 Mon Sep 17 00:00:00 2001 From: Rahul Guha <19rahul2003@gmail.com> Date: Wed, 15 Oct 2025 18:57:43 +0530 Subject: [PATCH 1/2] add auto release --- .github/workflows/auto-release.yml | 99 ++++++++++++++++++++++++++++++ VERSION | 1 + 2 files changed, 100 insertions(+) create mode 100644 .github/workflows/auto-release.yml create mode 100644 VERSION diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml new file mode 100644 index 0000000..52ace73 --- /dev/null +++ b/.github/workflows/auto-release.yml @@ -0,0 +1,99 @@ +name: Auto Release on Release Branch + +on: + pull_request: + types: [closed] + branches: + - release + +permissions: + contents: write + +jobs: + auto-release: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Zig + uses: goto-bus-stop/setup-zig@v2 + with: + version: 0.14.0 + + - name: Read VERSION file + id: get_version + run: | + VERSION=$(cat VERSION) + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "tag=v$VERSION" >> $GITHUB_OUTPUT + + - name: Check if tag exists + id: check_tag + run: | + if git rev-parse "v${{ steps.get_version.outputs.version }}" >/dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - name: Run tests + if: steps.check_tag.outputs.exists == 'false' + run: zig build test + + - name: Build library + if: steps.check_tag.outputs.exists == 'false' + run: zig build + + - name: Update build.zig.zon version + if: steps.check_tag.outputs.exists == 'false' + run: | + VERSION="${{ steps.get_version.outputs.version }}" + sed -i "s/\.version = \".*\"/\.version = \"$VERSION\"/" build.zig.zon + + - name: Generate changelog + if: steps.check_tag.outputs.exists == 'false' + id: changelog + run: | + PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") + if [ -z "$PREVIOUS_TAG" ]; then + CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges) + else + CHANGELOG=$(git log ${PREVIOUS_TAG}..HEAD --pretty=format:"- %s (%h)" --no-merges) + fi + echo "changelog<> $GITHUB_OUTPUT + echo "$CHANGELOG" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Commit version update + if: steps.check_tag.outputs.exists == 'false' + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add build.zig.zon + git diff --staged --quiet || git commit -m "chore: bump version to ${{ steps.get_version.outputs.version }}" + + - name: Create and push tag + if: steps.check_tag.outputs.exists == 'false' + run: | + git tag -a "v${{ steps.get_version.outputs.version }}" -m "Release v${{ steps.get_version.outputs.version }}" + git push origin "v${{ steps.get_version.outputs.version }}" + + - name: Create GitHub Release + if: steps.check_tag.outputs.exists == 'false' + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ steps.get_version.outputs.version }} + release_name: Release v${{ steps.get_version.outputs.version }} + body: | + ## Changes in v${{ steps.get_version.outputs.version }} + + ${{ steps.changelog.outputs.changelog }} + draft: false + prerelease: false diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..8a9ecc2 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.1 \ No newline at end of file From ddfec3746d2460c577ff6e156bf37f95c0f28c1d Mon Sep 17 00:00:00 2001 From: Rahul Guha <19rahul2003@gmail.com> Date: Wed, 15 Oct 2025 19:17:33 +0530 Subject: [PATCH 2/2] add more info --- .github/workflows/auto-release.yml | 113 +++++++++++++++++++++++------ 1 file changed, 91 insertions(+), 22 deletions(-) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index 52ace73..70c8d62 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -53,47 +53,116 @@ jobs: if: steps.check_tag.outputs.exists == 'false' run: | VERSION="${{ steps.get_version.outputs.version }}" - sed -i "s/\.version = \".*\"/\.version = \"$VERSION\"/" build.zig.zon + sed -i "s/\.version = \"[^\"]*\"/\.version = \"$VERSION\"/" build.zig.zon - name: Generate changelog if: steps.check_tag.outputs.exists == 'false' id: changelog run: | - PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") - if [ -z "$PREVIOUS_TAG" ]; then - CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges) + VERSION="${{ steps.get_version.outputs.version }}" + + # Get previous tag + PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + + if [ -z "$PREV_TAG" ]; then + echo "## Initial Release" > CHANGELOG.md + echo "" >> CHANGELOG.md + echo "First release of zig-snappy - A Zig implementation of Snappy compression." >> CHANGELOG.md + echo "" >> CHANGELOG.md + echo "### Features" >> CHANGELOG.md + echo "- Snappy compression implementation" >> CHANGELOG.md + echo "- Snappy decompression implementation" >> CHANGELOG.md + echo "- CRC32C checksum support" >> CHANGELOG.md + echo "- Comprehensive test suite" >> CHANGELOG.md else - CHANGELOG=$(git log ${PREVIOUS_TAG}..HEAD --pretty=format:"- %s (%h)" --no-merges) + echo "## Changes since $PREV_TAG" > CHANGELOG.md + echo "" >> CHANGELOG.md + git log "$PREV_TAG"..HEAD --pretty=format:"- %s (%h)" >> CHANGELOG.md fi - echo "changelog<> $GITHUB_OUTPUT - echo "$CHANGELOG" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT + + cat CHANGELOG.md - name: Commit version update if: steps.check_tag.outputs.exists == 'false' run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" git add build.zig.zon git diff --staged --quiet || git commit -m "chore: bump version to ${{ steps.get_version.outputs.version }}" - - name: Create and push tag + - name: Push version update + if: steps.check_tag.outputs.exists == 'false' + run: | + git push origin release + + - name: Create Git tag if: steps.check_tag.outputs.exists == 'false' run: | - git tag -a "v${{ steps.get_version.outputs.version }}" -m "Release v${{ steps.get_version.outputs.version }}" - git push origin "v${{ steps.get_version.outputs.version }}" + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a "${{ steps.get_version.outputs.tag }}" -m "Release ${{ steps.get_version.outputs.tag }}" + git push origin "${{ steps.get_version.outputs.tag }}" - name: Create GitHub Release if: steps.check_tag.outputs.exists == 'false' - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: softprops/action-gh-release@v2 with: - tag_name: v${{ steps.get_version.outputs.version }} - release_name: Release v${{ steps.get_version.outputs.version }} - body: | - ## Changes in v${{ steps.get_version.outputs.version }} - - ${{ steps.changelog.outputs.changelog }} + tag_name: ${{ steps.get_version.outputs.tag }} + name: Release ${{ steps.get_version.outputs.tag }} + body_path: CHANGELOG.md draft: false prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Calculate tarball hash + if: steps.check_tag.outputs.exists == 'false' + id: tarball_hash + run: | + VERSION="${{ steps.get_version.outputs.version }}" + TARBALL_URL="https://github.com/${{ github.repository }}/archive/v${VERSION}.tar.gz" + + # Download and calculate hash + curl -L "$TARBALL_URL" -o release.tar.gz + HASH=$(zig fetch release.tar.gz 2>&1 | grep -o '12[0-9a-f]*' || echo "") + + if [ -z "$HASH" ]; then + echo "Could not calculate hash automatically" + echo "Users can get the hash by running:" + echo " zig fetch --save $TARBALL_URL" + else + echo "hash=$HASH" >> $GITHUB_OUTPUT + echo "Tarball hash: $HASH" + fi + + - name: Post release information + if: steps.check_tag.outputs.exists == 'false' + run: | + echo "==========================================================================" + echo "Release ${{ steps.get_version.outputs.tag }} created successfully!" + echo "==========================================================================" + echo "" + echo "To use this release in your project's build.zig.zon:" + echo "" + echo ".dependencies = .{" + echo " .snappy = .{" + echo " .url = \"https://github.com/${{ github.repository }}/archive/${{ steps.get_version.outputs.tag }}.tar.gz\"," + echo " .hash = \"${{ steps.tarball_hash.outputs.hash }}\"," + echo " }," + echo "}," + echo "" + echo "==========================================================================" + + - name: Skip release (tag exists) + if: steps.check_tag.outputs.exists == 'true' + run: | + echo "==========================================================================" + echo "Skipping release - tag ${{ steps.get_version.outputs.tag }} already exists" + echo "==========================================================================" + echo "" + echo "To create a new release:" + echo "1. Update the VERSION file with a new version number" + echo "2. Commit the change" + echo "3. Create and merge a PR to the release branch" + echo "" + echo "=========================================================================="