Skip to content

v0.1.18

v0.1.18 #10

Workflow file for this run

name: Post Release
on:
release:
types: [published]
workflow_dispatch: # Allow manual trigger
env:
CARGO_TERM_COLOR: always
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
# Build release binaries for multiple platforms
build-binaries:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
artifact_name: klag-exporter
asset_name: klag-exporter-linux-x86_64
- target: aarch64-unknown-linux-gnu
os: ubuntu-24.04-arm
artifact_name: klag-exporter
asset_name: klag-exporter-linux-aarch64
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.release.tag_name }}
- name: Install dependencies
run: |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list /etc/apt/sources.list.d/azure-cli.list
sudo apt-get update
sudo apt-get install -y cmake build-essential libssl-dev libsasl2-dev zlib1g-dev libzstd-dev liblz4-dev pkg-config libcurl4-openssl-dev
- uses: dtolnay/rust-toolchain@1.93
with:
targets: ${{ matrix.target }}
- name: Rust version
id: rust_version
run: echo "version=$(rustc --version | awk '{print $2}')" >> $GITHUB_OUTPUT
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
key: ${{ runner.os }}-cargo-${{ steps.rust_version.outputs.version }}-${{ matrix.target }}-${{ github.event.release.tag_name }}-${{ hashFiles('**/Cargo.lock') }}
cache-targets: true
cache-on-failure: true
- name: Build
run: cargo build --release --target ${{ matrix.target }}
- name: Package binary
run: |
cd target/${{ matrix.target }}/release
tar czvf ../../../${{ matrix.asset_name }}.tar.gz ${{ matrix.artifact_name }}
cd ../../..
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: ${{ matrix.asset_name }}.tar.gz
# Upload binaries to GitHub Release
upload-binaries:
name: Upload Binaries to Release
needs: build-binaries
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Upload binaries to release
uses: softprops/action-gh-release@v2
with:
files: artifacts/**/*.tar.gz
tag_name: ${{ github.event.release.tag_name }}
make_latest: true
# Build and push Docker image
docker:
name: Build and Push Docker Image
needs: build-binaries
runs-on: ubuntu-22.04
permissions:
contents: write
packages: write
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.PRIVATE_KEY }}
- uses: actions/checkout@v4
with:
token: ${{ steps.app-token.outputs.token }}
ref: ${{ github.event.release.tag_name }}
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare binaries for Docker
run: |
mkdir -p binaries/amd64 binaries/arm64
tar -xzf artifacts/klag-exporter-linux-x86_64/klag-exporter-linux-x86_64.tar.gz -C binaries/amd64
tar -xzf artifacts/klag-exporter-linux-aarch64/klag-exporter-linux-aarch64.tar.gz -C binaries/arm64
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile.release
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
helm-chart:
name: Package and Push Helm Chart
runs-on: ubuntu-22.04
permissions:
contents: write
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.release.tag_name }}
- name: Set up Helm
uses: azure/setup-helm@v4
with:
version: "latest"
- name: Package Helm chart
run: |
helm package ./helm/klag-exporter -d /tmp
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract chart version
id: chart_version
run: |
echo "version=$(grep '^version:' ./helm/klag-exporter/Chart.yaml | awk '{print $2}')" >> $GITHUB_OUTPUT
- name: Push chart to OCI registry
run: |
helm push /tmp/klag-exporter-${{ steps.chart_version.outputs.version }}.tgz oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/helm