name: Inkycal testing

on:
  push:
    branches:
      - main

jobs:
  clone-setup-install:
    name: Clone, Setup, and Install
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3
        with:
          ref: main

      - name: Set up Python 3.9
        uses: actions/setup-python@v4
        with:
          python-version: 3.9

      - name: Install Dependencies
        run: |
          python3 -m venv venv
          source venv/bin/activate
          python -m pip install --upgrade pip
          pip install wheel
          pip install -e .
          cd ..

      - name: Create Archive
        run: |
          mkdir artefacts
          tar -czf artefacts/workspace.tar.gz --exclude=./artefacts .

      - name: Save Workspace Archive
        uses: actions/upload-artifact@v2
        with:
          name: workspace
          path: artefacts/workspace.tar.gz

  test-on-arm:
    name: Run Tests on Raspberry Pi OS
    needs: clone-setup-install
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - name: Restore Workspace
        uses: actions/download-artifact@v2
        with:
          name: workspace

      - name: Extract Workspace Archive
        run: |
          tar -xzf workspace.tar.gz

      - name: Run Tests on Raspberry Pi OS
        uses: pguyot/arm-runner-action@v2
        id: build_image
        env:
          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: raspios_lite:latest
          image_additional_mb: 2000 # enlarge free space to 2 GB
          # Set the commands to run the tests
          commands: |
            apt-get update -y
            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 -y
            cd /Inkycal
            . venv/bin/activate
            python -m pip install --upgrade pip
            pip install wheel
            pip install -e ./
            cd inkycal/tests
            echo $PWD
            wget https://raw.githubusercontent.com/aceinnolab/Inkycal/assets/tests/settings.json
            for f in *.py; do python3 "$f"; done
            
      - name: Compress the release image
        run: |
          mv ${{ steps.build_image.outputs.image }} inkycal_os.img
          xz -0 -T 0 -v inkycal_os.img
          ls
      
      - 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: inkycal_os.img.xz

  generate-docs:
    name: Generate Docs
    needs: clone-setup-install
    runs-on: ubuntu-latest

    steps:
      - name: Restore Workspace
        uses: actions/download-artifact@v2
        with:
          name: workspace

      - name: Extract Workspace Archive
        run: |
          tar -xzf workspace.tar.gz

      - name: Generate Docs
        run: |
          sudo apt-get install python3-sphinx
          source venv/bin/activate
          pip install sphinxemoji sphinx_rtd_theme
          cd docsource
          make html

  publish-docs:
    name: Publish Docs
    needs: generate-docs
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - name: Restore Workspace
        uses: actions/download-artifact@v2
        with:
          name: workspace

      - name: Extract Workspace Archive
        run: |
          tar -xzf workspace.tar.gz

      - name: Publish Docs to Github Pages
        run: |
          echo "$PWD"
          ls
          source venv/bin/activate
          cd docsource && make html && make github && cd ..
          echo "$PWD"
          ls
          git config --global user.name 'GitHub Actions'
          git config --global user.email 'actions@github.com'
          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
          git add docs
          git commit -m "Update documentation"
          git push --force --quiet