Skip to content

bump version

bump version #5

Workflow file for this run

name: Release fault Binaries
permissions:
contents: write
on:
push:
branches:
- release
paths:
- 'Cargo.toml'
- '.github/workflows/release.yaml'
jobs:
extract-version:
runs-on: ubuntu-24.04
outputs:
version: ${{ steps.extract.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Create fault release
id: extract
run: |
v=$(sed -n 's/^version\s*=\s*"\([^"]*\)".*/\1/p' Cargo.toml)
echo "version=$v" >> "$GITHUB_OUTPUT"
create-the-release:
needs:
- extract-version
runs-on: ubuntu-24.04
outputs:
rel_tag: ${{ steps.create.outputs.reltag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Create fault release
id: create
run: |
rel_url=$(gh release create ${FAULT_VERSION} -d --notes-file CHANGELOG.md --latest=false --generate-notes)
tag="${rel_url##*/}"
echo "reltag=$tag" >> "$GITHUB_OUTPUT"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FAULT_VERSION: ${{needs.extract-version.outputs.version}}
tag-release:
needs:
- extract-version
- build-and-upload-docker-images
- build-and-upload-docker-ebpf-images
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Release -> tag ${{needs.extract-version.outputs.version}}
env:
VERSION: ${{needs.extract-version.outputs.version}}
run: |
git config user.name 'github-actions[bot]'
git config user.email 'github-actions[bot]@users.noreply.github.com'
git tag -f -a ${VERSION} -F CHANGELOG.md
git push -f origin ${VERSION}
promote-the-release:
needs:
- extract-version
- publish-crates
- publish-ebpf-crates
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Promote fault release
run: |
gh release edit "$VERSION" --latest=true --draft=false --tag="$VERSION"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{needs.extract-version.outputs.version}}
build-and-upload-assets:
needs:
- extract-version
- create-the-release
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-apple-darwin
os: macos-latest
artifact_name: fault
asset_name: fault-cli
- target: x86_64-apple-darwin
os: macos-latest
artifact_name: fault
asset_name: fault-cli
- target: x86_64-unknown-linux-gnu
os: ubuntu-24.04
artifact_name: fault
asset_name: fault-cli
- target: x86_64-unknown-linux-musl
os: ubuntu-24.04
artifact_name: fault
asset_name: fault-cli
- target: aarch64-unknown-linux-musl
os: ubuntu-24.04
artifact_name: fault
asset_name: fault-cli
- target: aarch64-unknown-linux-gnu
os: ubuntu-24.04
artifact_name: fault
asset_name: fault-cli
- target: x86_64-pc-windows-msvc
os: windows-latest
artifact_name: fault.exe
asset_name: fault-cli
name: Build workspace on ${{ matrix.os }} / ${{ matrix.target }}
runs-on: ${{ matrix.os }}
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: |
rustup target add ${{ matrix.target }}
rustup toolchain install nightly --component rust-src -t ${{ matrix.target }}
rustup update nightly
rustup override set nightly
- uses: Swatinem/rust-cache@v2
with:
prefix-key: fault
shared-key: ${{ github.job }}-${{ matrix.target }}
workspaces: |
fault
- name: Install musl dependencies (Linux)
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
run: |
sudo apt update
sudo apt install -y musl-dev musl-tools
- name: Install aarch64 dependencies (Linux)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt update
sudo apt install -y g++-aarch64-linux-gnu gcc-aarch64-linux-gnu lld
- name: Install gRPC build dependencies (Linux)
if: matrix.os == 'ubuntu-24.04'
run: |
sudo apt update
sudo apt install -y protobuf-compiler libssl-dev
- name: Install gRPC build dependencies (Windows)
if: matrix.os == 'windows-latest'
run: |
choco install protoc --pre -y
- name: Install gRPC build dependencies (MacOSX)
if: matrix.os == 'macos-latest'
run: |
brew install protobuf
- name: Install zig
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
uses: mlugg/setup-zig@v2
- name: Install cargo zigbuild
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
run: cargo install --locked cargo-zigbuild
- name: Build Linux/MacOSX (shared)
if: matrix.os != 'windows-latest' && matrix.target != 'x86_64-unknown-linux-musl' && matrix.target != 'aarch64-unknown-linux-musl'
run: cargo +nightly build --release --features agent --target ${{ matrix.target }}
working-directory: ./fault-cli
- name: Build Windows (shared)
if: matrix.os == 'windows-latest'
run: cargo +nightly build --release --target ${{ matrix.target }}
working-directory: ./fault-cli
- name: Build (static)
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
run: cargo +nightly zigbuild --release --target ${{ matrix.target }}
working-directory: ./fault-cli
- name: Upload binaries to release
if: matrix.os != 'windows-latest'
uses: svenstaro/upload-release-action@v2
with:
promote: false
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.target }}/release/${{ matrix.artifact_name }}
asset_name: ${{ matrix.asset_name }}-${{needs.extract-version.outputs.version}}-${{ matrix.target }}
tag: ${{needs.create-the-release.outputs.rel_tag}}
- name: Upload binaries to release
if: matrix.os == 'windows-latest'
uses: svenstaro/upload-release-action@v2
env:
RELEASE_TAG: ${{needs.create-the-release.outputs.rel_tag}}
with:
promote: false
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.target }}/release/${{ matrix.artifact_name }}
asset_name: ${{ matrix.asset_name }}-${{needs.extract-version.outputs.version}}-${{ matrix.target }}.exe
tag: ${{needs.create-the-release.outputs.rel_tag}}
- name: Prepare assets (x86_64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-musl'
run: |
mkdir -p ${TARGET_DIR}
cp target/${{ matrix.target }}/release/${{ matrix.artifact_name }} ${TARGET_DIR}
env:
TARGET_DIR: fault-cli-${{needs.extract-version.outputs.version}}-amd64
- name: Prepare assets (aarch64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'aarch64-unknown-linux-musl'
run: |
mkdir -p ${TARGET_DIR}
cp target/${{ matrix.target }}/release/${{ matrix.artifact_name }} ${TARGET_DIR}
env:
TARGET_DIR: fault-cli-${{needs.extract-version.outputs.version}}-arm64
- name: Archive fault CLI (x86_64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-musl'
uses: actions/upload-artifact@v4
with:
name: fault-cli-${{needs.extract-version.outputs.version}}-amd64
path: fault-cli-${{needs.extract-version.outputs.version}}-amd64
- name: Archive fault CLI (aarch64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'aarch64-unknown-linux-musl'
uses: actions/upload-artifact@v4
with:
name: fault-cli-${{needs.extract-version.outputs.version}}-arm64
path: fault-cli-${{needs.extract-version.outputs.version}}-arm64
build-and-upload-ebpf-assets:
needs:
- extract-version
- create-the-release
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-24.04
artifact_name: fault
- target: aarch64-unknown-linux-gnu
os: ubuntu-24.04
artifact_name: fault
- target: x86_64-unknown-linux-musl
os: ubuntu-24.04
artifact_name: fault
- target: aarch64-unknown-linux-musl
os: ubuntu-24.04
artifact_name: fault
name: Build ebpf workspace on ${{ matrix.os }} / ${{ matrix.target }}
runs-on: ${{ matrix.os }}
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: |
rustup target add ${{ matrix.target }}
rustup toolchain install nightly --component rust-src -t ${{ matrix.target }}
rustup update nightly
rustup override set nightly
- uses: Swatinem/rust-cache@v2
with:
prefix-key: fault
shared-key: ${{ github.job }}-${{ matrix.target }}
workspaces: |
fault
- name: Install aarch64 dependencies (Linux)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt install -y gcc-aarch64-linux-gnu lld
- name: Install gRPC build dependencies (Linux)
if: matrix.os == 'ubuntu-24.04'
run: |
sudo apt-get update
sudo apt install -y protobuf-compiler libssl-dev
- name: Install zig
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
uses: mlugg/setup-zig@v2
- name: Install cargo zigbuild
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
run: cargo install --locked cargo-zigbuild
- name: Build (shared)
if: matrix.target != 'x86_64-unknown-linux-musl' && matrix.target != 'aarch64-unknown-linux-musl'
run: |
cargo install bpf-linker --git https://github.com/aya-rs/bpf-linker.git
cargo +nightly build --release --features stealth --target ${{ matrix.target }}
cargo +nightly build \
--release \
-p fault-ebpf-programs \
--target=bpfel-unknown-none \
-Z build-std=core
working-directory: ./fault-cli
- name: Build (static)
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'
run: |
cargo install bpf-linker --git https://github.com/aya-rs/bpf-linker.git
cargo +nightly zigbuild --release --features stealth --target ${{ matrix.target }}
cargo +nightly build \
--release \
-p fault-ebpf-programs \
--target=bpfel-unknown-none \
-Z build-std=core
working-directory: ./fault-cli
- name: Upload fault CLI with ebpf support to release
uses: svenstaro/upload-release-action@v2
with:
promote: false
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.target }}/release/${{ matrix.artifact_name }}
asset_name: fault-cli-ebpf-${{needs.extract-version.outputs.version}}-${{ matrix.target }}
tag: ${{needs.create-the-release.outputs.rel_tag}}
- name: Upload ebpf programs to release
if: matrix.os == 'ubuntu-24.04'
uses: svenstaro/upload-release-action@v2
with:
promote: false
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/bpfel-unknown-none/release/fault-ebpf
asset_name: fault-ebpf-programs-${{needs.extract-version.outputs.version}}-${{ matrix.target }}
tag: ${{needs.create-the-release.outputs.rel_tag}}
- name: Prepare assets (x86_64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-musl'
run: |
mkdir -p ${TARGET_DIR}
cp target/${{ matrix.target }}/release/${{ matrix.artifact_name }} ${TARGET_DIR}
cp target/bpfel-unknown-none/release/fault-ebpf ${TARGET_DIR}
env:
TARGET_DIR: fault-ebpf-${{needs.extract-version.outputs.version}}-amd64
- name: Prepare assets (aarch64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'aarch64-unknown-linux-musl'
run: |
mkdir -p ${TARGET_DIR}
cp target/${{ matrix.target }}/release/${{ matrix.artifact_name }} ${TARGET_DIR}
cp target/bpfel-unknown-none/release/fault-ebpf ${TARGET_DIR}
env:
TARGET_DIR: fault-ebpf-${{needs.extract-version.outputs.version}}-arm64
- name: Archive fault CLI (x86_64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-musl'
uses: actions/upload-artifact@v4
with:
name: fault-ebpf-${{needs.extract-version.outputs.version}}-amd64
path: fault-ebpf-${{needs.extract-version.outputs.version}}-amd64
- name: Archive fault CLI (aarch64)
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'aarch64-unknown-linux-musl'
uses: actions/upload-artifact@v4
with:
name: fault-ebpf-${{needs.extract-version.outputs.version}}-arm64
path: fault-ebpf-${{needs.extract-version.outputs.version}}-arm64
build-and-upload-docker-images:
needs:
- extract-version
- build-and-upload-assets
runs-on: ubuntu-24.04
permissions:
contents: read
packages: write
attestations: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/fault-project/fault-cli
tags: |
type=semver,pattern={{version}},value=${{needs.extract-version.outputs.version}}
- name: Download fault built assets
uses: actions/download-artifact@v4
with:
path: fault-assets
pattern: fault-cli-${{needs.extract-version.outputs.version}}-*
- name: Display structure of downloaded files
run: ls -R fault-assets
- name: Build and push fault CLI
uses: docker/build-push-action@v6
with:
context: "."
file: "./deploy/docker/Dockerfile_from_release"
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
sbom: true
github-token: ${{ secrets.GITHUB_TOKEN }}
platforms: linux/amd64, linux/arm64
build-args: |
CLI_PREFIX_PATH=fault-assets/fault-cli-${{needs.extract-version.outputs.version}}
build-and-upload-docker-ebpf-images:
needs:
- extract-version
- build-and-upload-ebpf-assets
runs-on: ubuntu-24.04
permissions:
contents: read
packages: write
attestations: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/fault-project/fault-cli
flavor: |
latest=false
suffix=-stealth
tags: |
type=semver,pattern={{version}},value=${{needs.extract-version.outputs.version}}
- name: Download fault built assets
uses: actions/download-artifact@v4
with:
path: fault-assets
pattern: fault-ebpf-${{needs.extract-version.outputs.version}}-*
- name: Display structure of downloaded files
run: ls -R fault-assets
- name: Build and push fault CLI
uses: docker/build-push-action@v6
with:
context: "."
file: "./deploy/docker/Dockerfile_from_release_ebpf"
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
provenance: true
sbom: true
github-token: ${{ secrets.GITHUB_TOKEN }}
platforms: linux/amd64, linux/arm64
build-args: |
CLI_PREFIX_PATH=fault-assets/fault-ebpf-${{needs.extract-version.outputs.version}}
EBPF_PREFIX_PATH=fault-assets/fault-ebpf-${{needs.extract-version.outputs.version}}
publish-crates:
environment: release
needs:
- tag-release
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-24.04
artifact_name: fault
asset_name: fault-cli
name: Publish workspace on ${{ matrix.os }} / ${{ matrix.target }}
runs-on: ${{ matrix.os }}
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: |
rustup target add ${{ matrix.target }}
rustup toolchain install nightly --component rust-src -t ${{ matrix.target }}
rustup update nightly
rustup override set nightly
- uses: Swatinem/rust-cache@v2
with:
prefix-key: fault
shared-key: ${{ github.job }}-${{ matrix.target }}
workspaces: |
fault
- name: Publish fault CLI
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-gnu'
working-directory: ./fault-cli
run: |
cargo publish --allow-dirty --no-verify --package fault-cli --token ${CRATES_TOKEN}
env:
CRATES_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
publish-ebpf-crates:
environment: release
needs:
- tag-release
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-24.04
name: Publish ebpf workspace on ${{ matrix.os }} / ${{ matrix.target }}
runs-on: ${{ matrix.os }}
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: |
rustup target add ${{ matrix.target }}
rustup toolchain install nightly --component rust-src -t ${{ matrix.target }}
rustup update nightly
rustup override set nightly
- uses: Swatinem/rust-cache@v2
with:
prefix-key: fault
shared-key: ${{ github.job }}-${{ matrix.target }}
workspaces: |
fault
- name: Publish fault ebpf-programs
if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-gnu'
working-directory: ./fault-ebpf-programs
run: |
cargo publish --allow-dirty --no-verify --package fault-ebpf-programs --token ${CRATES_TOKEN}
env:
CRATES_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}