name: GitHub Pages

on:
  push:
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    container: devkitpro/devkitarm
    steps:
      - name: Checkout branch
        uses: actions/checkout@v4

      - name: Setup Pages
        uses: actions/configure-pages@v3

      - name: Build with Jekyll
        uses: actions/jekyll-build-pages@v1

      - uses: rust3ds/test-runner/setup@v1
        with:
          toolchain: nightly

      - name: Build workspace docs
        run: cargo 3ds --verbose doc --verbose --no-deps --workspace
        env:
          RUSTDOCFLAGS: --enable-index-page

      # https://github.com/actions/upload-pages-artifact#file-permissions
      - name: Fix file permissions
        run: |
          chmod -c -R +rX "target/armv6k-nintendo-3ds/doc" | while read line; do
            echo "::warning title=Invalid file permissions automatically fixed::$line"
          done

      - name: Copy generated docs to _site
        # Note: this won't include proc-macro crate, but macros are re-exported
        # by the crate docs so there will still be some documentation.
        run: cp -R ./target/armv6k-nintendo-3ds/doc ./_site/crates

      - name: Upload docs
        uses: actions/upload-pages-artifact@v2

  deploy:
    runs-on: ubuntu-latest
    needs: build
    permissions:
      pages: write
      id-token: write

    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}

    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2