name: update OS

on:
  workflow_dispatch:

jobs:
  test-on-arm:
    name: Update OS
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - name: Build Raspberry Pi OS
        uses: pguyot/arm-runner-action@v2
        id: build_image
        env:
          INKY_INITAL_PASSWORD: ${{ secrets.INKY_INITAL_PASSWORD }}
          OPENWEATHERMAP_API_KEY: ${{ secrets.OPENWEATHERMAP_API_KEY }}
          SAMPLE_ICAL_URL: ${{ secrets.SAMPLE_ICAL_URL }}
          TEST_ICAL_URL: ${{ secrets.TEST_ICAL_URL }}
          TODOIST_API_KEY: ${{ secrets.TODOIST_API_KEY }}
        with:
          # Set the base_image to the desired Raspberry Pi OS version
          base_image: https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2023-05-03/2023-05-03-raspios-bullseye-armhf-lite.img.xz
          image_additional_mb: 2560 # enlarge free space to 2 GB
          optimize_image: true
          user: inky
          commands: |
            cd /home
            sudo useradd -m -p "$(openssl passwd -1 $INKY_INITAL_PASSWORD)" inky
            sudo usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi inky
            sudo su inky
            echo $HOME
            whoami
            cd /home/inky
            sudo apt-get update -y
            python --version
            sudo apt-get install -y python3-pip
            sudo apt-get install zlib1g libjpeg-dev libatlas-base-dev rustc libopenjp2-7 python3-dev scons libssl-dev python3-venv python3-pip git libfreetype6-dev wkhtmltopdf -y
            echo $PWD && ls
            git clone https://github.com/aceinnolab/Inkycal
            cd Inkycal
            python3 -m venv venv
            . venv/bin/activate
            python -m pip install --upgrade pip
            pip install wheel
            pip install -e ./
            pip install RPi.GPIO==0.7.1 spidev==3.5 gpiozero==2.0
            wget https://raw.githubusercontent.com/aceinnolab/Inkycal/assets/tests/settings.json
            pip install pytest
            python -m pytest

            # install deps for 12.48" display
            wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
            tar zxvf bcm2835-1.71.tar.gz
            cd bcm2835-1.71/
            sudo ./configure && sudo make && sudo make check && sudo make install
            cd .. 
            echo $CWD
            wget https://project-downloads.drogon.net/wiringpi-latest.deb
            sudo dpkg -i wiringpi-latest.deb
            cd ..
            echo $CWD

            # increase swap-size
            sudo dphys-swapfile swapoff
            sudo sed -i -E '/^CONF_SWAPSIZE=/s/=.*/=512/' /etc/dphys-swapfile
            sudo dphys-swapfile setup
            sudo dphys-swapfile swapon

            # enable SPI
            sudo sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/config.txt

            # enable inkycal start at boot
            sudo -u inky bash -c 'echo "@reboot sleep 60 && cd /home/inky/Inkycal && venv/bin/python inky_run.py &" | crontab -'
            sudo chown inky:crontab /var/spool/cron/crontabs/inky

            # fix permissions of Inkycal folder recursively
            sudo chown -R inky:inky /home/inky/Inkycal

            # make all users require a password for sudo commands (improves security)
            echo 'ALL   ALL=(ALL:ALL) PASSWD: ALL' | sudo tee -a /etc/sudoers.d/010_require_sudo_password

      - name: Compress the release image
        run: |
          mv ${{ steps.build_image.outputs.image }} InkycalOS_Lite.img
          xz -0 -T 0 -v InkycalOS_Lite.img

      - name: Get latest release version
        run: |
          export tag="$(curl -s https://api.github.com/repos/aceinnolab/Inkycal/releases/latest | jq -r '.tag_name')"
          echo "version=${tag}" >> $GITHUB_ENV

      - name: Upload Raspberry Pi OS Image
        if: success()  # Only upload the image if the tests were successful
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ env.version }}
          files: InkycalOS_Lite.img.xz