name: Create a new release

on:
  workflow_call:
    inputs:
      draft:
        type: boolean
        description: "Draft"
        required: true
        default: false
      prerelease:
        type: boolean
        description: "Prerelease"
        required: true
        default: false
      release_name:
        type: string
        description: "Release name"
        required: true
        default: "Release ${{ github.ref_name }}"
      tag_name:
        type: string
        description: "Tag name"
        required: false
        default: github.ref_name


jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: "Install dependencies"
        uses: taiki-e/install-action@just

      - name: "Checkout code"
        uses: actions/checkout@v4
        with:
          submodules: 'true'
          fetch-depth: 0

      - name: "Download built game assets"
        uses: actions/download-artifact@v4
        with:
          path: artifacts/
          merge-multiple: true

      - name: "Generate changelog"
        run: |
          hash=$(git log -1 --pretty=format:%H)
          tag=$(just output-current-version)
          echo -e "**Commit: $hash**  \n**Tag: $tag**\n\n### Changes\n" > _changes.txt
          just output-current-changelog >> _changes.txt

      - name: "Get information on the latest pre-release"
        if: ${{ inputs.prerelease == true || inputs.prerelease == 'true' }}
        id: last_release
        uses: InsonusK/get-latest-release@v1.0.1
        with:
          myToken: ${{ github.token }}
          exclude_types: "draft|release"

      - name: 'Mark the pre-release as latest'
        if: ${{ inputs.prerelease == true || inputs.prerelease == 'true' }}
        uses: EndBug/latest-tag@latest

      - name: "Delete old pre-release assets"
        if: ${{ inputs.prerelease == true || inputs.prerelease == 'true' }}
        uses: mknejp/delete-release-assets@v1
        continue-on-error: true
        with:
          token: ${{ github.token }}
          tag: ${{ steps.last_release.outputs.tag_name }}
          assets: "*.*"

      - name: "Publish a release"
        uses: softprops/action-gh-release@v2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          name: ${{ inputs.release_name }}
          tag_name: ${{ inputs.tag_name }}
          body_path: _changes.txt
          draft: ${{ inputs.draft == true || inputs.draft == 'true' }}
          prerelease: ${{ inputs.prerelease == true || inputs.prerelease == 'true' }}
          fail_on_unmatched_files: true
          files: |
            artifacts/*
