diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..5ac4ef1c3 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,104 @@ +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/node:18.18.0 + 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