chore: release 0.7.1 🔥 #12
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-release-assets: | |
| name: Build release asset (${{ matrix.os }}-${{ matrix.arch }}) | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: darwin | |
| arch: arm64 | |
| runner: macos-14 | |
| target: aarch64-apple-darwin | |
| - os: darwin | |
| arch: amd64 | |
| runner: macos-15-intel | |
| target: x86_64-apple-darwin | |
| - os: linux | |
| arch: amd64 | |
| runner: ubuntu-24.04 | |
| target: x86_64-unknown-linux-gnu | |
| - os: linux | |
| arch: arm64 | |
| runner: ubuntu-24.04-arm | |
| target: aarch64-unknown-linux-gnu | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup Rust | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| with: | |
| target: ${{ matrix.target }} | |
| - name: Build archive | |
| env: | |
| OS: ${{ matrix.os }} | |
| ARCH: ${{ matrix.arch }} | |
| TARGET: ${{ matrix.target }} | |
| run: | | |
| mkdir -p "dist/repomop_${OS}_${ARCH}" | |
| cargo build --release --locked --package repomop --target "${TARGET}" | |
| cp "target/${TARGET}/release/repomop" "dist/repomop_${OS}_${ARCH}/repomop" | |
| tar -C "dist/repomop_${OS}_${ARCH}" -czf "dist/repomop_${OS}_${ARCH}.tar.gz" repomop | |
| - name: Upload release archive | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: release_${{ matrix.os }}_${{ matrix.arch }} | |
| path: dist/repomop_${{ matrix.os }}_${{ matrix.arch }}.tar.gz | |
| if-no-files-found: error | |
| publish-release: | |
| name: Publish GitHub Release | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build-release-assets | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Download release archives | |
| uses: actions/download-artifact@v8 | |
| with: | |
| pattern: release_* | |
| path: dist | |
| merge-multiple: true | |
| - name: Generate checksums | |
| run: | | |
| cd dist | |
| sha256sum repomop_*.tar.gz > checksums.txt | |
| - name: Extract release notes from changelog | |
| env: | |
| APP_VERSION: ${{ github.ref_name }} | |
| run: | | |
| VERSION="${APP_VERSION#v}" | |
| awk -v version="${VERSION}" ' | |
| $0 ~ "^## \\[" version "\\]" { in_section=1; next } | |
| in_section && $0 ~ "^## \\[" { exit } | |
| in_section { print } | |
| ' CHANGELOG.md > RELEASE_NOTES.md | |
| if [ ! -s RELEASE_NOTES.md ]; then | |
| echo "Release notes for ${APP_VERSION} were not found in CHANGELOG.md" >&2 | |
| exit 1 | |
| fi | |
| - name: Publish release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ github.ref_name }} | |
| name: ${{ github.ref_name }} | |
| body_path: RELEASE_NOTES.md | |
| overwrite_files: true | |
| files: | | |
| dist/repomop_*.tar.gz | |
| dist/checksums.txt | |
| - name: Checkout tap | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: mishamyrt/homebrew-tap | |
| token: ${{ secrets.HOMEBREW_TAP_TOKEN }} | |
| path: tap | |
| - name: Update formula | |
| env: | |
| TAG: ${{ github.ref_name }} | |
| run: | | |
| BASE="https://github.com/${{ github.repository }}/releases/download/${TAG}" | |
| ARM_URL="${BASE}/repomop_darwin_arm64.tar.gz" | |
| AMD_URL="${BASE}/repomop_darwin_amd64.tar.gz" | |
| ARM_SHA256=$(sha256sum dist/repomop_darwin_arm64.tar.gz | awk '{print $1}') | |
| AMD_SHA256=$(sha256sum dist/repomop_darwin_amd64.tar.gz | awk '{print $1}') | |
| VERSION="${TAG#v}" | |
| cat > tap/Formula/repomop.rb << 'FORMULA' | |
| class Repomop < Formula | |
| desc "Project artifacts cleaner" | |
| homepage "https://github.com/mishamyrt/repomop" | |
| version "VERSION_PLACEHOLDER" | |
| license "MIT" | |
| depends_on :macos | |
| if Hardware::CPU.arm? | |
| url "ARM_URL_PLACEHOLDER" | |
| sha256 "ARM_SHA256_PLACEHOLDER" | |
| else | |
| url "AMD_URL_PLACEHOLDER" | |
| sha256 "AMD_SHA256_PLACEHOLDER" | |
| end | |
| def install | |
| bin.install "repomop" | |
| end | |
| test do | |
| assert_match version.to_s, shell_output("#{bin}/repomop --version") | |
| end | |
| end | |
| FORMULA | |
| sed -i 's/^ //' tap/Formula/repomop.rb | |
| sed -i "s|VERSION_PLACEHOLDER|${VERSION}|" tap/Formula/repomop.rb | |
| sed -i "s|ARM_URL_PLACEHOLDER|${ARM_URL}|" tap/Formula/repomop.rb | |
| sed -i "s|ARM_SHA256_PLACEHOLDER|${ARM_SHA256}|" tap/Formula/repomop.rb | |
| sed -i "s|AMD_URL_PLACEHOLDER|${AMD_URL}|" tap/Formula/repomop.rb | |
| sed -i "s|AMD_SHA256_PLACEHOLDER|${AMD_SHA256}|" tap/Formula/repomop.rb | |
| - name: Commit and push tap update | |
| env: | |
| TAG: ${{ github.ref_name }} | |
| run: | | |
| git -C tap config user.name "github-actions[bot]" | |
| git -C tap config user.email "github-actions[bot]@users.noreply.github.com" | |
| git -C tap add Formula/repomop.rb | |
| if git -C tap diff --cached --quiet; then | |
| echo "Formula is already up to date for ${TAG}" | |
| exit 0 | |
| fi | |
| git -C tap commit -m "chore: update repomop to ${TAG}" | |
| git -C tap push |