name: Deploy to GitHub Pages

env:
  PROJECT_PATH: demo/Semi.Avalonia.Demo.Web/Semi.Avalonia.Demo.Web.csproj
  OUTPUT_PATH: demo/Semi.Avalonia.Demo.Web/bin/Release/net7.0/browser-wasm/AppBundle
on:
  push:
    branches: [ "action/deploy" ]
  pull_request:
    branches: [ "action/deploy" ]

jobs:
  deploy-to-github-pages:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4.1.1

      - name: Setup .NET 7
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: 7.0.405

      - name: Install wasm-tools
        run: dotnet workload install wasm-tools wasm-tools-net7

      - name: Install DotNetCompress
        run: dotnet tool install --global DotNetCompress --version 3.0.0 --no-cache

      - name: Publish .NET Project
        run: dotnet publish $PROJECT_PATH -c Release -o release --nologo

      - name: Change base-tag in index.html
        run: sed -i 's/<base href="\/" \/>/<base href="\/Semi.Avalonia\/" \/>/g' $OUTPUT_PATH/index.html

      - name: copy index.html to 404.html
        run: cp $OUTPUT_PATH/index.html $OUTPUT_PATH/404.html

      - name: Compress Output using Brotli
        run: DotNetCompress -d $OUTPUT_PATH -p "*.dll" "*.js" "*.wasm" --format br --threads 4

      - name: Compress Output using GZip
        run: DotNetCompress -d $OUTPUT_PATH -p "*.dll" "*.js" "*.wasm" --format gz --threads 4

      - name: Add .nojekyll file
        run: touch $OUTPUT_PATH/.nojekyll

      - name: Commit wwwroot to GitHub Pages
        uses: JamesIves/github-pages-deploy-action@v4.5.0
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH: gh-pages
          FOLDER: ${{ env.OUTPUT_PATH }}
