# Copyright © SixtyFPS GmbH <info@slint.dev>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

name: Rust Demos built for Torizon

on:
    workflow_dispatch:
        inputs:
            push:
                type: boolean
                description: "Push the built images"
    workflow_call:
        inputs:
            push:
                type: boolean
                description: "Push the built images"

jobs:
    build_containers:
        runs-on: ubuntu-22.04
        strategy:
            matrix:
                include:
                    # Default software rendering (GPU-less)
                    - target: arm64
                      image_arch: linux/arm64
                      rust_toolchain_arch: aarch64-unknown-linux-gnu
                      base_image_suffix: ""
                      build_home_automation_sw_renderer: true
                    # GPU-specific variants
                    # https://developer.toradex.com/torizon/application-development/provided-containers/debian-containers-for-torizon
                    - target: arm64
                      image_arch: linux/arm64
                      rust_toolchain_arch: aarch64-unknown-linux-gnu
                      base_image_suffix: "-imx8"
                      build_home_automation_sw_renderer: false
                    - target: arm64
                      image_arch: linux/arm64
                      rust_toolchain_arch: aarch64-unknown-linux-gnu
                      base_image_suffix: "-am62"
                      build_home_automation_sw_renderer: false
                    - target: arm64
                      image_arch: linux/arm64
                      rust_toolchain_arch: aarch64-unknown-linux-gnu
                      base_image_suffix: "-imx95"
                      build_home_automation_sw_renderer: false

        steps:
            - uses: actions/checkout@v6
            - name: Set up QEMU
              uses: docker/setup-qemu-action@v4
            - name: Set up Docker Buildx
              uses: docker/setup-buildx-action@v4
            - name: Login to GitHub Container Registry
              uses: docker/login-action@v4
              with:
                  registry: ghcr.io
                  username: ${{ github.actor }}
                  password: ${{ secrets.CR_PAT }}
            - name: Build and push
              uses: docker/build-push-action@v7
              with:
                  context: .
                  file: ./docker/Dockerfile.torizon-demos
                  push: ${{ github.event.inputs.push || inputs.push }}
                  tags: ghcr.io/slint-ui/slint/torizon-demos-${{matrix.target}}${{matrix.base_image_suffix}}:latest
                  platforms: ${{matrix.image_arch}}
                  build-args: |
                      TOOLCHAIN_ARCH=${{matrix.target}}
                      IMAGE_ARCH=${{matrix.image_arch}}
                      RUST_TOOLCHAIN_ARCH=${{matrix.rust_toolchain_arch}}
                      BASE_NAME=wayland-base${{matrix.base_image_suffix}}
                      WEATHER_API_KEY=${{secrets.WEATHER_API_KEY}}
                      BUILD_HOME_AUTOMATION_SW_RENDERER=${{matrix.build_home_automation_sw_renderer}}
