Skip to content

Release

Release #314

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
version:
type: string
description: Version
required: true
tag:
type: string
description: Tag
required: true
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
RUSTFLAGS: "-Dwarnings"
permissions:
contents: write
packages: write
pull-requests: read
jobs:
# semver:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/github-script@v7
# with:
# script: |
# const r = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
# if (!r.test("${{ github.event.inputs.version }}")) {
# core.setFailed(`Action failed with an invalid semver.`);
# }
# binary:
# strategy:
# matrix:
# version: [14, 15, 16, 17]
# arch: ["x86_64", "aarch64"]
# runs-on: ubuntu-20.04
# env:
# SEMVER: ${{ github.event.inputs.version }}
# VERSION: ${{ matrix.version }}
# ARCH: ${{ matrix.arch }}
# needs: ["semver"]
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# - name: Set up Environment
# run: |
# sudo apt-get remove -y '^postgres.*' '^libpq.*' '^clang.*' '^llvm.*' '^libclang.*' '^libllvm.*' '^mono-llvm.*'
# sudo apt-get purge -y '^postgres.*' '^libpq.*' '^clang.*' '^llvm.*' '^libclang.*' '^libllvm.*' '^mono-llvm.*'
# sudo apt-get update
# sudo apt-get install -y build-essential crossbuild-essential-arm64
# sudo apt-get install -y qemu-user-static
# touch ~/.cargo/config.toml
# echo 'target.aarch64-unknown-linux-gnu.linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config.toml
# echo 'target.aarch64-unknown-linux-gnu.runner = ["qemu-aarch64-static", "-L", "/usr/aarch64-linux-gnu"]' >> ~/.cargo/config.toml
# rustup target add x86_64-unknown-linux-gnu
# rustup target add aarch64-unknown-linux-gnu
# - name: Set up Sccache
# uses: mozilla-actions/[email protected]
# - name: Set up Cache
# uses: actions/cache/restore@v4
# id: cache
# with:
# path: |
# ~/.cargo/registry/index/
# ~/.cargo/registry/cache/
# ~/.cargo/git/db/
# key: ${{ github.job }}-${{ hashFiles('./Cargo.lock') }}-${{ matrix.version }}-${{ matrix.arch }}
# - name: Build
# run: |
# export PGRX_PG_CONFIG_PATH=$(pwd)/vendor/pg${VERSION}_${ARCH}_debian/pg_config/pg_config
# export PGRX_TARGET_INFO_PATH_PG$VERSION=$(pwd)/vendor/pg${VERSION}_${ARCH}_debian/pgrx_binding
# cargo build --package pgvectors --lib --features pg$VERSION --target $ARCH-unknown-linux-gnu --release
# ./tools/schema.sh --features pg$VERSION --target $ARCH-unknown-linux-gnu --release | expand -t 4 > ./target/schema.sql
# - name: Package
# run: |
# export PLATFORM=$(echo $ARCH | sed 's/aarch64/arm64/; s/x86_64/amd64/')
# ./scripts/package.sh
# - name: Upload
# env:
# GH_TOKEN: ${{ github.token }}
# run: |
# export TAG=${{ github.event.inputs.tag }}
# export PLATFORM=$(echo $ARCH | sed 's/aarch64/arm64/; s/x86_64/amd64/')
# gh release upload --clobber $TAG ./build/vectors-pg${VERSION}_${ARCH}-unknown-linux-gnu_${SEMVER}.zip
# gh release upload --clobber $TAG ./build/vectors-pg${VERSION}_${SEMVER}_${PLATFORM}.deb
# - name: Post Set up Cache
# uses: actions/cache/save@v4
# if: ${{ !steps.cache.outputs.cache-hit }}
# with:
# path: |
# ~/.cargo/registry/index/
# ~/.cargo/registry/cache/
# ~/.cargo/git/db/
# key: ${{ github.job }}-${{ hashFiles('./Cargo.lock') }}-${{ matrix.version }}-${{ matrix.arch }}
# docker_binary_release:
# needs: ["binary", "semver"]
# strategy:
# matrix:
# version: [14, 15, 16, 17]
# platform: ["amd64", "arm64"]
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# - name: Download
# env:
# GH_TOKEN: ${{ github.token }}
# run: |
# gh release download ${{ github.event.inputs.tag }} --pattern "vectors-pg${{ matrix.version }}_${{ github.event.inputs.version }}_${{ matrix.platform }}.deb" --output pgvecto-rs-binary-release.deb
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v3
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v3
# - name: Login to Docker Hub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKERIO_USERNAME }}
# password: ${{ secrets.DOCKERIO_TOKEN }}
# - name: Push binary release to Docker Registry
# uses: docker/build-push-action@v4
# with:
# context: .
# push: true
# platforms: "linux/${{ matrix.platform }}"
# file: ./docker/binary_release.Dockerfile
# tags: tensorchord/pgvecto-rs-binary:pg${{ matrix.version }}-v${{ github.event.inputs.version }}-${{ matrix.platform }}
docker_release:
# needs: ["docker_binary_release", "semver"]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [14, 15, 16, 17]
rootless: [true, false]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Generate docker image tags
id: metadata
uses: docker/metadata-action@v5
with:
flavor: |
# Disable latest tag
latest=false
images: |
name=ghcr.io/tensorchord/pgvecto-rs
name=tensorchord/pgvecto-rs
tags: |
type=raw,value=pg${{ matrix.version }}-v${{ github.event.inputs.version }}-rootless,enable=${{ matrix.rootless }}
type=raw,value=pg${{ matrix.version }}-v${{ github.event.inputs.version }},enable=${{ !matrix.rootless }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/[email protected]
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERIO_USERNAME }}
password: ${{ secrets.DOCKERIO_TOKEN }}
- name: Push postgres with pgvecto.rs to Docker Registry
uses: docker/build-push-action@v4
with:
context: .
push: true
platforms: "linux/amd64,linux/arm64"
file: ${{ matrix.rootless == 'true' && './docker/pgvecto-rs-rootless.Dockerfile' || './docker/pgvecto-rs.Dockerfile' }}
build-args: |
FROM_TAG=pg${{ matrix.version }}-v${{ github.event.inputs.version }}
POSTGRES_VERSION=${{ matrix.version }}
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}