# Workflow derived from https://github.com/rstudio/shiny-workflows
#
# NOTE: This Shiny team GHA workflow is overkill for most R packages.
# For most R packages it is better to use https://github.com/r-lib/actions
on:
  push:
    branches: [main, rc-**]
  pull_request:
    branches: [main]
  schedule:
    - cron: "0 9 * * 1" # every monday

name: Package checks

jobs:
  website:
    uses: rstudio/shiny-workflows/.github/workflows/website.yaml@v1
  routine:
    uses: rstudio/shiny-workflows/.github/workflows/routine.yaml@v1
  R-CMD-check:
    uses: rstudio/shiny-workflows/.github/workflows/R-CMD-check.yaml@v1

  integration:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v4

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

      - name: Upgrade pip
        shell: bash
        run: |
          python -m pip install --upgrade pip

      - name: Install py-shinylive
        shell: bash
        run: |
          pip install shinylive
          # pip install https://github.com/posit-dev/py-shinylive/archive/split_api.zip

      - name: Set up Quarto
        uses: quarto-dev/quarto-actions/setup@v2

      - name: Install quarto-ext/shinylive
        shell: bash
        run: |
          cd local/quarto
          quarto add quarto-ext/shinylive --no-prompt
          # Trouble installing from branch. Using url instead.
          # quarto add http://github.com/quarto-ext/shinylive/archive/v2_api.zip --no-prompt

      - name: Install R, system dependencies, and package dependencies
        uses: rstudio/shiny-workflows/setup-r-package@v1
        with:
          needs: quarto

      - name: Check out 'posit-dev/shinylive' repo into './shinylive_assets'
        uses: actions/checkout@v4
        with:
          repository: posit-dev/shinylive
          path: shinylive_assets

      - name: Build shinylive assets
        shell: bash
        run: |
          cd shinylive_assets
          make submodules
          make all

      - name: Link shinylive assets
        shell: Rscript {0}
        run: |
          shinylive::assets_install_copy("shinylive_assets")
          shinylive::assets_info()
      - name: Update lua script for debugging
        shell: Rscript {0}
        run: |
          shinylive_lua <- file.path(
            "local", "quarto", "_extensions",
            # (When installing from a zip url, there is no `quarto-ext` dir.)
            "quarto-ext",
            "shinylive", "shinylive.lua"
          )
          shinylive_lua |>
            brio::read_file() |>
            sub(
              pattern = "-- print(\"Calling",
              replacement = "print(\"Calling",
              fixed = TRUE
            ) |>
            sub(
              pattern = "-- print(\"res",
              replacement = "-- print(\"res",
              fixed = TRUE
            ) |>
            brio::write_file(shinylive_lua)

          cat(brio::read_file(shinylive_lua),"\n")

      - name: Run shinylive R package tests
        env:
          TEST_ASSETS: "TRUE"
        shell: Rscript {0}
        run: |
          shinylive::assets_info()
          dir(shinylive:::assets_cache_dir())
          dir(shinylive:::assets_dirs())
          as.list(fs::file_info(shinylive:::assets_dirs()))

          shinylive::assets_ensure()

          testthat::test_local()
      # If this (^^) completes, it is a big success!
      # Run quarto test after testthat test
      - name: Test shinylive quarto extension can build
        uses: quarto-dev/quarto-actions/render@v2
        with:
          path: local/quarto/

      # TODO-barret-future; Test the output of the render using pyright / py-shiny e2e controls?