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 }}