name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
tag:
description: 'Tag to release'
required: true
default: 'v0.2.0'
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
create-release:
name: Create Release
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
release_id: ${{ steps.create_release.outputs.id }}
steps:
- name: Get tag
id: tag
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "TAG=${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
else
echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.tag.outputs.TAG }}
release_name: rskiller ${{ steps.tag.outputs.TAG }}
body: |
## What's Changed
### Features
- Multi-threaded parallel processing for improved performance
- Enhanced configuration system with TOML/JSON support
- Comprehensive cleanup and scanning capabilities
### Installation
#### Quick Install (Unix/Linux/macOS)
```bash
curl -sSL https://raw.githubusercontent.com/NakaSato/rskiller/main/install.sh | bash
```
#### Quick Install (Windows PowerShell)
```powershell
iwr -useb https://raw.githubusercontent.com/NakaSato/rskiller/main/install.ps1 | iex
```
#### Package Managers
```bash
# Cargo
cargo install rskiller
# Homebrew (macOS/Linux)
brew install rskiller
# Chocolatey (Windows)
choco install rskiller
# Scoop (Windows)
scoop install rskiller
```
#### Manual Installation
Download the appropriate binary for your platform below, extract it, and place it in your PATH.
### Checksums
See assets below for SHA256 checksums.
**Full Changelog**: https://github.com/NakaSato/rskiller/compare/v0.1.0...${{ steps.tag.outputs.TAG }}
draft: false
prerelease: false
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
needs: create-release
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
name: rskiller-linux-x64.tar.gz
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
name: rskiller-linux-arm64.tar.gz
- target: x86_64-apple-darwin
os: macos-latest
name: rskiller-macos-x64.tar.gz
- target: aarch64-apple-darwin
os: macos-latest
name: rskiller-macos-arm64.tar.gz
- target: x86_64-pc-windows-msvc
os: windows-latest
name: rskiller-windows-x64.zip
ext: .exe
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install cross-compilation tools
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Configure cross-compilation
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
echo '[target.aarch64-unknown-linux-gnu]' >> ~/.cargo/config.toml
echo 'linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config.toml
- name: Cache cargo dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-${{ matrix.target }}-
${{ runner.os }}-cargo-
- name: Build binary
run: |
cargo build --release --target ${{ matrix.target }}
- name: Prepare binary (Unix)
if: matrix.os != 'windows-latest'
run: |
mkdir -p release
cp target/${{ matrix.target }}/release/rskiller release/
cd release
tar -czf ../${{ matrix.name }} rskiller
cd ..
sha256sum ${{ matrix.name }} > ${{ matrix.name }}.sha256
- name: Prepare binary (Windows)
if: matrix.os == 'windows-latest'
run: |
mkdir release
cp target/${{ matrix.target }}/release/rskiller.exe release/
cd release
7z a ../${{ matrix.name }} rskiller.exe
cd ..
certutil -hashfile ${{ matrix.name }} SHA256 > ${{ matrix.name }}.sha256
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ./${{ matrix.name }}
asset_name: ${{ matrix.name }}
asset_content_type: application/octet-stream
- name: Upload Checksum
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ./${{ matrix.name }}.sha256
asset_name: ${{ matrix.name }}.sha256
asset_content_type: text/plain
create-packages:
name: Create Packages
runs-on: ubuntu-latest
needs: [create-release, build]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download Linux x64 binary
uses: actions/download-artifact@v3
with:
name: rskiller-linux-x64
path: ./binaries/
- name: Create Debian package
run: |
# Create package structure
mkdir -p debian-pkg/DEBIAN
mkdir -p debian-pkg/usr/bin
mkdir -p debian-pkg/usr/share/doc/rskiller
mkdir -p debian-pkg/usr/share/man/man1
# Download and extract binary
wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/rskiller-linux-x64.tar.gz
tar -xzf rskiller-linux-x64.tar.gz
cp rskiller debian-pkg/usr/bin/
chmod +x debian-pkg/usr/bin/rskiller
# Create control file
cat > debian-pkg/DEBIAN/control << EOF
Package: rskiller
Version: ${{ github.ref_name }}
Section: utils
Priority: optional
Architecture: amd64
Maintainer: NakaSato <nakasato@example.com>
Description: Find and clean Rust project build artifacts and caches
rskiller is a command-line tool for finding and cleaning Rust project
build artifacts, target directories, and other cache files to free up
disk space. It features parallel processing, interactive mode, and
comprehensive configuration options.
Homepage: https://github.com/NakaSato/rskiller
EOF
# Create package
dpkg-deb --build debian-pkg
mv debian-pkg.deb rskiller_${{ github.ref_name }}_amd64.deb
- name: Create RPM spec and package
run: |
# This would require more setup for RPM building
# For now, we'll create a simple tarball that can be converted to RPM
mkdir -p rpm-pkg/usr/bin
cp rskiller rpm-pkg/usr/bin/
cd rpm-pkg
tar -czf ../rskiller-${{ github.ref_name }}-1.x86_64.tar.gz usr/
cd ..
- name: Upload Debian Package
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ./rskiller_${{ github.ref_name }}_amd64.deb
asset_name: rskiller_${{ github.ref_name }}_amd64.deb
asset_content_type: application/vnd.debian.binary-package
update-homebrew:
name: Update Homebrew Formula
runs-on: ubuntu-latest
needs: [create-release, build]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Update Homebrew formula
uses: mislav/bump-homebrew-formula-action@v2
with:
formula-name: rskiller
homebrew-tap: NakaSato/homebrew-tap
base-branch: main
download-url: https://github.com/NakaSato/rskiller/releases/download/${{ github.ref_name }}/rskiller-macos-x64.tar.gz
commit-message: |
rskiller ${{ github.ref_name }}
Created by https://github.com/mislav/bump-homebrew-formula-action
env:
COMMITTER_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
publish-crate:
name: Publish to crates.io
runs-on: ubuntu-latest
needs: create-release
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Publish to crates.io
run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
continue-on-error: true