name: Test_Build

# Controls when the workflow will run
on:
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
    inputs:
      name:
        description: 'App Name, PR #, or zip URL'
        required: true
        default: ''
      buster:
        description: 'Build on PiOS Buster'
        required: true
        type: boolean
      bullseye:
        description: 'Build on PiOS Bullseye'
        required: true
        type: boolean
      architecture:
        type: choice
        description: 'For Buster/Bullseye, test on 32bit, 64bit, or Both if available'
        options:
        - 32bit
        - 64bit
        - Both
      bookworm_64:
        description: 'Build on PiOS Bookworm Beta'
        required: true
        type: boolean
      bionic_64:
        description: 'Build on Switchroot Ubuntu 5.1.1 Bionic 64bit'
        required: true
        type: boolean
      focal_64:
        description: 'Build on Nvidia Jetpack 35.3.1 Focal 64bit'
        required: true
        type: boolean
      jammy_64:
        description: 'Build on RPI Ubuntu Jammy 64bit'
        required: true
        type: boolean
      l4t_jammy_64:
        description: 'Build on L4T Ubuntu Jammy 64bit'
        required: true
        type: boolean
      lunar_64:
        description: 'Build on RPI Ubuntu Lunar 64bit'
        required: true
        type: boolean

run-name: Testing ${{ inputs.name }}

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  buster-32bit:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    if: ${{ inputs.buster && ( inputs.architecture == '32bit' || inputs.architecture == 'Both' ) }}

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      - name: Test installing app on buster armhf
        uses: theofficialgman/arm-runner-action@v12
        with:
          # this is a buster armhf image
          base_image: https://downloads.raspberrypi.org/raspios_oldstable_armhf/images/raspios_oldstable_armhf-2023-05-03/2023-05-03-raspios-buster-armhf.img.xz
          # bind mount the directory so any changes propogate to outside the chroot
          bind_mount_repository: yes

          # give the image more space
          image_additional_mb: 5000

          # set CPUs to use
          cpu: cortex-a7:cortex-a72

          # use custom /proc/cpuinfo
          cpu_info: cpuinfo/raspberrypi_4b

          # user runner name as default path
          copy_repository_path: /home/runner/pi-apps

          # export github env back to outside the chroot
          export_github_env: yes

          import_github_env: true

          # set shell to bash
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  bullseye-32bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.bullseye && ( inputs.architecture == '32bit' || inputs.architecture == 'Both' ) }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on bullseye armhf
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://downloads.raspberrypi.org/raspios_armhf/images/raspios_armhf-2023-05-03/2023-05-03-raspios-bullseye-armhf.img.xz
          bind_mount_repository: yes
          image_additional_mb: 5000
          cpu: cortex-a7:cortex-a72
          cpu_info: cpuinfo/raspberrypi_4b
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  buster-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.buster && ( inputs.architecture == '64bit' || inputs.architecture == 'Both' ) }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on buster arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2021-05-28/2021-05-07-raspios-buster-arm64.zip
          bind_mount_repository: yes
          image_additional_mb: 5000
          cpu: cortex-a7:cortex-a72
          cpu_info: cpuinfo/raspberrypi_4b
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  bullseye-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.bullseye && ( inputs.architecture == '64bit' || inputs.architecture == 'Both' ) }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on bullseye arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2023-05-03/2023-05-03-raspios-bullseye-arm64.img.xz
          bind_mount_repository: yes
          image_additional_mb: 5000
          cpu: cortex-a7:cortex-a72
          cpu_info: cpuinfo/raspberrypi_4b
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  bookworm-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.bookworm_64 }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on bookworm arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: ${{ secrets.RPIOS_BOOKWORM_URL }}
          bind_mount_repository: yes
          image_additional_mb: 5000
          # disable image caching to not leak the URL
          enable_image_caching: no
          cpu: cortex-a7:cortex-a72
          cpu_info: cpuinfo/raspberrypi_4b
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  bionic-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.bionic_64 }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on bionic arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://download.switchroot.org/ubuntu/switchroot-ubuntu-5.1.1-2023-06-12.7z
          # add special arguments for switchroot image format
          bootpartition:
          rootpartition: 1
          bind_mount_repository: yes
          image_additional_mb: 5000
          # use TX1 ARM CPU cores
          cpu: cortex-a7:cortex-a57
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  focal-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.focal_64 }}
    steps:
      - uses: actions/checkout@v3
      - name: Clear up some disk space
        run: |
          # Workaround to provide additional free space for testing.
          #   https://github.com/actions/virtual-environments/issues/2840
          sudo rm -rf /usr/share/dotnet
          sudo rm -rf /opt/ghc
          sudo rm -rf "/usr/local/share/boost"
          sudo rm -rf "$AGENT_TOOLSDIRECTORY"
      - name: Test installing app on focal arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v3.1/sd_card_b49/jp511-xnx-sd-card-image.zip
          bootpartition:
          rootpartition: 1
          bind_mount_repository: yes
          image_additional_mb: 5000
          enable_image_caching: no
          cpu: cortex-a7:cortex-a72
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  jammy-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.jammy_64 }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on jammy arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://cdimage.ubuntu.com/releases/22.04.2/release/ubuntu-22.04.2-preinstalled-desktop-arm64+raspi.img.xz
          bind_mount_repository: yes
          image_additional_mb: 5000
          cpu: cortex-a7:cortex-a72
          cpu_info: cpuinfo/raspberrypi_4b
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  l4t-jammy-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.l4t_jammy_64 }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on L4T jammy arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://github.com/theofficialgman/testing/releases/download/gmans-releases/theofficialgman-ubuntu-jammy-5.1.1-2023-08-19.7z
          # add special arguments for switchroot image format
          bootpartition:
          rootpartition: 1
          bind_mount_repository: yes
          image_additional_mb: 5000
          # use TX1 ARM CPU cores
          cpu: cortex-a7:cortex-a57
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh

  lunar-64bit:
    runs-on: ubuntu-latest
    if: ${{ inputs.lunar_64 }}
    steps:
      - uses: actions/checkout@v3
      - name: Test installing app on lunar arm64
        uses: theofficialgman/arm-runner-action@v12
        with:
          base_image: https://cdimage.ubuntu.com/releases/23.04/release/ubuntu-23.04-preinstalled-desktop-arm64+raspi.img.xz
          bind_mount_repository: yes
          image_additional_mb: 5000
          cpu: cortex-a7:cortex-a72
          cpu_info: cpuinfo/raspberrypi_4b
          copy_repository_path: /home/runner/pi-apps
          export_github_env: yes
          import_github_env: true
          shell: /bin/bash
          commands: |
            export name="${{ inputs.name }}"
            ./.github/workflows/test_build_commands.sh
