mirror of
https://github.com/coollabsio/coolify.git
synced 2026-08-24 02:24:11 -05:00
Publish branch builds under immutable commit SHA tags, then promote the released image to its version tag and stable releases to latest.
108 lines
3.6 KiB
YAML
108 lines
3.6 KiB
YAML
name: Release Coolify
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
env:
|
|
GITHUB_REGISTRY: ghcr.io
|
|
DOCKER_REGISTRY: docker.io
|
|
IMAGE_NAME: coollabsio/coolify
|
|
|
|
jobs:
|
|
promote-image:
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
ref: ${{ github.event.release.tag_name }}
|
|
|
|
- uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to ${{ env.GITHUB_REGISTRY }}
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.GITHUB_REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Login to ${{ env.DOCKER_REGISTRY }}
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.DOCKER_REGISTRY }}
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
|
|
- name: Resolve release image
|
|
id: release
|
|
env:
|
|
TAG_NAME: ${{ github.event.release.tag_name }}
|
|
run: |
|
|
if [[ ! "${TAG_NAME}" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then
|
|
echo "Unsupported release tag: ${TAG_NAME}"
|
|
exit 1
|
|
fi
|
|
|
|
VERSION="${TAG_NAME#v}"
|
|
RELEASE_SHA=$(git rev-list -n 1 "${TAG_NAME}")
|
|
CONFIG_VERSION=$(docker run --rm -v "$(pwd):/app" -w /app php:8.2-alpine3.16 php bootstrap/getVersion.php)
|
|
|
|
if [[ "${CONFIG_VERSION}" != "${VERSION}" ]]; then
|
|
echo "Release tag ${VERSION} does not match config version ${CONFIG_VERSION}."
|
|
exit 1
|
|
fi
|
|
|
|
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
echo "sha=${RELEASE_SHA}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Promote version on ${{ env.GITHUB_REGISTRY }}
|
|
env:
|
|
REGISTRY: ${{ env.GITHUB_REGISTRY }}
|
|
VERSION: ${{ steps.release.outputs.version }}
|
|
RELEASE_SHA: ${{ steps.release.outputs.sha }}
|
|
run: |
|
|
IMAGE="${REGISTRY}/${IMAGE_NAME}"
|
|
SOURCE_TAG="sha-${RELEASE_SHA}"
|
|
docker buildx imagetools create "${IMAGE}:${SOURCE_TAG}" --tag "${IMAGE}:${VERSION}"
|
|
|
|
- name: Promote version on ${{ env.DOCKER_REGISTRY }}
|
|
env:
|
|
REGISTRY: ${{ env.DOCKER_REGISTRY }}
|
|
VERSION: ${{ steps.release.outputs.version }}
|
|
RELEASE_SHA: ${{ steps.release.outputs.sha }}
|
|
run: |
|
|
IMAGE="${REGISTRY}/${IMAGE_NAME}"
|
|
SOURCE_TAG="sha-${RELEASE_SHA}"
|
|
docker buildx imagetools create "${IMAGE}:${SOURCE_TAG}" --tag "${IMAGE}:${VERSION}"
|
|
|
|
- name: Promote latest on ${{ env.GITHUB_REGISTRY }}
|
|
if: ${{ ! github.event.release.prerelease }}
|
|
env:
|
|
REGISTRY: ${{ env.GITHUB_REGISTRY }}
|
|
RELEASE_SHA: ${{ steps.release.outputs.sha }}
|
|
run: |
|
|
IMAGE="${REGISTRY}/${IMAGE_NAME}"
|
|
SOURCE_TAG="sha-${RELEASE_SHA}"
|
|
docker buildx imagetools create "${IMAGE}:${SOURCE_TAG}" --tag "${IMAGE}:latest"
|
|
|
|
- name: Promote latest on ${{ env.DOCKER_REGISTRY }}
|
|
if: ${{ ! github.event.release.prerelease }}
|
|
env:
|
|
REGISTRY: ${{ env.DOCKER_REGISTRY }}
|
|
RELEASE_SHA: ${{ steps.release.outputs.sha }}
|
|
run: |
|
|
IMAGE="${REGISTRY}/${IMAGE_NAME}"
|
|
SOURCE_TAG="sha-${RELEASE_SHA}"
|
|
docker buildx imagetools create "${IMAGE}:${SOURCE_TAG}" --tag "${IMAGE}:latest"
|
|
|
|
- uses: sarisia/actions-status-discord@v1
|
|
if: always()
|
|
with:
|
|
webhook: ${{ secrets.DISCORD_WEBHOOK_PROD_RELEASE_CHANNEL }}
|