# Inspired by
# https://github.com/huggingface/peft/blob/main/.github/workflows/build_docker_images.yml
name: Builds

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

env:
  PYTHON_VERSION: "3.10"
#   CI_SLACK_CHANNEL: ${{ secrets.CI_DOCKER_CHANNEL }}

jobs:
  latest-cpu:
    name: "Build CPU"
    runs-on: ubuntu-latest
    steps:
      - name: Cleanup disk
        run: |
          sudo df -h
          # sudo ls -l /usr/local/lib/
          # sudo ls -l /usr/share/
          sudo du -sh /usr/local/lib/
          sudo du -sh /usr/share/
          sudo rm -rf /usr/local/lib/android
          sudo rm -rf /usr/share/dotnet
          sudo du -sh /usr/local/lib/
          sudo du -sh /usr/share/
          sudo df -h

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Check out code
        uses: actions/checkout@v4

      # HACK(aliberts): to be removed for release
      # -----------------------------------------
      - name: Checkout gym-aloha
        uses: actions/checkout@v4
        with:
          repository: huggingface/gym-aloha
          path: envs/gym-aloha
          ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Checkout gym-xarm
        uses: actions/checkout@v4
        with:
          repository: huggingface/gym-xarm
          path: envs/gym-xarm
          ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Checkout gym-pusht
        uses: actions/checkout@v4
        with:
          repository: huggingface/gym-pusht
          path: envs/gym-pusht
          ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"

      - name: Change envs dependencies as local path
        run: python .github/scripts/dep_build.py
      # -----------------------------------------

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}

      - name: Build and Push CPU
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./docker/lerobot-cpu/Dockerfile
          push: true
          tags: huggingface/lerobot-cpu
          build-args: PYTHON_VERSION=${{ env.PYTHON_VERSION }}

    #   - name: Post to a Slack channel
    #     id: slack
    #     #uses: slackapi/slack-github-action@v1.25.0
    #     uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001
    #     with:
    #       # Slack channel id, channel name, or user id to post message.
    #       # See also: https://api.slack.com/methods/chat.postMessage#channels
    #       channel-id: ${{ env.CI_SLACK_CHANNEL }}
    #       # For posting a rich message using Block Kit
    #       payload: |
    #         {
    #           "text": "lerobot-cpu Docker Image build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}",
    #           "blocks": [
    #             {
    #               "type": "section",
    #               "text": {
    #                 "type": "mrkdwn",
    #                 "text": "lerobot-cpu Docker Image build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}"
    #               }
    #             }
    #           ]
    #         }
    #     env:
    #       SLACK_BOT_TOKEN: ${{ secrets.SLACK_CIFEEDBACK_BOT_TOKEN }}

  latest-cuda:
    name: "Build GPU"
    runs-on: ubuntu-latest
    steps:
      - name: Cleanup disk
        run: |
          sudo df -h
          # sudo ls -l /usr/local/lib/
          # sudo ls -l /usr/share/
          sudo du -sh /usr/local/lib/
          sudo du -sh /usr/share/
          sudo rm -rf /usr/local/lib/android
          sudo rm -rf /usr/share/dotnet
          sudo du -sh /usr/local/lib/
          sudo du -sh /usr/share/
          sudo df -h
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Check out code
        uses: actions/checkout@v4

      # HACK(aliberts): to be removed for release
      # -----------------------------------------
      - name: Checkout gym-aloha
        uses: actions/checkout@v4
        with:
          repository: huggingface/gym-aloha
          path: envs/gym-aloha
          ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Checkout gym-xarm
        uses: actions/checkout@v4
        with:
          repository: huggingface/gym-xarm
          path: envs/gym-xarm
          ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Checkout gym-pusht
        uses: actions/checkout@v4
        with:
          repository: huggingface/gym-pusht
          path: envs/gym-pusht
          ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"

      - name: Change envs dependencies as local path
        run: python .github/scripts/dep_build.py
      # -----------------------------------------

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}

      - name: Build and Push GPU
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./docker/lerobot-gpu/Dockerfile
          push: true
          tags: huggingface/lerobot-gpu
          build-args: PYTHON_VERSION=${{ env.PYTHON_VERSION }}

      # - name: Post to a Slack channel
      #   id: slack
      #   #uses: slackapi/slack-github-action@v1.25.0
      #   uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001
      #   with:
      #     # Slack channel id, channel name, or user id to post message.
      #     # See also: https://api.slack.com/methods/chat.postMessage#channels
      #     channel-id: ${{ env.CI_SLACK_CHANNEL }}
      #     # For posting a rich message using Block Kit
      #     payload: |
      #       {
      #         "text": "lerobot-gpu Docker Image build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}",
      #         "blocks": [
      #           {
      #             "type": "section",
      #             "text": {
      #               "type": "mrkdwn",
      #               "text": "lerobot-gpu Docker Image build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}"
      #             }
      #           }
      #         ]
      #       }
      #   env:
      #     SLACK_BOT_TOKEN: ${{ secrets.SLACK_CIFEEDBACK_BOT_TOKEN }}
