name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
env:
CARGO_TERM_COLOR: always
jobs:
build:
name: Build ${{ matrix.target }}
runs-on: self-hosted
strategy:
matrix:
include:
- target: x86_64-unknown-linux-musl
asset_name: folk-builder-linux-x86_64
- target: aarch64-unknown-linux-musl
asset_name: folk-builder-linux-aarch64
- target: x86_64-apple-darwin
asset_name: folk-builder-darwin-x86_64
- target: aarch64-apple-darwin
asset_name: folk-builder-darwin-aarch64
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@1.85
with:
targets: ${{ matrix.target }}
- name: Install cross
run: cargo install cross --git https://github.com/cross-rs/cross
- name: Cache cargo
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
- name: Build
run: cross build --release --target ${{ matrix.target }} -p folk-builder
- name: Package
run: |
VERSION=${GITHUB_REF_NAME}
BINARY=target/${{ matrix.target }}/release/folk-builder
ARCHIVE=${{ matrix.asset_name }}-${VERSION}.tar.gz
tar -czf "${ARCHIVE}" -C "$(dirname $BINARY)" "$(basename $BINARY)"
echo "ARCHIVE=${ARCHIVE}" >> $GITHUB_ENV
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: ${{ env.ARCHIVE }}
release:
name: Create GitHub Release
needs: build
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist/
- name: Create release
uses: softprops/action-gh-release@v2
with:
files: dist/**/*.tar.gz
generate_release_notes: true
body: |
## folk-builder ${{ github.ref_name }}
Download for your platform and place in `$PATH`.
### Linux x86_64
```bash
curl -L https://github.com/Folk-Project/folk-builder/releases/download/${{ github.ref_name }}/folk-builder-linux-x86_64-${{ github.ref_name }}.tar.gz | tar xz
sudo mv folk-builder /usr/local/bin/
```
### Linux ARM64
```bash
curl -L https://github.com/Folk-Project/folk-builder/releases/download/${{ github.ref_name }}/folk-builder-linux-aarch64-${{ github.ref_name }}.tar.gz | tar xz
sudo mv folk-builder /usr/local/bin/
```
### Usage
```bash
folk-builder build --config folk.build.toml
```
See [folk-spec](https://github.com/Folk-Project/folk-spec) for `folk.build.toml` reference.
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}