mirror of
https://github.com/makeplane/plane.git
synced 2026-08-29 10:08:51 +02:00
Every image in Branch Build CE now builds one platform per job on a runner native to that architecture, pushes an untagged manifest addressed by digest, and is stitched into the tagged multi-arch index by a paired merge job. arm64 was previously produced either under QEMU emulation or on the shared makeplane/plane-dev Docker Build Cloud builder. Both paths are gone: the buildx driver is pinned to the local docker-container driver, since a leg building its own architecture natively gains nothing from a remote builder. Notable details: - cache-scope-suffix is set per architecture. The registry cache manifest is not platform-indexed, so both legs writing :buildcache would overwrite each other and roughly half the legs would go cold every run. - The merge asserts the platform set. A merge that produced a single-platform index still exits 0, so it is checked rather than assumed. - AIO asset generation is split into its own job. Run inside a matrix, both legs would collide on the aio-assets-dist artifact name and could embed different generated content under a single manifest tag. - Jobs that consume an image by tag (AIO, upload_build_assets, publish_release) now depend on the merge jobs. The tags do not exist until the merge runs. Nothing externally visible changes: the images carry the same names and the same tags. Claude-Session: https://claude.ai/code/session_01U45dsLe5GFmTsfpifuNcGQ
653 lines
28 KiB
YAML
653 lines
28 KiB
YAML
name: Branch Build CE
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
build_type:
|
|
description: "Type of build to run"
|
|
required: true
|
|
type: choice
|
|
default: "Build"
|
|
options:
|
|
- "Build"
|
|
- "Release"
|
|
releaseVersion:
|
|
description: "Release Version"
|
|
type: string
|
|
default: v0.0.0
|
|
isPrerelease:
|
|
description: "Is Pre-release"
|
|
type: boolean
|
|
default: false
|
|
required: true
|
|
arm64:
|
|
description: "Build for ARM64 architecture"
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
aio_build:
|
|
description: "Build for AIO docker image"
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
push:
|
|
branches:
|
|
- preview
|
|
- canary
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
TARGET_BRANCH: ${{ github.ref_name }}
|
|
ARM64_BUILD: ${{ github.event.inputs.arm64 }}
|
|
BUILD_TYPE: ${{ github.event.inputs.build_type }}
|
|
RELEASE_VERSION: ${{ github.event.inputs.releaseVersion }}
|
|
IS_PRERELEASE: ${{ github.event.inputs.isPrerelease }}
|
|
AIO_BUILD: ${{ github.event.inputs.aio_build }}
|
|
|
|
jobs:
|
|
branch_build_setup:
|
|
name: Build Setup
|
|
runs-on: ubuntu-24.04
|
|
outputs:
|
|
gh_branch_name: ${{ steps.set_env_variables.outputs.TARGET_BRANCH }}
|
|
# Per-architecture native build matrix. Every image builds one platform per
|
|
# job on a runner native to it, so there is no single buildx driver/platform
|
|
# pair for the run and no Docker Build Cloud endpoint.
|
|
gh_build_matrix: ${{ steps.set_env_variables.outputs.BUILD_MATRIX }}
|
|
gh_expected_platforms: ${{ steps.set_env_variables.outputs.EXPECTED_PLATFORMS }}
|
|
|
|
dh_img_web: ${{ steps.set_env_variables.outputs.DH_IMG_WEB }}
|
|
dh_img_space: ${{ steps.set_env_variables.outputs.DH_IMG_SPACE }}
|
|
dh_img_admin: ${{ steps.set_env_variables.outputs.DH_IMG_ADMIN }}
|
|
dh_img_live: ${{ steps.set_env_variables.outputs.DH_IMG_LIVE }}
|
|
dh_img_backend: ${{ steps.set_env_variables.outputs.DH_IMG_BACKEND }}
|
|
dh_img_proxy: ${{ steps.set_env_variables.outputs.DH_IMG_PROXY }}
|
|
dh_img_aio: ${{ steps.set_env_variables.outputs.DH_IMG_AIO }}
|
|
|
|
build_type: ${{steps.set_env_variables.outputs.BUILD_TYPE}}
|
|
build_release: ${{ steps.set_env_variables.outputs.BUILD_RELEASE }}
|
|
build_prerelease: ${{ steps.set_env_variables.outputs.BUILD_PRERELEASE }}
|
|
release_version: ${{ steps.set_env_variables.outputs.RELEASE_VERSION }}
|
|
aio_build: ${{ steps.set_env_variables.outputs.AIO_BUILD }}
|
|
|
|
steps:
|
|
- id: set_env_variables
|
|
name: Set Environment Variables
|
|
run: |
|
|
# One runner per architecture. arm64 is built natively rather than under
|
|
# emulation, so there is no cloud builder and no QEMU leg. Both labels are
|
|
# GitHub-hosted 4 vCPU / 16 GB instances, so a single matrix covers the
|
|
# JS monorepo images as well as the light ones.
|
|
AMD64='{"arch":"amd64","platform":"linux/amd64","runner":"ubuntu-24.04"}'
|
|
ARM64='{"arch":"arm64","platform":"linux/arm64","runner":"ubuntu-24.04-arm"}'
|
|
|
|
if [ "${{ env.ARM64_BUILD }}" == "true" ] || ([ "${{ env.BUILD_TYPE }}" == "Release" ] && [ "${{ env.IS_PRERELEASE }}" != "true" ]); then
|
|
echo "BUILD_MATRIX=[${AMD64},${ARM64}]" >> $GITHUB_OUTPUT
|
|
echo "EXPECTED_PLATFORMS=linux/amd64,linux/arm64" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "BUILD_MATRIX=[${AMD64}]" >> $GITHUB_OUTPUT
|
|
echo "EXPECTED_PLATFORMS=linux/amd64" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
BR_NAME=$( echo "${{ env.TARGET_BRANCH }}" |sed 's/[^a-zA-Z0-9.-]//g')
|
|
echo "TARGET_BRANCH=$BR_NAME" >> $GITHUB_OUTPUT
|
|
|
|
echo "DH_IMG_WEB=plane-frontend" >> $GITHUB_OUTPUT
|
|
echo "DH_IMG_SPACE=plane-space" >> $GITHUB_OUTPUT
|
|
echo "DH_IMG_ADMIN=plane-admin" >> $GITHUB_OUTPUT
|
|
echo "DH_IMG_LIVE=plane-live" >> $GITHUB_OUTPUT
|
|
echo "DH_IMG_BACKEND=plane-backend" >> $GITHUB_OUTPUT
|
|
echo "DH_IMG_PROXY=plane-proxy" >> $GITHUB_OUTPUT
|
|
echo "DH_IMG_AIO=plane-aio-community" >> $GITHUB_OUTPUT
|
|
|
|
echo "BUILD_TYPE=${{env.BUILD_TYPE}}" >> $GITHUB_OUTPUT
|
|
BUILD_RELEASE=false
|
|
BUILD_PRERELEASE=false
|
|
RELVERSION="latest"
|
|
|
|
BUILD_AIO=${{ env.AIO_BUILD }}
|
|
|
|
if [ "${{ env.BUILD_TYPE }}" == "Release" ]; then
|
|
FLAT_RELEASE_VERSION=$(echo "${{ env.RELEASE_VERSION }}" | sed 's/[^a-zA-Z0-9.-]//g')
|
|
echo "FLAT_RELEASE_VERSION=${FLAT_RELEASE_VERSION}" >> $GITHUB_OUTPUT
|
|
|
|
semver_regex="^v([0-9]+)\.([0-9]+)\.([0-9]+)(-[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"
|
|
if [[ ! $FLAT_RELEASE_VERSION =~ $semver_regex ]]; then
|
|
echo "Invalid Release Version Format : $FLAT_RELEASE_VERSION"
|
|
echo "Please provide a valid SemVer version"
|
|
echo "e.g. v1.2.3 or v1.2.3-alpha-1"
|
|
echo "Exiting the build process"
|
|
exit 1 # Exit with status 1 to fail the step
|
|
fi
|
|
BUILD_RELEASE=true
|
|
RELVERSION=$FLAT_RELEASE_VERSION
|
|
|
|
if [ "${{ env.IS_PRERELEASE }}" == "true" ]; then
|
|
BUILD_PRERELEASE=true
|
|
fi
|
|
|
|
BUILD_AIO=true
|
|
fi
|
|
|
|
echo "BUILD_RELEASE=${BUILD_RELEASE}" >> $GITHUB_OUTPUT
|
|
echo "BUILD_PRERELEASE=${BUILD_PRERELEASE}" >> $GITHUB_OUTPUT
|
|
echo "RELEASE_VERSION=${RELVERSION}" >> $GITHUB_OUTPUT
|
|
echo "AIO_BUILD=${BUILD_AIO}" >> $GITHUB_OUTPUT
|
|
|
|
- id: checkout_files
|
|
name: Checkout Files
|
|
uses: actions/checkout@v6
|
|
|
|
# Native per-architecture image builds.
|
|
#
|
|
# Each branch_build_push_<image> job below builds ONE platform on a runner
|
|
# native to it and pushes an untagged manifest addressed only by its digest.
|
|
# The paired branch_merge_<image> job stitches those digests into the
|
|
# multi-arch manifest and applies the tags -- so any job consuming an image BY
|
|
# TAG must depend on the merge job, never the build job. GitHub does not warn
|
|
# when a needs: entry is missing; the dependent job simply runs early.
|
|
#
|
|
# buildx-driver is pinned to the local docker-container driver: each leg builds
|
|
# its own architecture natively, so a remote builder buys nothing. The Docker
|
|
# Build Cloud path (makeplane/plane-dev) is gone from this workflow rather than
|
|
# left as a no-op switch.
|
|
branch_build_push_admin:
|
|
name: Build-Push Admin Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 90
|
|
needs: [branch_build_setup]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
steps:
|
|
- name: Admin Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_admin }}
|
|
build-context: .
|
|
dockerfile-path: ./apps/admin/Dockerfile.admin
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
# Without a per-arch cache ref the two legs overwrite each other's
|
|
# buildcache tag, since it is not platform-indexed.
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-admin-${{ matrix.arch }}
|
|
|
|
branch_merge_admin:
|
|
name: Merge Admin Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_admin]
|
|
steps:
|
|
- name: Merge Admin Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_admin }}
|
|
digest-artifact-pattern: digest-admin-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
branch_build_push_web:
|
|
name: Build-Push Web Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 90
|
|
needs: [branch_build_setup]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
steps:
|
|
- name: Web Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_web }}
|
|
build-context: .
|
|
dockerfile-path: ./apps/web/Dockerfile.web
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
# Without a per-arch cache ref the two legs overwrite each other's
|
|
# buildcache tag, since it is not platform-indexed.
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-web-${{ matrix.arch }}
|
|
|
|
branch_merge_web:
|
|
name: Merge Web Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_web]
|
|
steps:
|
|
- name: Merge Web Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_web }}
|
|
digest-artifact-pattern: digest-web-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
branch_build_push_space:
|
|
name: Build-Push Space Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 90
|
|
needs: [branch_build_setup]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
steps:
|
|
- name: Space Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_space }}
|
|
build-context: .
|
|
dockerfile-path: ./apps/space/Dockerfile.space
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
# Without a per-arch cache ref the two legs overwrite each other's
|
|
# buildcache tag, since it is not platform-indexed.
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-space-${{ matrix.arch }}
|
|
|
|
branch_merge_space:
|
|
name: Merge Space Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_space]
|
|
steps:
|
|
- name: Merge Space Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_space }}
|
|
digest-artifact-pattern: digest-space-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
branch_build_push_live:
|
|
name: Build-Push Live Collaboration Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 90
|
|
needs: [branch_build_setup]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
steps:
|
|
- name: Live Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_live }}
|
|
build-context: .
|
|
dockerfile-path: ./apps/live/Dockerfile.live
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
# Without a per-arch cache ref the two legs overwrite each other's
|
|
# buildcache tag, since it is not platform-indexed.
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-live-${{ matrix.arch }}
|
|
|
|
branch_merge_live:
|
|
name: Merge Live Collaboration Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_live]
|
|
steps:
|
|
- name: Merge Live Collaboration Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_live }}
|
|
digest-artifact-pattern: digest-live-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
branch_build_push_api:
|
|
name: Build-Push API Server Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 60
|
|
needs: [branch_build_setup]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
steps:
|
|
- name: Backend Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_backend }}
|
|
build-context: ./apps/api
|
|
dockerfile-path: ./apps/api/Dockerfile.api
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
# Without a per-arch cache ref the two legs overwrite each other's
|
|
# buildcache tag, since it is not platform-indexed.
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-api-${{ matrix.arch }}
|
|
|
|
branch_merge_api:
|
|
name: Merge API Server Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_api]
|
|
steps:
|
|
- name: Merge API Server Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_backend }}
|
|
digest-artifact-pattern: digest-api-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
branch_build_push_proxy:
|
|
name: Build-Push Proxy Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 60
|
|
needs: [branch_build_setup]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
steps:
|
|
- name: Proxy Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_proxy }}
|
|
build-context: ./apps/proxy
|
|
dockerfile-path: ./apps/proxy/Dockerfile.ce
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
# Without a per-arch cache ref the two legs overwrite each other's
|
|
# buildcache tag, since it is not platform-indexed.
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-proxy-${{ matrix.arch }}
|
|
|
|
branch_merge_proxy:
|
|
name: Merge Proxy Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_proxy]
|
|
steps:
|
|
- name: Merge Proxy Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_proxy }}
|
|
digest-artifact-pattern: digest-proxy-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
# Split out of branch_build_push_aio: build.sh generates the dist/ assets and
|
|
# uploads them as one artifact. Run inside a matrix, both legs would collide on
|
|
# that artifact name and could embed different generated content under a single
|
|
# manifest tag. Generate once, consume twice.
|
|
prepare_aio_assets:
|
|
if: ${{ needs.branch_build_setup.outputs.aio_build == 'true' }}
|
|
name: Prepare AIO Assets
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 30
|
|
needs: [branch_build_setup]
|
|
outputs:
|
|
aio_build_version: ${{ steps.prepare_aio_assets.outputs.AIO_BUILD_VERSION }}
|
|
steps:
|
|
- name: Checkout Files
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Prepare AIO Assets
|
|
id: prepare_aio_assets
|
|
run: |
|
|
cd deployments/aio/community
|
|
|
|
if [ "${{ needs.branch_build_setup.outputs.build_type }}" == "Release" ]; then
|
|
aio_version=${{ needs.branch_build_setup.outputs.release_version }}
|
|
else
|
|
aio_version=${{ needs.branch_build_setup.outputs.gh_branch_name }}
|
|
fi
|
|
bash ./build.sh --release $aio_version
|
|
echo "AIO_BUILD_VERSION=${aio_version}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Upload AIO Assets
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
path: ./deployments/aio/community/dist
|
|
name: aio-assets-dist
|
|
|
|
# AIO pulls the other images in by tag, so it needs the merge jobs -- the tags
|
|
# do not exist until the merges run.
|
|
branch_build_push_aio:
|
|
if: ${{ needs.branch_build_setup.outputs.aio_build == 'true' }}
|
|
name: Build-Push AIO Docker Image (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 90
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJSON(needs.branch_build_setup.outputs.gh_build_matrix) }}
|
|
needs:
|
|
- branch_build_setup
|
|
- prepare_aio_assets
|
|
- branch_merge_admin
|
|
- branch_merge_web
|
|
- branch_merge_space
|
|
- branch_merge_live
|
|
- branch_merge_api
|
|
- branch_merge_proxy
|
|
steps:
|
|
- name: AIO Build and Push
|
|
uses: makeplane/actions/build-push@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_aio }}
|
|
build-context: ./deployments/aio/community
|
|
dockerfile-path: ./deployments/aio/community/Dockerfile
|
|
buildx-driver: docker-container
|
|
buildx-version: latest
|
|
buildx-platforms: ${{ matrix.platform }}
|
|
buildx-endpoint: ""
|
|
push-by-digest: "true"
|
|
cache-scope-suffix: -${{ matrix.arch }}
|
|
digest-artifact-name: digest-aio-${{ matrix.arch }}
|
|
additional-assets: aio-assets-dist
|
|
additional-assets-dir: ./deployments/aio/community/dist
|
|
build-args: |
|
|
PLANE_VERSION=${{ needs.prepare_aio_assets.outputs.aio_build_version }}
|
|
|
|
branch_merge_aio:
|
|
name: Merge AIO Manifest
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
needs: [branch_build_setup, branch_build_push_aio]
|
|
steps:
|
|
- name: Merge AIO Manifest
|
|
uses: makeplane/actions/merge-manifest@v1.6.0
|
|
with:
|
|
build-release: ${{ needs.branch_build_setup.outputs.build_release }}
|
|
build-prerelease: ${{ needs.branch_build_setup.outputs.build_prerelease }}
|
|
release-version: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
docker-image-owner: makeplane
|
|
docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_aio }}
|
|
digest-artifact-pattern: digest-aio-*
|
|
expected-platforms: ${{ needs.branch_build_setup.outputs.gh_expected_platforms }}
|
|
|
|
upload_build_assets:
|
|
name: Upload Build Assets
|
|
runs-on: ubuntu-24.04
|
|
needs:
|
|
- branch_build_setup
|
|
- branch_merge_admin
|
|
- branch_merge_web
|
|
- branch_merge_space
|
|
- branch_merge_live
|
|
- branch_merge_api
|
|
- branch_merge_proxy
|
|
steps:
|
|
- name: Checkout Files
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Update Assets
|
|
run: |
|
|
if [ "${{ needs.branch_build_setup.outputs.build_type }}" == "Release" ]; then
|
|
REL_VERSION=${{ needs.branch_build_setup.outputs.release_version }}
|
|
else
|
|
REL_VERSION=${{ needs.branch_build_setup.outputs.gh_branch_name }}
|
|
fi
|
|
|
|
cp ./deployments/cli/community/install.sh deployments/cli/community/setup.sh
|
|
sed -i 's/${APP_RELEASE:-stable}/${APP_RELEASE:-'${REL_VERSION}'}/g' deployments/cli/community/docker-compose.yml
|
|
# sed -i 's/APP_RELEASE=stable/APP_RELEASE='${REL_VERSION}'/g' deployments/cli/community/variables.env
|
|
|
|
- name: Upload Assets
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: community-assets
|
|
path: |
|
|
./deployments/cli/community/setup.sh
|
|
./deployments/cli/community/restore.sh
|
|
./deployments/cli/community/restore-airgapped.sh
|
|
./deployments/cli/community/docker-compose.yml
|
|
./deployments/cli/community/variables.env
|
|
./deployments/swarm/community/swarm.sh
|
|
|
|
publish_release:
|
|
# Deliberately NO status function here. The default success() gate is what
|
|
# stops a release when any image fails: a failed build leg skips its
|
|
# branch_merge_* job, and success() rejects a skipped need.
|
|
#
|
|
# That is also why branch_merge_aio is NOT in needs below. AIO runs last (it
|
|
# needs every other merge), the GitHub release ships no AIO artifact, and
|
|
# gating on it would let one flaky AIO leg silently discard a finished release.
|
|
if: ${{ needs.branch_build_setup.outputs.build_type == 'Release' }}
|
|
name: Build Release
|
|
runs-on: ubuntu-24.04
|
|
needs:
|
|
[
|
|
branch_build_setup,
|
|
branch_merge_admin,
|
|
branch_merge_web,
|
|
branch_merge_space,
|
|
branch_merge_live,
|
|
branch_merge_api,
|
|
branch_merge_proxy,
|
|
]
|
|
env:
|
|
REL_VERSION: ${{ needs.branch_build_setup.outputs.release_version }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Update Assets
|
|
run: |
|
|
cp ./deployments/cli/community/install.sh deployments/cli/community/setup.sh
|
|
sed -i 's/${APP_RELEASE:-stable}/${APP_RELEASE:-'${REL_VERSION}'}/g' deployments/cli/community/docker-compose.yml
|
|
# sed -i 's/APP_RELEASE=stable/APP_RELEASE='${REL_VERSION}'/g' deployments/cli/community/variables.env
|
|
|
|
- name: Create Release
|
|
id: create_release
|
|
uses: softprops/action-gh-release@v2.6.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
|
|
with:
|
|
tag_name: ${{ env.REL_VERSION }}
|
|
name: ${{ env.REL_VERSION }}
|
|
target_commitish: ${{ github.sha }}
|
|
draft: false
|
|
prerelease: ${{ env.IS_PRERELEASE }}
|
|
generate_release_notes: true
|
|
files: |
|
|
${{ github.workspace }}/deployments/cli/community/setup.sh
|
|
${{ github.workspace }}/deployments/cli/community/restore.sh
|
|
${{ github.workspace }}/deployments/cli/community/restore-airgapped.sh
|
|
${{ github.workspace }}/deployments/cli/community/docker-compose.yml
|
|
${{ github.workspace }}/deployments/cli/community/variables.env
|
|
${{ github.workspace }}/deployments/swarm/community/swarm.sh
|