name: Build Docker images (scheduled)

on:
  workflow_dispatch:
  workflow_call:
  schedule:
    - cron: "0 1 * * *"

concurrency:
  group: docker-image-builds
  cancel-in-progress: false

jobs:
  latest-cpu:
    name: "Latest Accelerate CPU [dev]"
    runs-on:
      group: aws-general-8-plus
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
      - name: Get current date
        id: date
        run: |
          echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
      - name: Build and Push CPU
        uses: docker/build-push-action@v4
        with:
          file: docker/accelerate-cpu/Dockerfile
          push: true
          tags: |
            huggingface/accelerate:cpu-nightly
            huggingface/accelerate:cpu-nightly-${{ env.date }}

  latest-cuda:
    name: "Latest Accelerate GPU [dev]"
    runs-on:
      group: aws-g6-4xlarge-plus
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
      - name: Get current date
        id: date
        run: |
          echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
      - name: Build and Push GPU
        uses: docker/build-push-action@v4
        with:
          file: docker/accelerate-gpu/Dockerfile
          push: true
          tags: |
            huggingface/accelerate:gpu-nightly
            huggingface/accelerate:gpu-nightly-${{ env.date }}

  latest-cuda-deepspeed:
    name: "Latest Accelerate GPU DeepSpeed [dev]"
    runs-on:
      group: aws-g6-4xlarge-plus
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
      - name: Get current date
        id: date
        run: |
          echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
      - name: Build and Push GPU
        uses: docker/build-push-action@v4
        with:
          file: docker/accelerate-gpu-deepspeed/Dockerfile
          push: true
          tags: |
            huggingface/accelerate:gpu-deepspeed-nightly
            huggingface/accelerate:gpu-deepspeed-nightly-${{ env.date }}

  latest-cuda-fp8-transformerengine:
    name: "Latest Accelerate GPU FP8 TransformerEngine [dev]"
    runs-on:
      group: aws-g6-4xlarge-plus
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
      - name: Get current date
        id: date
        run: |
          echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
          # Get the previous month
          echo "base_year=$(date -d 'last month' '+%y')" >> $GITHUB_ENV
          echo "base_month=$(date -d 'last month' '+%m')" >> $GITHUB_ENV
      - name: Build and Push GPU
        uses: docker/build-push-action@v4
        with:
          file: benchmarks/fp8/transformer_engine/Dockerfile
          push: true
          tags: huggingface/accelerate:gpu-fp8-transformerengine-nightly-${{ env.date }}
          build-args: |
            BASE_YEAR=${{ env.base_year }}
            BASE_MONTH=${{ env.base_month }}