190 lines
6.1 KiB
YAML
190 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
- 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
- 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
|
|
|
|
- name: Build everything (shell.nix)
|
|
run: nix-build-uncached shell.nix
|
|
|
|
|
|
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
- 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
- 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
|