name: Release

on:
  workflow_dispatch:
    inputs:
      ref:
        description: 'Ref to build (for Pull Requests, use refs/pull/NNN/head)'
        required: true
  repository_dispatch:
    # client_payload should be the same as the inputs for workflow_dispatch.
    types:
    - Build*
  release:
    types:
    - published

jobs:
  source:
    name: Source

    uses: ./.github/workflows/release-source.yml
    secrets: inherit

  docs:
    name: Docs
    needs: source

    uses: ./.github/workflows/release-docs.yml
    secrets: inherit

    with:
      version: ${{ needs.source.outputs.version }}

  linux:
    name: Linux (Generic)
    needs: source

    uses: ./.github/workflows/release-linux.yml
    secrets: inherit

  macos:
    name: MacOS
    needs: source

    uses: ./.github/workflows/release-macos.yml
    secrets: inherit

  windows:
    name: Windows
    needs: source

    uses: ./.github/workflows/release-windows.yml
    secrets: inherit

    with:
      is_tag: ${{ needs.source.outputs.is_tag }}

  windows-store:
    name: Windows Store
    needs:
    - source
    - windows

    if: needs.source.outputs.is_tag == 'true'

    uses: ./.github/workflows/release-windows-store.yml
    secrets: inherit

    with:
      version: ${{ needs.source.outputs.version }}

  upload-aws:
    name: Upload (AWS)
    needs:
    - source
    - docs
    - linux
    - macos
    - windows
    - windows-store

    # As windows-store is condition, we need to check ourselves if we need to run.
    # The always() makes sure the rest is always evaluated.
    if: always() && needs.source.result == 'success' && needs.docs.result == 'success' && needs.linux.result == 'success' && needs.macos.result == 'success' && needs.windows.result == 'success' && (needs.windows-store.result == 'success' || needs.windows-store.result == 'skipped')

    uses: ./.github/workflows/upload-aws.yml
    secrets: inherit

    with:
      version: ${{ needs.source.outputs.version }}
      folder: ${{ needs.source.outputs.folder }}
      trigger_type: ${{ needs.source.outputs.trigger_type }}

  upload-steam:
    name: Upload (Steam)
    needs:
    - source
    - linux
    - macos
    - windows

    if: needs.source.outputs.trigger_type == 'new-master' || needs.source.outputs.trigger_type == 'new-tag'

    uses: ./.github/workflows/upload-steam.yml
    secrets: inherit

    with:
      version: ${{ needs.source.outputs.version }}
      trigger_type: ${{ needs.source.outputs.trigger_type }}

  upload-gog:
    name: Upload (GOG)
    needs:
    - source
    - linux
    - macos
    - windows

    if: needs.source.outputs.trigger_type == 'new-tag'

    uses: ./.github/workflows/upload-gog.yml
    secrets: inherit

    with:
      version: ${{ needs.source.outputs.version }}
