Add build linux job in CI #97
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 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: Cache Rust target | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo- | |
- name: Lint | |
run: | | |
nix develop --command cargo fmt --check | |
nix develop --command cargo clippy | |
- name: Test | |
run: | | |
nix develop --command cargo test | |
build-nix: | |
name: Build Nix | |
runs-on: ubuntu-latest | |
needs: test | |
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 derivations | |
run: | | |
nix build .#fastside | |
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: 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 |