ghcr does not support uppercase letters, which was not a problem when testing in my fork. But the PostgREST org's name obviously has uppercase letters in it, so we need to lowercase these for the ghcr namespace.
227 lines
9.0 KiB
YAML
227 lines
9.0 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- devel
|
|
- v*
|
|
|
|
concurrency:
|
|
# Terminate all previous runs of the same workflow for the same tag.
|
|
group: release-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
name: Build
|
|
uses: ./.github/workflows/build.yaml
|
|
secrets:
|
|
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
|
|
|
|
|
github:
|
|
name: GitHub
|
|
permissions:
|
|
contents: write
|
|
runs-on: ubuntu-slim
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
- name: Check the version to be released
|
|
run: |
|
|
cabal_version="$(grep -oP '^version:\s*\K.*' postgrest.cabal)"
|
|
|
|
if [ "${GITHUB_REF_NAME}" != "devel" ] && [ "${GITHUB_REF_NAME}" != "v$cabal_version" ]; then
|
|
echo "Tagged version ($GITHUB_REF_NAME) does not match the one in postgrest.cabal (v$cabal_version). Aborting release..."
|
|
exit 1
|
|
fi
|
|
- name: Identify changes from CHANGELOG.md
|
|
run: |
|
|
if [ "${GITHUB_REF_NAME}" == "devel" ]; then
|
|
echo "Getting unreleased changes..."
|
|
sed -n "1,/## Unreleased/d;/## \[/q;p" CHANGELOG.md > CHANGES.md
|
|
else
|
|
version="$(grep -oP '^version:\s*\K.*' postgrest.cabal)"
|
|
echo "Propper release, 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: Download all artifacts
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
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-${GITHUB_REF_NAME}-linux-static-aarch64.tar.xz" \
|
|
-C artifacts/postgrest-linux-static-aarch64 postgrest
|
|
|
|
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-linux-static-x86-64.tar.xz" \
|
|
-C artifacts/postgrest-linux-static-x86-64 postgrest
|
|
|
|
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-macos-aarch64.tar.xz" \
|
|
-C artifacts/postgrest-macos-aarch64 postgrest
|
|
|
|
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-macos-x86-64.tar.xz" \
|
|
-C artifacts/postgrest-macos-x86-64 postgrest
|
|
|
|
tar cJvf "release-bundle/postgrest-${GITHUB_REF_NAME}-freebsd-x86-64.tar.xz" \
|
|
-C artifacts/postgrest-freebsd-x86-64 postgrest
|
|
|
|
zip --junk-paths "release-bundle/postgrest-${GITHUB_REF_NAME}-windows-x86-64.zip" \
|
|
artifacts/postgrest-windows-x86-64/postgrest.exe
|
|
|
|
- name: Save release bundle
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: release-bundle
|
|
path: release-bundle
|
|
if-no-files-found: error
|
|
|
|
- name: Publish release on GitHub
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
echo "Releasing version ${GITHUB_REF_NAME} on GitHub..."
|
|
|
|
if [ "${GITHUB_REF_NAME}" == "devel" ]; then
|
|
# To replace the existing release, we must first delete the old assets,
|
|
# then modify the release, then add the new assets.
|
|
gh release view devel --json assets \
|
|
| jq -r '.assets[] | .name' \
|
|
| xargs -rn1 \
|
|
gh release delete-asset -y devel
|
|
gh release edit devel \
|
|
-t devel \
|
|
--verify-tag \
|
|
-F CHANGES.md \
|
|
--prerelease
|
|
gh release upload --clobber devel release-bundle/*
|
|
else
|
|
gh release create "${GITHUB_REF_NAME}" \
|
|
-t "${GITHUB_REF_NAME}" \
|
|
--verify-tag \
|
|
-F CHANGES.md \
|
|
release-bundle/*
|
|
fi
|
|
|
|
|
|
docker:
|
|
name: Docker Hub
|
|
runs-on: ubuntu-24.04-arm
|
|
needs:
|
|
- github
|
|
if: |
|
|
vars.DOCKER_REPO && vars.DOCKER_USER
|
|
env:
|
|
DOCKER_REPO: ${{ vars.DOCKER_REPO }}
|
|
steps:
|
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
- name: Download aarch64 Docker image
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
name: postgrest-docker-aarch64
|
|
- name: Download x86-64 Docker image
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
name: postgrest-docker-x86-64
|
|
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
|
|
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
|
|
with:
|
|
username: ${{ vars.DOCKER_USER }}
|
|
password: ${{ secrets.DOCKER_PASS }}
|
|
- name: Publish images on Docker Hub
|
|
run: |
|
|
docker load -i postgrest-docker-aarch64.tar.gz
|
|
docker tag postgrest:latest "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-arm64"
|
|
docker push "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-arm64"
|
|
|
|
docker load -i postgrest-docker-x86-64.tar.gz
|
|
docker tag postgrest:latest "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-amd64"
|
|
docker push "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-amd64"
|
|
|
|
docker manifest create "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}" \
|
|
"$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-arm64" \
|
|
"$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-amd64"
|
|
docker manifest push "$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}"
|
|
|
|
# Only tag 'latest' for full releases
|
|
if [ "${GITHUB_REF_NAME}" != "devel" ]; then
|
|
echo "Pushing to 'latest' tag for full release of ${GITHUB_REF_NAME} ..."
|
|
docker manifest create "$DOCKER_REPO/postgrest:latest" \
|
|
"$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-arm64" \
|
|
"$DOCKER_REPO/postgrest:${GITHUB_REF_NAME}-linux-amd64"
|
|
docker manifest push "$DOCKER_REPO/postgrest:latest"
|
|
else
|
|
echo "Skipping push to 'latest' tag for pre-release..."
|
|
fi
|
|
|
|
- uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5.0.0
|
|
if: github.ref == 'refs/tags/devel'
|
|
name: Docker Hub Description
|
|
with:
|
|
username: ${{ vars.DOCKER_USER }}
|
|
password: ${{ secrets.DOCKER_PASS }}
|
|
repository: ${{ vars.DOCKER_REPO }}/postgrest
|
|
short-description: ${{ github.event.repository.description }}
|
|
readme-filepath: ./docker-hub-readme.md
|
|
|
|
|
|
ghcr:
|
|
name: GitHub Container Registry
|
|
runs-on: ubuntu-24.04-arm
|
|
needs:
|
|
- github
|
|
permissions:
|
|
packages: write
|
|
steps:
|
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
- name: Download aarch64 Docker image
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
name: postgrest-docker-aarch64
|
|
- name: Download x86-64 Docker image
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
name: postgrest-docker-x86-64
|
|
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
|
|
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Publish images on Docker Hub
|
|
run: |
|
|
docker load -i postgrest-docker-aarch64.tar.gz
|
|
docker tag postgrest:latest "ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-arm64"
|
|
docker push "ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-arm64"
|
|
|
|
docker load -i postgrest-docker-x86-64.tar.gz
|
|
docker tag postgrest:latest "ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-amd64"
|
|
docker push "ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-amd64"
|
|
|
|
docker manifest create "ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}" \
|
|
"ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-arm64" \
|
|
"ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-amd64"
|
|
docker manifest push "ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}"
|
|
|
|
# Only tag 'latest' for full releases
|
|
if [ "${GITHUB_REF_NAME}" != "devel" ]; then
|
|
echo "Pushing to 'latest' tag for full release of ${GITHUB_REF_NAME} ..."
|
|
docker manifest create "ghcr.io/${GITHUB_REPOSITORY,,}:latest" \
|
|
"ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-arm64" \
|
|
"ghcr.io/${GITHUB_REPOSITORY,,}:${GITHUB_REF_NAME}-linux-amd64"
|
|
docker manifest push "ghcr.io/${GITHUB_REPOSITORY,,}:latest"
|
|
else
|
|
echo "Skipping push to 'latest' tag for pre-release..."
|
|
fi
|
|
|
|
|