version: 2.1 jobs: build-amd64: machine: image: ubuntu-2004:current steps: - checkout - run: name: Prepare .env file command: | cp .env.production.example .env.production - run: name: Build and push AMD64 image command: | docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN if [ "${CIRCLE_BRANCH}" == "main" ]; then TAG="latest" else TAG="canary" fi docker build --platform linux/amd64 -t dokploy/dokploy:${TAG}-amd64 . docker push dokploy/dokploy:${TAG}-amd64 build-arm64: machine: image: ubuntu-2004:current resource_class: arm.large steps: - checkout - run: name: Prepare .env file command: | cp .env.production.example .env.production - run: name: Build and push ARM64 image command: | docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN if [ "${CIRCLE_BRANCH}" == "main" ]; then TAG="latest" else TAG="canary" fi docker build --platform linux/arm64 -t dokploy/dokploy:${TAG}-arm64 . docker push dokploy/dokploy:${TAG}-arm64 combine-manifests: docker: - image: cimg/base:stable steps: - checkout - setup_remote_docker - run: name: Create and push multi-arch manifest command: | docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN if [ "${CIRCLE_BRANCH}" == "main" ]; then VERSION=$(node -p "require('./package.json').version") echo $VERSION TAG="latest" docker manifest create dokploy/dokploy:${TAG} \ dokploy/dokploy:${TAG}-amd64 \ dokploy/dokploy:${TAG}-arm64 docker manifest push dokploy/dokploy:${TAG} docker manifest create dokploy/dokploy:${VERSION} \ dokploy/dokploy:${TAG}-amd64 \ dokploy/dokploy:${TAG}-arm64 docker manifest push dokploy/dokploy:${VERSION} else TAG="canary" docker manifest create dokploy/dokploy:${TAG} \ dokploy/dokploy:${TAG}-amd64 \ dokploy/dokploy:${TAG}-arm64 docker manifest push dokploy/dokploy:${TAG} fi workflows: version: 2 build-all: jobs: - build-amd64: filters: branches: only: - main - canary - build-arm64: filters: branches: only: - main - canary - combine-manifests: requires: - build-amd64 - build-arm64 filters: branches: only: - main - canary