Skip to content

aarch64 Nix builds in CI #102

aarch64 Nix builds in CI

aarch64 Nix builds in CI #102

Workflow file for this run

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-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