Init work on cloudflare version #141
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 | |
strategy: | |
matrix: | |
target: [x86_64, aarch64] | |
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: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: aarch64 | |
- name: Build derivation | |
run: | | |
nix --system ${{ matrix.target }}-linux 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, aarch64-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 | |
run: | | |
if [[ "${{ matrix.target }}" == "x86_64-unknown-linux-gnu" || "${{ matrix.target }}" == "x86_64-unknown-linux-musl" ]]; then | |
cargo build --release --bins --target ${{ matrix.target }} | |
elif [[ "${{ matrix.target }}" == "aarch64-unknown-linux-musl" ]]; then | |
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 | |
fi | |
- 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 }} | |
compression-level: 9 | |
docker: | |
name: Build Docker containers | |
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: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: aarch64 | |
- 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: | |
images: ghcr.io/${{ steps.repo.outputs.lowercase }} | |
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 manifest tag | |
id: manifest-tag | |
run: echo "manifest_tag=ghcr.io/${{ steps.repo.outputs.lowercase }}:manifest-$(git rev-parse HEAD | cut -c1-20)" >> $GITHUB_ENV | |
- name: Build remote (x86_64) | |
run: | | |
nix --system x86_64-linux build .#fastside-docker | |
docker load < result | |
docker tag fastside ${{ env.manifest_tag }}-x86_64 | |
docker push ${{ env.manifest_tag }}-x86_64 | |
- name: Build remote (aarch64) | |
run: | | |
nix --system aarch64-linux build .#fastside-docker | |
docker load < result | |
docker tag fastside ${{ env.manifest_tag }}-aarch64 | |
docker push ${{ env.manifest_tag }}-aarch64 | |
- name: Build baked (x86_64) | |
run: | | |
nix --system x86_64-linux build .#fastside-docker-baked-services | |
docker load < result | |
docker tag fastside ${{ env.manifest_tag }}-x86_64-baked | |
docker push ${{ env.manifest_tag }}-x86_64-baked | |
- name: Build baked (aarch64) | |
run: | | |
nix --system aarch64-linux build .#fastside-docker-baked-services | |
docker load < result | |
docker tag fastside ${{ env.manifest_tag }}-aarch64-baked | |
docker push ${{ env.manifest_tag }}-aarch64-baked | |
- name: Push to registry | |
run: | | |
tags="${{ steps.meta.outputs.tags }}" | |
for tag in $tags; do | |
echo "Pushing $tag" | |
docker manifest create \ | |
$tag \ | |
--amend ${{ env.manifest_tag }}-x86_64 \ | |
--amend ${{ env.manifest_tag }}-aarch64 | |
docker manifest push $tag | |
done | |
for tag in $tags; do | |
mod_tag="$tag-baked" | |
echo "Pushing $mod_tag" | |
docker manifest create \ | |
$mod_tag \ | |
--amend ${{ env.manifest_tag }}-x86_64 \ | |
--amend ${{ env.manifest_tag }}-aarch64 | |
docker manifest push $mod_tag | |
done | |
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 |