version: 2.1

jobs:
  build-amd64:
    machine:
      image: ubuntu-2004:current
    steps:
      - checkout
      - run:
          name: Prepare .env file
          command: |
            cp apps/dokploy/.env.production.example .env.production
            cp apps/dokploy/.env.production.example apps/dokploy/.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"
            elif [ "${CIRCLE_BRANCH}" == "canary" ]; then
              TAG="canary"
            else
              TAG="feature"
            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 apps/dokploy/.env.production.example .env.production
            cp apps/dokploy/.env.production.example apps/dokploy/.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"
            elif [ "${CIRCLE_BRANCH}" == "canary" ]; then
              TAG="canary"
            else
              TAG="feature"
            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('./apps/dokploy/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}
            elif [ "${CIRCLE_BRANCH}" == "canary" ]; then
              TAG="canary"
              docker manifest create dokploy/dokploy:${TAG} \
                dokploy/dokploy:${TAG}-amd64 \
                dokploy/dokploy:${TAG}-arm64
              docker manifest push dokploy/dokploy:${TAG}
            else
              TAG="feature"
              docker manifest create dokploy/dokploy:${TAG} \
                dokploy/dokploy:${TAG}-amd64 \
                dokploy/dokploy:${TAG}-arm64
              docker manifest push dokploy/dokploy:${TAG}
            fi

workflows:
  build-all:
    jobs:
      - build-amd64:
          filters:
            branches:
              only:
                - main
                - canary
                - fix/nixpacks-version
      - build-arm64:
          filters:
            branches:
              only:
                - main
                - canary
                - fix/nixpacks-version
      - combine-manifests:
          requires:
            - build-amd64
            - build-arm64
          filters:
            branches:
              only:
                - main
                - canary
                - fix/nixpacks-version
