aarch64 Nix builds in CI #104
Workflow file for this run
This file contains 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: CI | |
on: | |
push: | |
branches: [master] | |
pull_request: | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
env: | |
nix_path: nixpkgs=channel:nixos-24.05 | |
jobs: | |
test: | |
name: Test code | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Cache Rust | |
uses: Swatinem/rust-cache@v2 | |
with: | |
prefix-key: "v0-rust-test" | |
- name: Check formatting | |
run: cargo fmt --check | |
- name: Clippy | |
run: cargo clippy | |
- name: Tests | |
run: cargo test | |
build-nix: | |
name: Build Nix | |
runs-on: ubuntu-latest | |
needs: test | |
strategy: | |
matrix: | |
derivation: [fastside, fastside-static] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Nix | |
uses: cachix/install-nix-action@v25 | |
with: | |
nix_path: "${{ env.nix_path }}" | |
- name: Setup cachix | |
uses: cachix/cachix-action@v14 | |
with: | |
name: cofob | |
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" | |
- name: Build derivation ${{ matrix.derivation }} | |
run: | | |
nix build .#${{ matrix.derivation }} | |
build-nix-aarch64: | |
name: Build Nix aarch64 | |
runs-on: ubuntu-latest | |
needs: test | |
strategy: | |
matrix: | |
derivation: [fastside, fastside-static] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: aarch64 | |
- name: Setup Nix | |
uses: cachix/install-nix-action@v25 | |
with: | |
nix_path: "${{ env.nix_path }}" | |
- name: Setup cachix | |
uses: cachix/cachix-action@v14 | |
with: | |
name: cofob | |
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" | |
- name: Get aarch64 nix | |
run: | | |
nix build --system aarch64-linux nixpkgs#nix | |
cp result/bin/nix nix | |
- name: Build derivation ${{ matrix.derivation }} | |
run: | | |
qemu-aarch64 ./nix --system aarch64-linux build .#${{ matrix.derivation }} | |
build-linux: | |
name: Build Linux | |
runs-on: ubuntu-latest | |
needs: test | |
strategy: | |
matrix: | |
target: [x86_64-unknown-linux-gnu, x86_64-unknown-linux-musl] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Cache Rust | |
uses: Swatinem/rust-cache@v2 | |
with: | |
prefix-key: "v0-rust-${{ matrix.target }}" | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y musl-tools | |
- name: Build ${{ matrix.target }} | |
run: cargo build --release --bins --target ${{ matrix.target }} | |
- name: Collect artifacts | |
run: | | |
mkdir dist-${{ matrix.target }} | |
cp target/${{ matrix.target }}/release/fastside dist-${{ matrix.target }}/ | |
cp target/${{ matrix.target }}/release/fastside-actualizer dist-${{ matrix.target }}/ | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: fastside-${{ matrix.target }} | |
path: dist-${{ matrix.target }} | |
build-linux-aarch64: | |
name: Build Linux (aarch64-unknown-linux-musl) | |
runs-on: ubuntu-latest | |
needs: test | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Pull Docker image | |
run: docker pull messense/rust-musl-cross:aarch64-musl | |
- name: Cache Rust | |
uses: Swatinem/rust-cache@v2 | |
with: | |
prefix-key: "v0-rust-aarch64-unknown-linux-musl" | |
- name: Build aarch64 | |
run: | | |
docker run \ | |
--rm \ | |
-v "$(pwd)":/home/rust/src \ | |
messense/rust-musl-cross:aarch64-musl \ | |
cargo build --color always --release --bins --target aarch64-unknown-linux-musl | |
- name: Collect artifacts | |
run: | | |
mkdir dist-aarch64-unknown-linux-musl | |
cp target/aarch64-unknown-linux-musl/release/fastside dist-aarch64-unknown-linux-musl/ | |
cp target/aarch64-unknown-linux-musl/release/fastside-actualizer dist-aarch64-unknown-linux-musl/ | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: fastside-aarch64-unknown-linux-musl | |
path: dist-aarch64-unknown-linux-musl | |
test-services: | |
name: Test services | |
runs-on: ubuntu-latest | |
needs: build-nix | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Path filter | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
services: | |
- 'services.json' | |
- name: Setup Nix | |
if: steps.filter.outputs.services == 'true' | |
uses: cachix/install-nix-action@v25 | |
with: | |
nix_path: "${{ env.nix_path }}" | |
- name: Setup cachix | |
if: steps.filter.outputs.services == 'true' | |
uses: cachix/cachix-action@v14 | |
with: | |
name: cofob | |
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" | |
- name: Run tests | |
if: steps.filter.outputs.services == 'true' | |
run: nix run . -- validate | |
docker: | |
name: Build Docker container | |
runs-on: ubuntu-latest | |
needs: build-nix | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Nix | |
uses: cachix/install-nix-action@v25 | |
with: | |
nix_path: "${{ env.nix_path }}" | |
- name: Setup cachix | |
uses: cachix/cachix-action@v14 | |
with: | |
name: cofob | |
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Lowercase repository name | |
id: repo | |
uses: ASzc/change-string-case-action@v6 | |
with: | |
string: ${{ github.repository }} | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
# list of Docker images to use as base name for tags | |
images: | | |
ghcr.io/${{ steps.repo.outputs.lowercase }} | |
# generate Docker tags based on the following events/attributes | |
tags: | | |
type=schedule | |
type=ref,event=pr | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}} | |
type=sha | |
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'master') }} | |
- name: Docker meta | |
id: meta2 | |
uses: docker/metadata-action@v5 | |
with: | |
# list of Docker images to use as base name for tags | |
images: | | |
ghcr.io/${{ steps.repo.outputs.lowercase }}/baked | |
# generate Docker tags based on the following events/attributes | |
tags: | | |
type=schedule | |
type=ref,event=pr | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}} | |
type=sha | |
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'master') }} | |
- name: Build remote | |
run: | | |
nix build .#fastside-docker | |
docker load < result | |
- name: Push to registry | |
run: | | |
tags="${{ steps.meta.outputs.tags }}" | |
for tag in $tags; do | |
docker tag fastside $tag | |
docker push $tag | |
done | |
- name: Build baked | |
run: | | |
nix build .#fastside-docker-baked-services | |
docker load < result | |
- name: Push to registry | |
run: | | |
tags="${{ steps.meta2.outputs.tags }}" | |
for tag in $tags; do | |
docker tag fastside $tag | |
docker push $tag | |
done |