168 lines
4.8 KiB
YAML
168 lines
4.8 KiB
YAML
name: Build
|
|
|
|
on:
|
|
workflow_call:
|
|
secrets:
|
|
CACHIX_AUTH_TOKEN:
|
|
required: false
|
|
|
|
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 static
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup Nix Environment
|
|
uses: ./.github/actions/setup-nix
|
|
with:
|
|
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
|
|
|
- name: Build static executable
|
|
run: nix-build -A postgrestStatic
|
|
- name: Save built executable as artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: postgrest-linux-static-x64
|
|
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@v4
|
|
with:
|
|
name: postgrest-docker-x64
|
|
path: postgrest-docker.tar.gz
|
|
if-no-files-found: error
|
|
|
|
|
|
macos:
|
|
name: Nix - MacOS
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup Nix Environment
|
|
uses: ./.github/actions/setup-nix
|
|
with:
|
|
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
|
|
|
- name: Build everything
|
|
run: |
|
|
nix-build
|
|
|
|
|
|
stack:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: Linux
|
|
runs-on: ubuntu-latest
|
|
cache: |
|
|
~/.stack
|
|
.stack-work
|
|
# no artifact for Linux, because we use the static build
|
|
|
|
- name: MacOS
|
|
runs-on: macos-latest
|
|
cache: |
|
|
~/.stack
|
|
.stack-work
|
|
artifact: postgrest-macos-x64
|
|
|
|
- name: Windows
|
|
runs-on: windows-latest
|
|
cache: |
|
|
~\AppData\Roaming\stack
|
|
~\AppData\Local\Programs\stack
|
|
.stack-work
|
|
deps: Add-Content $env:GITHUB_PATH $env:PGBIN
|
|
artifact: postgrest-windows-x64
|
|
|
|
name: Stack - ${{ matrix.name }}
|
|
runs-on: ${{ matrix.runs-on }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Stack working files cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ matrix.cache }}
|
|
key: cache-stack-${{ runner.os }}-${{ hashFiles('stack.yaml.lock') }}
|
|
restore-keys: |
|
|
cache-stack-${{ runner.os }}-
|
|
- name: Install dependencies
|
|
if: matrix.deps
|
|
run: ${{ matrix.deps }}
|
|
- name: Build with Stack
|
|
run: stack build --lock-file error-on-write --local-bin-path result --copy-bins
|
|
- name: Strip Executable
|
|
run: strip result/postgrest*
|
|
- name: Save built executable as artifact
|
|
if: matrix.artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.artifact }}
|
|
path: |
|
|
result/postgrest
|
|
result/postgrest.exe
|
|
if-no-files-found: error
|
|
|
|
|
|
freebsd:
|
|
name: Stack - FreeBSD from CirrusCI
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Get FreeBSD executable from CirrusCI
|
|
env:
|
|
# GITHUB_SHA does weird things for pull request, so we roll our own:
|
|
GITHUB_COMMIT: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: .github/get_cirrusci_freebsd
|
|
- name: Save executable as artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: postgrest-freebsd-x64
|
|
path: postgrest
|
|
if-no-files-found: error
|
|
|
|
|
|
cabal:
|
|
strategy:
|
|
matrix:
|
|
ghc: ['9.4.8', '9.6.4', '9.8.1']
|
|
fail-fast: false
|
|
name: Cabal - Linux GHC ${{ matrix.ghc }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: ghcup
|
|
run: |
|
|
ghcup install ghc ${{ matrix.ghc }}
|
|
ghcup set ghc ${{ matrix.ghc }}
|
|
- name: Copy cabal.project & fix caching
|
|
run: |
|
|
mkdir ~/.cabal
|
|
cp cabal.project.non-nix cabal.project
|
|
- name: Cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.cabal/packages
|
|
~/.cabal/store
|
|
dist-newstyle
|
|
key: cache-cabal-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('postgrest.cabal', 'cabal.project', 'cabal.project.freeze') }}
|
|
restore-keys: |
|
|
cache-cabal-${{ runner.os }}-${{ matrix.ghc }}-
|
|
- name: Install dependencies
|
|
run: |
|
|
cabal update
|
|
cabal build --only-dependencies --enable-tests --enable-benchmarks
|
|
- name: Build
|
|
run: cabal build --enable-tests --enable-benchmarks all
|