mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-08 05:52:55 +00:00
181 lines
7.2 KiB
YAML
181 lines
7.2 KiB
YAML
name: Check neon with MacOS builds
|
||
|
||
on:
|
||
workflow_call:
|
||
inputs:
|
||
pg_versions:
|
||
description: "Array of the pg versions to build for, for example: ['v14', 'v17']"
|
||
type: string
|
||
default: '[]'
|
||
required: false
|
||
rebuild_rust_code:
|
||
description: "Rebuild Rust code"
|
||
type: boolean
|
||
default: false
|
||
required: false
|
||
rebuild_everything:
|
||
description: "If true, rebuild for all versions"
|
||
type: boolean
|
||
default: false
|
||
required: false
|
||
|
||
env:
|
||
RUST_BACKTRACE: 1
|
||
COPT: '-Werror'
|
||
|
||
# TODO: move `check-*` and `files-changed` jobs to the "Caller" Workflow
|
||
# We should care about that as Github has limitations:
|
||
# - You can connect up to four levels of workflows
|
||
# - You can call a maximum of 20 unique reusable workflows from a single workflow file.
|
||
# https://docs.github.com/en/actions/sharing-automations/reusing-workflows#limitations
|
||
permissions:
|
||
contents: read
|
||
|
||
jobs:
|
||
build-postgres:
|
||
if: |
|
||
inputs.pg_versions != '[]' || inputs.rebuild_everything ||
|
||
contains(github.event.pull_request.labels.*.name, 'run-extra-build-macos') ||
|
||
contains(github.event.pull_request.labels.*.name, 'run-extra-build-*') ||
|
||
github.ref_name == 'main'
|
||
timeout-minutes: 30
|
||
runs-on: macos-15
|
||
strategy:
|
||
matrix:
|
||
postgres-version: ${{ inputs.rebuild_everything && fromJSON('["v14", "v15", "v16", "v17"]') || fromJSON(inputs.pg_versions) }}
|
||
env:
|
||
# Use release build only, to have less debug info around
|
||
# Hence keeping target/ (and general cache size) smaller
|
||
BUILD_TYPE: release
|
||
steps:
|
||
- name: Harden the runner (Audit all outbound calls)
|
||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
||
with:
|
||
egress-policy: audit
|
||
|
||
- name: Checkout main repo
|
||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||
|
||
- name: Set pg ${{ matrix.postgres-version }} for caching
|
||
id: pg_rev
|
||
run: echo pg_rev=$(git rev-parse HEAD:vendor/postgres-${{ matrix.postgres-version }}) | tee -a "${GITHUB_OUTPUT}"
|
||
|
||
- name: Cache postgres ${{ matrix.postgres-version }} build
|
||
id: cache_pg
|
||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||
with:
|
||
path: pg-build-${{ matrix.postgres-version }}.tar
|
||
key: v1-${{ runner.os }}-${{ runner.arch }}-${{ env.BUILD_TYPE }}-pg-build-${{ matrix.postgres-version }}-${{ steps.pg_rev.outputs.pg_rev }}-${{ hashFiles('Makefile') }}
|
||
|
||
- name: Checkout submodule vendor/postgres-${{ matrix.postgres-version }}
|
||
if: steps.cache_pg.outputs.cache-hit != 'true'
|
||
run: |
|
||
git submodule init vendor/postgres-${{ matrix.postgres-version }}
|
||
git submodule update --depth 1 --recursive
|
||
|
||
- name: Install build dependencies
|
||
if: steps.cache_pg.outputs.cache-hit != 'true'
|
||
run: |
|
||
brew install flex bison openssl protobuf icu4c
|
||
|
||
- name: Set extra env for macOS
|
||
if: steps.cache_pg.outputs.cache-hit != 'true'
|
||
run: |
|
||
echo 'LDFLAGS=-L/usr/local/opt/openssl@3/lib' >> $GITHUB_ENV
|
||
echo 'CPPFLAGS=-I/usr/local/opt/openssl@3/include' >> $GITHUB_ENV
|
||
|
||
- name: Build Postgres ${{ matrix.postgres-version }}
|
||
if: steps.cache_pg.outputs.cache-hit != 'true'
|
||
run: |
|
||
make postgres-${{ matrix.postgres-version }} -j$(sysctl -n hw.ncpu)
|
||
|
||
# `actions/download-artifact` doesn't preserve permissions:
|
||
# https://github.com/actions/download-artifact?tab=readme-ov-file#permission-loss
|
||
# It also doesn't support symbolic links.
|
||
- name: Build artifact tarball
|
||
if: steps.cache_pg.outputs.cache-hit != 'true'
|
||
run: |
|
||
tar cf pg-build-${{ matrix.postgres-version }}.tar --exclude="*.o" pg_install build
|
||
|
||
- name: Upload "pg-build--${{ matrix.postgres-version }}" artifact
|
||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||
with:
|
||
name: pg-build--${{ matrix.postgres-version }}
|
||
path: pg-build-${{ matrix.postgres-version }}.tar
|
||
# The artifact is supposed to be used by the next job in the same workflow,
|
||
# so there’s no need to store it for too long.
|
||
retention-days: 1
|
||
|
||
make-all:
|
||
if: |
|
||
inputs.pg_versions != '[]' || inputs.rebuild_rust_code || inputs.rebuild_everything ||
|
||
contains(github.event.pull_request.labels.*.name, 'run-extra-build-macos') ||
|
||
contains(github.event.pull_request.labels.*.name, 'run-extra-build-*') ||
|
||
github.ref_name == 'main'
|
||
timeout-minutes: 30
|
||
runs-on: macos-15
|
||
needs: [build-postgres]
|
||
env:
|
||
# Use release build only, to have less debug info around
|
||
# Hence keeping target/ (and general cache size) smaller
|
||
BUILD_TYPE: release
|
||
steps:
|
||
- name: Harden the runner (Audit all outbound calls)
|
||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
||
with:
|
||
egress-policy: audit
|
||
|
||
- name: Checkout main repo
|
||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||
with:
|
||
submodules: true
|
||
|
||
- name: Download "pg-build" artifacts
|
||
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
||
with:
|
||
pattern: pg-build--*
|
||
merge-multiple: true
|
||
path: pg-build-tarballs
|
||
|
||
- name: Extract pg-build tarballs
|
||
run: find pg-build-tarballs -name "*.tar" -print0 | xargs -0 -n1 tar xvf
|
||
|
||
# Explicitly update the rust toolchain before running 'make'. The parallel make build can
|
||
# invoke 'cargo build' more than once in parallel, for different crates. That's OK, 'cargo'
|
||
# does its own locking to prevent concurrent builds from stepping on each other's
|
||
# toes. However, it will first try to update the toolchain, and that step is not locked the
|
||
# same way. To avoid two toolchain updates running in parallel and stepping on each other's
|
||
# toes, ensure that the toolchain is up-to-date beforehand.
|
||
- name: Update rust toolchain
|
||
run: |
|
||
rustup update
|
||
|
||
- name: Cache cargo deps
|
||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||
with:
|
||
path: |
|
||
~/.cargo/registry
|
||
!~/.cargo/registry/src
|
||
~/.cargo/git
|
||
target
|
||
key: v1-${{ runner.os }}-${{ runner.arch }}-cargo-${{ hashFiles('./Cargo.lock') }}-${{ hashFiles('./rust-toolchain.toml') }}-rust
|
||
|
||
- name: Install build dependencies
|
||
run: |
|
||
brew install flex bison openssl protobuf icu4c
|
||
|
||
- name: Set extra env for macOS
|
||
run: |
|
||
echo 'LDFLAGS=-L/usr/local/opt/openssl@3/lib' >> $GITHUB_ENV
|
||
echo 'CPPFLAGS=-I/usr/local/opt/openssl@3/include' >> $GITHUB_ENV
|
||
|
||
# Build the neon-specific postgres extensions, and all the Rust bits.
|
||
#
|
||
# PostgreSQL was already built and cached separately. If the caching
|
||
# didn't work for some reason, this would build Postgres too.
|
||
- name: Build all
|
||
run: BUILD_TYPE=release make -j$(sysctl -n hw.ncpu) all
|
||
|
||
- name: Check that no warnings are produced
|
||
run: ./run_clippy.sh
|