ci: Remove all CI except docs on EOL branches
This commit is contained in:
committed by
Wolfgang Walther
parent
9af4a4f599
commit
25a4250bb3
-15
@@ -1,15 +0,0 @@
|
|||||||
freebsd_instance:
|
|
||||||
image_family: freebsd-14-0
|
|
||||||
|
|
||||||
build_task:
|
|
||||||
name: Build FreeBSD (Stack)
|
|
||||||
install_script: pkg install -y postgresql13-client hs-stack git
|
|
||||||
|
|
||||||
stack_cache:
|
|
||||||
folders: /.stack
|
|
||||||
fingerprint_script: cat postgrest.cabal stack.yaml.lock
|
|
||||||
reupload_on_changes: false
|
|
||||||
|
|
||||||
build_script: stack build -j 1 --local-bin-path . --copy-bins
|
|
||||||
bin_artifacts:
|
|
||||||
path: postgrest
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
name: Setup Nix
|
|
||||||
|
|
||||||
description: Installs nix, sets up cachix and installs a subset of tooling.
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
authToken:
|
|
||||||
description: Token to pass to cachix
|
|
||||||
tools:
|
|
||||||
description: Tools to install with nix-env -iA <tools>
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- uses: cachix/install-nix-action@8887e596b4ee1134dae06b98d573bd674693f47c # v26
|
|
||||||
with:
|
|
||||||
install_url: https://releases.nixos.org/nix/nix-2.13.3/install
|
|
||||||
- uses: cachix/cachix-action@18cf96c7c98e048e10a83abd92116114cd8504be # v14
|
|
||||||
with:
|
|
||||||
name: postgrest
|
|
||||||
authToken: ${{ inputs.authToken }}
|
|
||||||
- if: ${{ inputs.tools }}
|
|
||||||
run: nix-env -f default.nix -iA ${{ inputs.tools }}
|
|
||||||
shell: bash
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
codecov:
|
|
||||||
branch: main
|
|
||||||
require_ci_to_pass: false
|
|
||||||
|
|
||||||
comment: false
|
|
||||||
|
|
||||||
coverage:
|
|
||||||
status:
|
|
||||||
project:
|
|
||||||
default:
|
|
||||||
target: auto
|
|
||||||
threshold: 1%
|
|
||||||
only_pulls: false
|
|
||||||
patch:
|
|
||||||
default:
|
|
||||||
target: auto
|
|
||||||
threshold: 1%
|
|
||||||
only_pulls: true
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: /
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# Get the FreeBSD PostgREST executable built by CirrusCI for the given GITHUB_COMMIT in GITHUB_REPOSITORY
|
|
||||||
|
|
||||||
# We use the GitHub API for 'check suites' to find the corresponding CirrusCI job, see:
|
|
||||||
# https://docs.github.com/en/rest/reference/checks#list-check-suites-for-a-git-reference
|
|
||||||
|
|
||||||
cirrus_artifact_name=bin
|
|
||||||
gh_auth_header="Authorization: Bearer $GITHUB_TOKEN"
|
|
||||||
gh_accept_header="Accept: application/vnd.github.v3+json"
|
|
||||||
|
|
||||||
get_gh_check_runs_url() {
|
|
||||||
gh_checks_list_url="https://api.github.com/repos/$GITHUB_REPOSITORY/commits/$GITHUB_COMMIT/check-suites"
|
|
||||||
>&2 echo "Getting list of check-suites from $gh_checks_list_url ..."
|
|
||||||
curl -s --fail -H "$gh_auth_header" -H "$gh_accept_header" "$gh_checks_list_url" \
|
|
||||||
| jq -r '.check_suites[] | select(.app.slug == "cirrus-ci") | .check_runs_url'
|
|
||||||
}
|
|
||||||
|
|
||||||
wait_for_cirrusci() {
|
|
||||||
>&2 echo "Waiting to CirrusCI run to complete (two hours maximum)..."
|
|
||||||
for _ in $(seq 1 120); do
|
|
||||||
gh_check_runs_url="$(get_gh_check_runs_url)"
|
|
||||||
if [ -z "$gh_check_runs_url" ]; then
|
|
||||||
echo "CirrusCI task has not started, yet. Waiting..."
|
|
||||||
else
|
|
||||||
echo "Checking for CirrusCI task status at $gh_check_runs_url ..."
|
|
||||||
status=$(curl -s --fail -H "$gh_auth_header" "$gh_check_runs_url" | jq -r '.check_runs[] | .status')
|
|
||||||
if [ "$status" == "completed" ]; then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo "CirrusCI task is still $status, waiting..."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
sleep 60
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# The CirrusCI taskid can change if a new check run is started for the same commit,
|
|
||||||
# e.g. when pushing both a branch and tag. We make sure that we have the very
|
|
||||||
# latest taskid by re-loading the 'gh_check_runs_url' and the 'check run' itself.
|
|
||||||
get_cirrus_taskid() {
|
|
||||||
gh_check_runs_url="$(get_gh_check_runs_url)"
|
|
||||||
>&2 echo "Getting the CirrusCI task id from $gh_check_runs_url ..."
|
|
||||||
curl --fail -H "$gh_auth_header" -H "$gh_accept_header" "$gh_check_runs_url" \
|
|
||||||
| jq -r '.check_runs[] | .external_id'
|
|
||||||
}
|
|
||||||
|
|
||||||
download_artifact() {
|
|
||||||
cirrus_task_id="$(get_cirrus_taskid)"
|
|
||||||
cirrus_artifact_url="https://api.cirrus-ci.com/v1/artifact/task/$cirrus_task_id/$cirrus_artifact_name.zip"
|
|
||||||
>&2 echo "Attemping to download the CirrusCI artifact from $cirrus_artifact_url ..."
|
|
||||||
curl --fail "$cirrus_artifact_url" -o freebsd.zip
|
|
||||||
}
|
|
||||||
|
|
||||||
wait_for_cirrusci
|
|
||||||
download_artifact
|
|
||||||
|
|
||||||
echo "Unpacking executable..."
|
|
||||||
unzip freebsd.zip -d .
|
|
||||||
rm -rf freebsd.zip
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Tag a release that will be built with Github Actions. The version is
|
|
||||||
# read from 'postgrest.cabal'.
|
|
||||||
|
|
||||||
version="$(grep -oP '^version:\s*\K.*' postgrest.cabal)"
|
|
||||||
|
|
||||||
echo "Tagging version v$version"
|
|
||||||
git tag -f "v$version"
|
|
||||||
|
|
||||||
echo "Pushing tag..."
|
|
||||||
git push -f origin "refs/tags/v$version"
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# This script builds PostgREST in a remote ARM server
|
|
||||||
|
|
||||||
[ -z "$1" ] && { echo "Missing 1st argument: PostgREST github commit SHA"; exit 1; }
|
|
||||||
[ -z "$2" ] && { echo "Missing 2nd argument: Build environment directory name"; exit 1; }
|
|
||||||
|
|
||||||
PGRST_GITHUB_COMMIT="$1"
|
|
||||||
SCRIPT_DIR="$2"
|
|
||||||
|
|
||||||
DOCKER_BUILD_DIR="$SCRIPT_DIR/docker-env"
|
|
||||||
|
|
||||||
install_packages() {
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get upgrade -y
|
|
||||||
sudo apt-get install -y git build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 llvm libnuma-dev zlib1g-dev libpq-dev jq gcc
|
|
||||||
sudo apt-get clean
|
|
||||||
}
|
|
||||||
|
|
||||||
install_ghcup() {
|
|
||||||
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
|
||||||
export BOOTSTRAP_HASKELL_MINIMAL=1
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
|
|
||||||
source ~/.ghcup/env
|
|
||||||
}
|
|
||||||
|
|
||||||
install_cabal() {
|
|
||||||
ghcup upgrade
|
|
||||||
ghcup install cabal 3.6.0.0
|
|
||||||
ghcup set cabal 3.6.0.0
|
|
||||||
}
|
|
||||||
|
|
||||||
install_ghc() {
|
|
||||||
ghcup install ghc 8.10.7
|
|
||||||
ghcup set ghc 8.10.7
|
|
||||||
}
|
|
||||||
|
|
||||||
install_packages
|
|
||||||
|
|
||||||
# Add ghcup to the PATH for this session
|
|
||||||
[ -f ~/.ghcup/env ] && source ~/.ghcup/env
|
|
||||||
|
|
||||||
ghcup --version || install_ghcup
|
|
||||||
cabal --version || install_cabal
|
|
||||||
ghc --version || install_ghc
|
|
||||||
|
|
||||||
cd ~/$SCRIPT_DIR
|
|
||||||
|
|
||||||
# Clone the repository and build the project
|
|
||||||
git clone https://github.com/PostgREST/postgrest.git
|
|
||||||
cd postgrest
|
|
||||||
git checkout $PGRST_GITHUB_COMMIT
|
|
||||||
cabal v2-update && cabal v2-build
|
|
||||||
|
|
||||||
# Copy the built binary to the Dockerfile directory
|
|
||||||
PGRST_BIN=$(cabal exec which postgrest | tail -1)
|
|
||||||
cp $PGRST_BIN ~/$DOCKER_BUILD_DIR
|
|
||||||
|
|
||||||
# Move and compress the built binary
|
|
||||||
mkdir -p ~/$SCRIPT_DIR/result
|
|
||||||
mv $PGRST_BIN ~/$SCRIPT_DIR/result
|
|
||||||
cd ~/$SCRIPT_DIR
|
|
||||||
tar -cJf result.tar.xz result
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
# PostgREST docker hub image
|
|
||||||
|
|
||||||
FROM ubuntu:jammy@sha256:a6d2b38300ce017add71440577d5b0a90460d0e57fd7aec21dd0d1b0761bbfb2 AS postgrest
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt install -y --no-install-recommends libpq-dev zlib1g-dev jq gcc libnuma-dev \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY postgrest /usr/bin/postgrest
|
|
||||||
|
|
||||||
EXPOSE 3000
|
|
||||||
|
|
||||||
USER 1000
|
|
||||||
|
|
||||||
CMD postgrest
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# This script publishes the Docker ARM images to Docker Hub.
|
|
||||||
|
|
||||||
[ -z "$1" ] && { echo "Missing 1st argument: PostgREST github commit SHA"; exit 1; }
|
|
||||||
[ -z "$2" ] && { echo "Missing 2nd argument: Docker repo"; exit 1; }
|
|
||||||
[ -z "$3" ] && { echo "Missing 3rd argument: Docker username"; exit 1; }
|
|
||||||
[ -z "$4" ] && { echo "Missing 4th argument: Docker password"; exit 1; }
|
|
||||||
[ -z "$5" ] && { echo "Missing 5th argument: Build environment directory name"; exit 1; }
|
|
||||||
[ -z "$6" ] && { echo "Missing 6th argument: PostgREST version"; exit 1; }
|
|
||||||
|
|
||||||
PGRST_GITHUB_COMMIT="$1"
|
|
||||||
DOCKER_REPO="$2"
|
|
||||||
DOCKER_USER="$3"
|
|
||||||
DOCKER_PASS="$4"
|
|
||||||
SCRIPT_DIR="$5"
|
|
||||||
PGRST_VERSION="v$6"
|
|
||||||
IS_PRERELEASE="$7"
|
|
||||||
|
|
||||||
DOCKER_BUILD_DIR="$SCRIPT_DIR/docker-env"
|
|
||||||
|
|
||||||
clean_env()
|
|
||||||
{
|
|
||||||
sudo docker logout
|
|
||||||
}
|
|
||||||
|
|
||||||
# Login to Docker
|
|
||||||
sudo docker logout
|
|
||||||
{ echo $DOCKER_PASS | sudo docker login -u $DOCKER_USER --password-stdin; } || { echo "Couldn't login to docker"; exit 1; }
|
|
||||||
|
|
||||||
trap clean_env sigint sigterm exit
|
|
||||||
|
|
||||||
# Move to the docker build environment
|
|
||||||
cd ~/$DOCKER_BUILD_DIR
|
|
||||||
|
|
||||||
# Push final images to Docker hub
|
|
||||||
# NOTE: This command publishes a separate ARM image because the builds cannot
|
|
||||||
# be added to the manifest if they are not in the registry beforehand.
|
|
||||||
# This image must be manually deleted from Docker Hub at the end of the process.
|
|
||||||
sudo docker buildx build --build-arg PGRST_GITHUB_COMMIT=$PGRST_GITHUB_COMMIT \
|
|
||||||
-t $DOCKER_REPO/postgrest:$PGRST_VERSION-arm \
|
|
||||||
--push .
|
|
||||||
|
|
||||||
# Add the arm images to the manifest
|
|
||||||
# NOTE: This assumes that there already is a `postgrest:<version>` image
|
|
||||||
# for the amd64 architecture pushed to Docker Hub
|
|
||||||
sudo docker buildx imagetools create --append -t $DOCKER_REPO/postgrest:$PGRST_VERSION $DOCKER_REPO/postgrest:$PGRST_VERSION-arm
|
|
||||||
[ -z $IS_PRERELEASE ] && sudo docker buildx imagetools create --append -t $DOCKER_REPO/postgrest:latest $DOCKER_REPO/postgrest:$PGRST_VERSION-arm
|
|
||||||
|
|
||||||
sudo docker logout
|
|
||||||
@@ -1,503 +0,0 @@
|
|||||||
name: CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- v[0-9]+
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- v[0-9]+
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Lint-Style:
|
|
||||||
name: Lint & check code style
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
tools: style
|
|
||||||
- name: Run linter (check locally with `nix-shell --run postgrest-lint`)
|
|
||||||
run: postgrest-lint
|
|
||||||
- name: Run style check (auto-format with `nix-shell --run postgrest-style`)
|
|
||||||
run: postgrest-style-check
|
|
||||||
|
|
||||||
|
|
||||||
Test-Nix:
|
|
||||||
name: Test (Nix)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
# Hack for enabling color output, see:
|
|
||||||
# https://github.com/actions/runner/issues/241#issuecomment-842566950
|
|
||||||
shell: script -qec "bash --noprofile --norc -eo pipefail {0}"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
tools: tests
|
|
||||||
|
|
||||||
- name: Run coverage (IO tests and Spec tests against PostgreSQL 15)
|
|
||||||
run: postgrest-coverage
|
|
||||||
- name: Upload coverage to codecov
|
|
||||||
uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be # v4.3.1
|
|
||||||
with:
|
|
||||||
files: ./coverage/codecov.json
|
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
|
|
||||||
- name: Run doctests
|
|
||||||
if: always()
|
|
||||||
run: nix-shell --run postgrest-test-doctests
|
|
||||||
|
|
||||||
- name: Check the spec tests for idempotence
|
|
||||||
if: always()
|
|
||||||
run: postgrest-test-spec-idempotence
|
|
||||||
|
|
||||||
|
|
||||||
Test-Pg-Nix:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
pgVersion: [9.6, 10, 11, 12, 13, 14, 15]
|
|
||||||
name: Test PG ${{ matrix.pgVersion }} (Nix)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
# Hack for enabling color output, see:
|
|
||||||
# https://github.com/actions/runner/issues/241#issuecomment-842566950
|
|
||||||
shell: script -qec "bash --noprofile --norc -eo pipefail {0}"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
tools: tests withTools
|
|
||||||
|
|
||||||
- name: Run spec tests
|
|
||||||
if: always()
|
|
||||||
run: postgrest-with-postgresql-${{ matrix.pgVersion }} postgrest-test-spec
|
|
||||||
|
|
||||||
- name: Run IO tests
|
|
||||||
if: always()
|
|
||||||
run: postgrest-with-postgresql-${{ matrix.pgVersion }} -f test/io/fixtures.sql postgrest-test-io
|
|
||||||
|
|
||||||
|
|
||||||
Test-Memory-Nix:
|
|
||||||
name: Test memory (Nix)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
tools: memory
|
|
||||||
- name: Run memory tests
|
|
||||||
run: postgrest-test-memory
|
|
||||||
|
|
||||||
|
|
||||||
Build-Static-Nix:
|
|
||||||
name: Build Linux static (Nix)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
|
||||||
tools: tests
|
|
||||||
|
|
||||||
- name: Build static executable
|
|
||||||
run: nix-build -A postgrestStatic
|
|
||||||
- name: Check static executable
|
|
||||||
run: postgrest-check-static result/bin/postgrest
|
|
||||||
- name: Save built executable as artifact
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
with:
|
|
||||||
name: postgrest-docker-x64
|
|
||||||
path: postgrest-docker.tar.gz
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
- name: Build and push everything to Cachix (main branch only)
|
|
||||||
if: ${{ github.ref == 'refs/heads/main' }}
|
|
||||||
run: |
|
|
||||||
nix-build
|
|
||||||
nix-env -f default.nix -iA devTools
|
|
||||||
postgrest-push-cachix
|
|
||||||
|
|
||||||
|
|
||||||
Build-Stack:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- name: Linux
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
cache: |
|
|
||||||
~/.stack
|
|
||||||
.stack-work
|
|
||||||
artifact: postgrest-ubuntu-x64
|
|
||||||
|
|
||||||
- name: MacOS
|
|
||||||
runs-on: macos-12
|
|
||||||
cache: |
|
|
||||||
~/.stack
|
|
||||||
.stack-work
|
|
||||||
artifact: postgrest-macos-x64
|
|
||||||
|
|
||||||
- name: Windows
|
|
||||||
runs-on: windows-2022
|
|
||||||
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@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Stack working files cache
|
|
||||||
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
||||||
with:
|
|
||||||
path: ${{ matrix.cache }}
|
|
||||||
key: ${{ runner.os }}-${{ hashFiles('stack.yaml.lock') }}
|
|
||||||
- name: Install dependencies
|
|
||||||
if: ${{ matrix.deps }}
|
|
||||||
run: ${{ matrix.deps }}
|
|
||||||
- name: Build with Stack
|
|
||||||
run: stack build --local-bin-path result --copy-bins
|
|
||||||
- name: Save built executable as artifact
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
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-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- 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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
with:
|
|
||||||
name: postgrest-freebsd-x64
|
|
||||||
path: postgrest
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
Build-Cabal:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
ghc: ['8.10.7', '9.2.4']
|
|
||||||
fail-fast: false
|
|
||||||
name: Build Linux (Cabal, GHC ${{ matrix.ghc }})
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: ghcup
|
|
||||||
run: |
|
|
||||||
ghcup install ghc ${{ matrix.ghc }}
|
|
||||||
ghcup set ghc ${{ matrix.ghc }}
|
|
||||||
- name: Copy cabal.project
|
|
||||||
run: |
|
|
||||||
cp cabal.project.non-nix cabal.project
|
|
||||||
- name: Cache
|
|
||||||
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
||||||
with:
|
|
||||||
path: ~/.cabal
|
|
||||||
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ 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-Cabal-Arm:
|
|
||||||
name: Build aarch64 (Cabal)
|
|
||||||
if: "${{ github.event_name == 'push' }}"
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
outputs:
|
|
||||||
remotepath: ${{ steps.Remote-Dir.outputs.remotepath }}
|
|
||||||
env:
|
|
||||||
GITHUB_COMMIT: ${{ github.sha }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- id: Remote-Dir
|
|
||||||
name: Unique directory name for the remote build
|
|
||||||
run: echo "remotepath=postgrest-build-$(uuidgen)" >> "$GITHUB_OUTPUT"
|
|
||||||
- name: Copy script files to the remote server
|
|
||||||
uses: appleboy/scp-action@master
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.SSH_ARM_HOST }}
|
|
||||||
username: ubuntu
|
|
||||||
key: ${{ secrets.SSH_ARM_PRIVATE_KEY }}
|
|
||||||
fingerprint: ${{ secrets.SSH_ARM_FINGERPRINT }}
|
|
||||||
source: ".github/scripts/arm/*"
|
|
||||||
target: ${{ steps.Remote-Dir.outputs.remotepath }}
|
|
||||||
strip_components: 3
|
|
||||||
- name: Build ARM
|
|
||||||
uses: appleboy/ssh-action@master
|
|
||||||
env:
|
|
||||||
REMOTE_DIR: ${{ steps.Remote-Dir.outputs.remotepath }}
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.SSH_ARM_HOST }}
|
|
||||||
username: ubuntu
|
|
||||||
key: ${{ secrets.SSH_ARM_PRIVATE_KEY }}
|
|
||||||
fingerprint: ${{ secrets.SSH_ARM_FINGERPRINT }}
|
|
||||||
command_timeout: 120m
|
|
||||||
script_stop: true
|
|
||||||
envs: GITHUB_COMMIT,REMOTE_DIR
|
|
||||||
script: bash ~/$REMOTE_DIR/build.sh "$GITHUB_COMMIT" "$REMOTE_DIR"
|
|
||||||
- name: Download binaries from remote server
|
|
||||||
uses: nicklasfrahm/scp-action@main
|
|
||||||
with:
|
|
||||||
direction: download
|
|
||||||
host: ${{ secrets.SSH_ARM_HOST }}
|
|
||||||
username: ubuntu
|
|
||||||
key: ${{ secrets.SSH_ARM_PRIVATE_KEY }}
|
|
||||||
fingerprint: ${{ secrets.SSH_ARM_FINGERPRINT }}
|
|
||||||
source: "${{ steps.Remote-Dir.outputs.remotepath }}/result.tar.xz"
|
|
||||||
target: "result.tar.xz"
|
|
||||||
- name: Extract downloaded binaries
|
|
||||||
run: tar -xvf result.tar.xz && rm result.tar.xz
|
|
||||||
- name: Save aarch64 executable as artifact
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3.3.1
|
|
||||||
with:
|
|
||||||
name: postgrest-ubuntu-aarch64
|
|
||||||
path: result/postgrest
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
|
|
||||||
Prepare-Release:
|
|
||||||
name: Prepare release
|
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
needs:
|
|
||||||
- Lint-Style
|
|
||||||
- Test-Nix
|
|
||||||
- Test-Pg-Nix
|
|
||||||
- Test-Memory-Nix
|
|
||||||
- Build-Static-Nix
|
|
||||||
- Build-Stack
|
|
||||||
#- Get-FreeBSD-CirrusCI
|
|
||||||
- Build-Cabal-Arm
|
|
||||||
outputs:
|
|
||||||
version: ${{ steps.Identify-Version.outputs.version }}
|
|
||||||
isprerelease: ${{ steps.Identify-Version.outputs.isprerelease }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- id: Identify-Version
|
|
||||||
name: Identify the version to be released
|
|
||||||
run: |
|
|
||||||
tag_version="${GITHUB_REF##*/}"
|
|
||||||
cabal_version="$(grep -oP '^version:\s*\K.*' postgrest.cabal)"
|
|
||||||
|
|
||||||
if [ "$tag_version" != "v$cabal_version" ]; then
|
|
||||||
echo "Tagged version ($tag_version) does not match the one in postgrest.cabal (v$cabal_version). Aborting release..."
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "Version to be released is $cabal_version"
|
|
||||||
echo "version=$cabal_version" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$cabal_version" != *.*.*.* ]]; then
|
|
||||||
echo "Version is for a full release (version does not have four components)"
|
|
||||||
else
|
|
||||||
echo "Version is for a pre-release (version has four components, e.g., 1.1.1.1)"
|
|
||||||
echo "isprerelease=1" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
- name: Identify changes from CHANGELOG.md
|
|
||||||
run: |
|
|
||||||
version="${{ steps.Identify-Version.outputs.version }}"
|
|
||||||
isprerelease="${{ steps.Identify-Version.outputs.isprerelease }}"
|
|
||||||
|
|
||||||
if [ -n "$isprerelease" ]; then
|
|
||||||
echo "Getting unreleased changes..."
|
|
||||||
sed -n "1,/## Unreleased/d;/## \[/q;p" CHANGELOG.md > CHANGES.md
|
|
||||||
else
|
|
||||||
echo "Full release (no '-' in version), getting changes for version $version ..."
|
|
||||||
sed -n "1,/## \[$version\]/d;/## \[/q;p" CHANGELOG.md > CHANGES.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Relevant extract from CHANGELOG.md:"
|
|
||||||
cat CHANGES.md
|
|
||||||
- name: Save CHANGES.md as artifact
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
with:
|
|
||||||
name: release-changes
|
|
||||||
path: CHANGES.md
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
|
|
||||||
Release-GitHub:
|
|
||||||
name: Release on GitHub
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
needs: Prepare-Release
|
|
||||||
env:
|
|
||||||
VERSION: ${{ needs.Prepare-Release.outputs.version }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Download all artifacts
|
|
||||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
|
|
||||||
with:
|
|
||||||
path: artifacts
|
|
||||||
- name: Create release bundle with archives for all builds
|
|
||||||
run: |
|
|
||||||
find artifacts -type f -iname postgrest -exec chmod +x {} \;
|
|
||||||
|
|
||||||
mkdir -p release-bundle
|
|
||||||
|
|
||||||
tar cJvf "release-bundle/postgrest-v$VERSION-linux-static-x64.tar.xz" \
|
|
||||||
-C artifacts/postgrest-linux-static-x64 postgrest
|
|
||||||
|
|
||||||
# No need to release Ubuntu, as the static Linux binary built with Nix
|
|
||||||
# covers all Linux use-cases
|
|
||||||
#tar cfJv "release-bundle/postgrest-v$VERSION-ubuntu-x64.tar.xz" \
|
|
||||||
# -C artifacts/postgrest-ubuntu-x64 postgrest
|
|
||||||
|
|
||||||
tar cJvf "release-bundle/postgrest-v$VERSION-macos-x64.tar.xz" \
|
|
||||||
-C artifacts/postgrest-macos-x64 postgrest
|
|
||||||
|
|
||||||
tar cJvf "release-bundle/postgrest-v$VERSION-freebsd-x64.tar.xz" \
|
|
||||||
-C artifacts/postgrest-freebsd-x64 postgrest
|
|
||||||
|
|
||||||
tar cJvf "release-bundle/postgrest-v$VERSION-ubuntu-aarch64.tar.xz" \
|
|
||||||
-C artifacts/postgrest-ubuntu-aarch64 postgrest
|
|
||||||
|
|
||||||
zip "release-bundle/postgrest-v$VERSION-windows-x64.zip" \
|
|
||||||
artifacts/postgrest-windows-x64/postgrest.exe
|
|
||||||
|
|
||||||
- name: Save release bundle
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
with:
|
|
||||||
name: release-bundle
|
|
||||||
path: release-bundle
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
- name: Publish release on GitHub
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
isprerelease="${{ needs.Prepare-Release.outputs.isprerelease }}"
|
|
||||||
echo "Releasing version v$VERSION on GitHub (isprerelease=$isprerelease)..."
|
|
||||||
|
|
||||||
gh release delete "v$VERSION" || true
|
|
||||||
gh release create "v$VERSION" \
|
|
||||||
-F artifacts/release-changes/CHANGES.md \
|
|
||||||
${isprerelease:+"--prerelease"} \
|
|
||||||
release-bundle/*
|
|
||||||
|
|
||||||
|
|
||||||
Release-Docker:
|
|
||||||
name: Release on Docker Hub
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
needs:
|
|
||||||
- Build-Cabal-Arm
|
|
||||||
- Prepare-Release
|
|
||||||
env:
|
|
||||||
GITHUB_COMMIT: ${{ github.sha }}
|
|
||||||
DOCKER_REPO: postgrest
|
|
||||||
DOCKER_USER: stevechavez
|
|
||||||
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
|
|
||||||
VERSION: ${{ needs.Prepare-Release.outputs.version }}
|
|
||||||
ISPRERELEASE: ${{ needs.Prepare-Release.outputs.isprerelease }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
tools: release
|
|
||||||
- name: Download Docker image
|
|
||||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
|
|
||||||
with:
|
|
||||||
name: postgrest-docker-x64
|
|
||||||
- name: Publish images on Docker Hub
|
|
||||||
run: |
|
|
||||||
docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
|
|
||||||
docker load -i postgrest-docker.tar.gz
|
|
||||||
|
|
||||||
docker tag postgrest:latest "$DOCKER_REPO/postgrest:v$VERSION"
|
|
||||||
docker push "$DOCKER_REPO/postgrest:v$VERSION"
|
|
||||||
|
|
||||||
# Only tag 'latest' for full releases
|
|
||||||
if [[ -z "$ISPRERELEASE" ]]; then
|
|
||||||
echo "Pushing to 'latest' tag for full release of v$VERSION ..."
|
|
||||||
docker tag postgrest:latest "$DOCKER_REPO"/postgrest:latest
|
|
||||||
docker push "$DOCKER_REPO"/postgrest:latest
|
|
||||||
else
|
|
||||||
echo "Skipping pushing to 'latest' tag for v$VERSION pre-release..."
|
|
||||||
fi
|
|
||||||
- name: Publish images for ARM builds on Docker Hub
|
|
||||||
uses: appleboy/ssh-action@master
|
|
||||||
env:
|
|
||||||
REMOTE_DIR: ${{ needs.Build-Cabal-Arm.outputs.remotepath }}
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.SSH_ARM_HOST }}
|
|
||||||
username: ubuntu
|
|
||||||
key: ${{ secrets.SSH_ARM_PRIVATE_KEY }}
|
|
||||||
fingerprint: ${{ secrets.SSH_ARM_FINGERPRINT }}
|
|
||||||
script_stop: true
|
|
||||||
envs: GITHUB_COMMIT,DOCKER_REPO,DOCKER_USER,DOCKER_PASS,REMOTE_DIR,VERSION,ISPRERELEASE
|
|
||||||
script: bash ~/$REMOTE_DIR/docker-publish.sh "$GITHUB_COMMIT" "$DOCKER_REPO" "$DOCKER_USER" "$DOCKER_PASS" "$REMOTE_DIR" "$VERSION" "$ISPRERELEASE"
|
|
||||||
# TODO: Enable dockerhub description update again, once a solution for the permission problem is found:
|
|
||||||
# https://github.com/docker/hub-feedback/issues/1927
|
|
||||||
# - name: Update descriptions on Docker Hub
|
|
||||||
# env:
|
|
||||||
# DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
|
|
||||||
# run: |
|
|
||||||
# if [[ -z "$ISPRERELEASE" ]]; then
|
|
||||||
# echo "Updating description on Docker Hub..."
|
|
||||||
# postgrest-release-dockerhub-description
|
|
||||||
# else
|
|
||||||
# echo "Skipping updating description for pre-release..."
|
|
||||||
# fi
|
|
||||||
|
|
||||||
Clean-Arm-Server:
|
|
||||||
name: Remove copied files from server
|
|
||||||
needs:
|
|
||||||
- Build-Cabal-Arm
|
|
||||||
- Release-Docker
|
|
||||||
if: ${{ always() && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/rel-')) }}
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
env:
|
|
||||||
REMOTE_DIR: ${{ needs.Build-Cabal-Arm.outputs.remotepath }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
- name: Remove uploaded files from server
|
|
||||||
uses: appleboy/ssh-action@master
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.SSH_ARM_HOST }}
|
|
||||||
username: ubuntu
|
|
||||||
key: ${{ secrets.SSH_ARM_PRIVATE_KEY }}
|
|
||||||
fingerprint: ${{ secrets.SSH_ARM_FINGERPRINT }}
|
|
||||||
envs: REMOTE_DIR
|
|
||||||
script: rm -rf $REMOTE_DIR
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
name: Loadtest
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Loadtest-Nix:
|
|
||||||
name: Loadtest (Nix)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Setup Nix Environment
|
|
||||||
uses: ./.github/actions/setup-nix
|
|
||||||
with:
|
|
||||||
tools: loadtest
|
|
||||||
- name: Run loadtest
|
|
||||||
run: |
|
|
||||||
postgrest-loadtest-against main
|
|
||||||
postgrest-loadtest-report > loadtest/loadtest.md
|
|
||||||
- name: Upload report
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
|
||||||
with:
|
|
||||||
name: loadtest.md
|
|
||||||
path: loadtest/loadtest.md
|
|
||||||
if-no-files-found: error
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
name: Upload Reports
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows: ["Loadtest"]
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
upload:
|
|
||||||
name: Loadtest
|
|
||||||
permissions:
|
|
||||||
checks: write
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
||||||
steps:
|
|
||||||
- name: Download from Artifacts
|
|
||||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
|
|
||||||
with:
|
|
||||||
github-token: ${{ github.token }}
|
|
||||||
run-id: ${{ github.event.workflow_run.id }}
|
|
||||||
name: loadtest.md
|
|
||||||
path: artifacts
|
|
||||||
- name: Upload to GitHub Checks
|
|
||||||
uses: LouisBrunner/checks-action@6b626ffbad7cc56fd58627f774b9067e6118af23 # v2.0.0
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
sha: ${{ github.event.workflow_run.head_sha }}
|
|
||||||
name: Loadtest Results
|
|
||||||
conclusion: neutral
|
|
||||||
output: |
|
|
||||||
{"summary":""}
|
|
||||||
output_text_description_file: artifacts/loadtest.md
|
|
||||||
Reference in New Issue
Block a user