There is no point to actually realize the derivations to disk, when they are in cache. `nix-build-uncached` checks the cache and stops before downloading dependencies if they are available. It will however build as normal on a cache-miss. Should speed up CI when no Nix dependencies change a fair bit. We can only do this for the MacOS job, which only tests the builds. We can not do this for other jobs which require the build results to be present before uploading parts of them as artifacts.
187 lines
6.1 KiB
YAML
187 lines
6.1 KiB
YAML
name: Build
|
|
|
|
on:
|
|
workflow_call:
|
|
secrets:
|
|
CACHIX_AUTH_TOKEN:
|
|
required: false
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- v[0-9]+
|
|
paths:
|
|
- .github/workflows/build.yaml
|
|
- .github/actions/**
|
|
- .github/scripts/**
|
|
- .github/*
|
|
- '*.nix'
|
|
- nix/**
|
|
- flake.lock
|
|
- .cirrus.yml
|
|
- cabal.project*
|
|
- postgrest.cabal
|
|
- stack.yaml*
|
|
- '**.hs'
|
|
- '!**.md'
|
|
|
|
concurrency:
|
|
# Terminate all previous runs of the same workflow for pull requests
|
|
group: build-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
static:
|
|
name: Nix - Linux x86-64 static
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Nix Environment
|
|
uses: ./.github/actions/setup-nix
|
|
with:
|
|
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
|
|
|
- name: Build static executable
|
|
run: nix-build -A postgrestStatic -A postgrestStatic.tests
|
|
- name: Save built executable as artifact
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: postgrest-linux-static-x86-64
|
|
path: result/bin/postgrest
|
|
if-no-files-found: error
|
|
|
|
- name: Build Docker image
|
|
run: nix-build -A docker.image --out-link postgrest-docker.tar.gz
|
|
- name: Save built Docker image as artifact
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: postgrest-docker-x86-64
|
|
path: postgrest-docker.tar.gz
|
|
if-no-files-found: error
|
|
|
|
|
|
macos:
|
|
name: Nix - MacOS
|
|
runs-on: macos-26
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Setup Nix Environment
|
|
uses: ./.github/actions/setup-nix
|
|
with:
|
|
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
|
- name: Install nix-build-uncached
|
|
run: nix-env -f default.nix -iA nix-build-uncached
|
|
|
|
- name: Build everything (default.nix)
|
|
run: nix-build-uncached
|
|
|
|
|
|
stack:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: FreeBSD x86-64
|
|
runs-on: ubuntu-24.04
|
|
vm: freebsd
|
|
artifact: postgrest-freebsd-x86-64
|
|
deps: pkg install -y postgresql16-client hs-stack
|
|
|
|
- name: Linux aarch64
|
|
runs-on: ubuntu-24.04-arm
|
|
artifact: postgrest-ubuntu-aarch64
|
|
deps: sudo apt-get update && sudo apt-get install libpq-dev
|
|
|
|
- name: MacOS aarch64
|
|
runs-on: macos-14
|
|
artifact: postgrest-macos-aarch64
|
|
deps: brew link --force libpq
|
|
|
|
- name: MacOS x86-64
|
|
runs-on: macos-15-intel
|
|
artifact: postgrest-macos-x86-64
|
|
deps: brew link --force libpq
|
|
|
|
- name: Windows
|
|
runs-on: windows-2022
|
|
deps: Add-Content $env:GITHUB_PATH $env:PGBIN
|
|
artifact: postgrest-windows-x86-64
|
|
|
|
name: Stack - ${{ matrix.name }}
|
|
runs-on: ${{ matrix.runs-on }}
|
|
env:
|
|
# Putting .stack in the working directory helps with moving this in and out of the FreeBSD VM.
|
|
STACK_ROOT: ${{ github.workspace }}/.stack
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- if: ${{ !matrix.vm }}
|
|
uses: haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553 # v2.11.0
|
|
with:
|
|
# This must match the version in stack.yaml's resolver
|
|
ghc-version: 9.6.7
|
|
enable-stack: true
|
|
stack-no-global: true
|
|
stack-setup-ghc: true
|
|
- name: Cache .stack
|
|
uses: ./.github/actions/cache-on-main
|
|
with:
|
|
path: .stack
|
|
prefix: ${{ matrix.vm }}${{ matrix.vm && '-' }}stack
|
|
suffix: ${{ hashFiles('postgrest.cabal', 'stack.yaml.lock') }}
|
|
- name: Cache .stack-work
|
|
uses: ./.github/actions/cache-on-main
|
|
with:
|
|
path: .stack-work
|
|
save-prs: true
|
|
prefix: ${{ matrix.vm }}${{ matrix.vm && '-' }}stack-work-${{ hashFiles('postgrest.cabal', 'stack.yaml.lock') }}
|
|
suffix: ${{ hashFiles('main/**/*.hs', 'src/**/*.hs') }}
|
|
- name: Build with Stack
|
|
uses: ./.github/actions/run-anywhere
|
|
with:
|
|
vm: ${{ matrix.vm }}
|
|
envs: STACK_ROOT
|
|
prepare: ${{ matrix.deps }}
|
|
run: |
|
|
stack build --lock-file error-on-write --local-bin-path result --copy-bins
|
|
strip result/postgrest*
|
|
- name: Save built executable as artifact
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: ${{ matrix.artifact }}
|
|
path: |
|
|
result/postgrest
|
|
result/postgrest.exe
|
|
if-no-files-found: error
|
|
|
|
|
|
cabal:
|
|
strategy:
|
|
matrix:
|
|
ghc: ['9.6.7', '9.8.4']
|
|
fail-fast: false
|
|
name: Cabal - Linux x86-64 - GHC ${{ matrix.ghc }}
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- uses: haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553 # v2.11.0
|
|
with:
|
|
ghc-version: ${{ matrix.ghc }}
|
|
- name: Cache .cabal
|
|
uses: ./.github/actions/cache-on-main
|
|
with:
|
|
path: |
|
|
~/.cabal/packages
|
|
~/.cabal/store
|
|
prefix: cabal-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }}
|
|
suffix: ${{ hashFiles('postgrest.cabal', 'cabal.project') }}
|
|
- name: Cache dist-newstyle
|
|
uses: ./.github/actions/cache-on-main
|
|
with:
|
|
path: dist-newstyle
|
|
save-prs: true
|
|
prefix: cabal-${{ matrix.ghc }}-dist-newstyle-${{ hashFiles('postgrest.cabal', 'cabal.project', 'cabal.project.freeze') }}
|
|
suffix: ${{ hashFiles('**/*.hs') }}
|
|
- name: Install dependencies
|
|
run: cabal build --only-dependencies --enable-tests --enable-benchmarks
|
|
- name: Build
|
|
run: cabal build --enable-tests --enable-benchmarks all
|