diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..e75516c08 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,167 @@ +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 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a86a6bd33..f11d5deb1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -32,159 +32,11 @@ jobs: CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }} - Build-Static-Nix: - name: Build Linux static (Nix) - 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 - - - Build-Macos-Nix: - name: Build MacOS (Nix) - 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 - - - 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: Build ${{ matrix.name }} (Stack) - 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 - - - Get-FreeBSD-CirrusCI: - name: Get FreeBSD build 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 - - - Build-Cabal: - strategy: - matrix: - ghc: ['9.4.8', '9.6.4', '9.8.1'] - fail-fast: false - name: Build Linux (Cabal, 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 + build: + name: Build + uses: ./.github/workflows/build.yaml + secrets: + CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }} Build-Cabal-Arm: @@ -263,9 +115,7 @@ jobs: needs: - docs - test - - Build-Static-Nix - - Build-Stack - #- Get-FreeBSD-CirrusCI + - build - Build-Cabal-Arm outputs: version: ${{ steps.Identify-Version.outputs.version }}