name: Dispatch
run-name: Dispatched Repository Actions - ${{ inputs.job }} ⌛️
on:
  workflow_dispatch:
    inputs:
      job:
        description: Dispatch job to run
        required: true
        type: choice
        options:
          - steam
          - services
          - translations
          - documentation
          - patches
      ref:
        description: GitHub reference to use for job
        type: string
        required: false
      customAssetWindows:
        description: Custom Windows build for Steam Upload
        type: string
        required: false
      customAssetMacOSApple:
        description: Custom macOS Apple Silicon build for Steam Upload
        type: string
        required: false
      customAssetMacOSIntel:
        description: Custom macOS Intel build for Steam Upload
        type: string
        required: false
      channel:
        description: Channel to use when generating Windows update files
        type: string
        required: false
permissions:
  contents: write
jobs:
  services-validation:
    name: Validate Services 🕵️
    if: github.repository_owner == 'obsproject' && inputs.job == 'services'
    runs-on: macos-15
    permissions:
      checks: write
      contents: write
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
      - name: Check for Defunct Services 📉
        uses: ./.github/actions/services-validator
        with:
          repositorySecret: ${{ secrets.GITHUB_TOKEN }}
          checkApiSecret: ${{ secrets.CHECK_SERVERS_API_KEY }}
          checkApiServers: ${{ secrets.CHECK_SERVERS_LIST }}
          runSchemaChecks: true
          runServiceChecks: true
          createPullRequest: true

  download-language-files:
    name: Download Language Files 🌐
    if: github.repository_owner == 'obsproject' && inputs.job == 'translations'
    runs-on: ubuntu-24.04
    env:
      CROWDIN_PAT: ${{ secrets.CROWDIN_SYNC_CROWDIN_PAT }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
          token: ${{ secrets.CROWDIN_SYNC_GITHUB_PAT }}
          fetch-depth: 0
      - uses: obsproject/obs-crowdin-sync/download@430665179ed13233af2d83ec192c2ae8c40a29ae

  steam-upload:
    name: Upload Steam Builds 🚂
    if: github.repository_owner == 'obsproject' && inputs.job == 'steam'
    runs-on: macos-15
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/steam-upload
        with:
          steamSecret: ${{ secrets.STEAM_SHARED_SECRET }}
          steamUser: ${{ secrets.STEAM_USER }}
          steamPassword: ${{ secrets.STEAM_PASSWORD }}
          tagName: ${{ inputs.ref }}
          customAssetWindows: ${{ inputs.customAssetWindows }}
          customAssetMacOSApple: ${{ inputs.customAssetMacOSApple }}
          customAssetMacOSIntel: ${{ inputs.customAssetMacOSIntel }}
          workflowSecret: ${{ github.token }}
          preview: false

  update-documentation:
    name: Update Documentation 📖
    if: github.repository_owner == 'obsproject' && inputs.job == 'documentation'
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/generate-docs

  update-documentation-cloudflare:
    name: Update Documentation for Cloudflare ☁️
    if: github.repository_owner == 'obsproject' && inputs.job == 'documentation'
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/generate-docs
        with:
          disableLinkExtensions: true

  deploy-documentation:
    name: Deploy Documentation to Cloudflare ☁️
    if: github.repository_owner == 'obsproject' && inputs.job == 'documentation'
    runs-on: ubuntu-24.04
    needs: update-documentation-cloudflare
    defaults:
      run:
        shell: bash
    environment:
      name: cf-pages-deploy
    steps:
      - name: Get Commit Information 🆔
        id: setup
        run: |
          : Get Commit Hash 🆔
          echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT

      - uses: actions/download-artifact@v4
        with:
          name: OBS Studio Docs (No Extensions) ${{ steps.setup.outputs.commitHash }}
          path: docs

      - name: Publish to Live Page
        uses: cloudflare/wrangler-action@4c10c1822abba527d820b29e6333e7f5dac2cabd
        with:
          workingDirectory: docs
          apiToken: ${{ secrets.CF_API_TOKEN }}
          accountId: ${{ secrets.CF_ACCOUNT_ID }}
          command: pages publish . --project-name=${{ vars.CF_PAGES_PROJECT }} --commit-hash='${{ steps.setup.outputs.commitHash }}'

  windows-patches:
    name: Create Windows Patches 🩹
    if: github.repository_owner == 'obsproject' && inputs.job == 'patches'
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/windows-patches
        with:
          tagName: ${{ inputs.ref }}
          workflowSecret: ${{ github.token }}
          channel: ${{ inputs.channel }}
          gcsAccessKeyId: ${{ secrets.GCS_ACCESS_KEY_ID }}
          gcsAccessKeySecret: ${{ secrets.GCS_ACCESS_KEY_SECRET }}
