name: "Godot 4.1.2 CI/CD"

env:
  GODOT_VERSION: 4.1.2

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  web:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    container:
      image: barichello/godot-ci:4.1.2
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Move export templates into position
        run: |
          mkdir -v -p ~/.local/share/godot/export_templates
          mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
      - name: Create staging directory
        run: mkdir -v -p build/web

      - name: Build
        run: godot -v --export-release --headless "Web"

      - name: Add coi-service-worker
        run: |
          git clone https://github.com/gzuidhof/coi-serviceworker.git
          mv coi-serviceworker/coi-serviceworker.js build/web/coi-serviceworker.js
          sed -i '3 i <script src="coi-serviceworker.js"></script>' build/web/index.html

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3.9.3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./build/web
          force_orphan: true
          user_name: "github-ci[bot]"
          user_email: "github-actions[bot]@users.noreply.github.com"
          commit_message: "UPDATE GITHUB PAGES"

      - name: Zip Web artifacts
        run: zip -r game_web.zip build/web

      - name: Upload Web artifacts
        uses: actions/upload-artifact@v3
        with:
          name: game_web
          path: game_web.zip
  linux:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    container:
      image: barichello/godot-ci:4.1.2

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Move export templates into position
        run: |
          mkdir -v -p ~/.local/share/godot/export_templates
          mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
      - name: Create staging directory
        run: mkdir -v -p build/linux

      - name: Build for Linux
        run: godot -v --export-release --headless "Linux/X11" --path . --output "build/linux/game.x86_64"

      - name: Zip Linux artifacts
        run: zip -r game_linux.zip build/linux

      - name: Upload Linux artifacts
        uses: actions/upload-artifact@v3
        with:
          name: game_linux
          path: game_linux.zip
  windows:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    container:
      image: barichello/godot-ci:4.1.2

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Move export templates into position
        run: |
          mkdir -v -p ~/.local/share/godot/export_templates
          mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
      - name: Create staging directory
        run: mkdir -v -p build/windows

      - name: Build for windows
        run: godot -v --export-release --headless "Windows Desktop" --path . --output "build/windows/game.x86_64"

      - name: Zip Windows artifacts
        run: zip -r game_windows.zip build/windows

      - name: Upload windows artifacts
        uses: actions/upload-artifact@v3
        with:
          name: game_windows
          path: game_windows.zip
  release:
    needs: [web, linux, windows]
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up GitVersion
        uses: gittools/actions/gitversion/setup@v0.9.15
        with:
          versionSpec: '5.x'

      - name: Execute GitVersion
        uses: gittools/actions/gitversion/execute@v0.9.15
        with:
          useConfigFile: true
          configFilePath: GitVersion.yml

      - name: Get branch name
        id: get_branch
        run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV

      - name: Download artifacts
        uses: actions/download-artifact@v3
        with:
          name: game_web

      - name: Download Linux artifacts
        uses: actions/download-artifact@v3
        with:
          name: game_linux

      - name: Download Windows artifacts
        uses: actions/download-artifact@v3
        with:
          name: game_windows

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{env.GitVersion_MajorMinorPatch}}
          release_name: ${{env.GitVersion_MajorMinorPatch}}
          body: |
            Release notes for ${{env.GitVersion_MajorMinorPatch}}
          draft: false
          prerelease: false
    
      - name: test
        run: ls

      - name: Upload Web Release Asset
        id: upload-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: game_web.zip
          asset_name: Godot_Game_Web.zip
          asset_content_type: application/zip

      - name: Upload Linux Release Asset
        id: upload-linux-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: game_linux.zip
          asset_name: Godot_Game_Linux.zip
          asset_content_type: application/zip

      - name: Upload Windows Release Asset
        id: upload-windows-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: game_windows.zip
          asset_name: Godot_Game_Windows.zip
          asset_content_type: application/zip