name: Compatibility Matrix Testing

on:
  workflow_dispatch:
    inputs:
      CMT_MATRIX:
        description: "A JSON object representing the testing matrix"
        required: true
        type: string
      DESKTOP_VERSION:
        description: "The desktop version to test"
        required: true

jobs:
  ## This is picked up after the finish for cleanup
  upload-cmt-server-detals:
    runs-on: ubuntu-22.04
    steps:
      - name: cmt/generate-instance-details-file
        run: echo '${{ inputs.CMT_MATRIX }}' > instance-details.json

      - name: cmt/upload-instance-details
        uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
        with:
          name: instance-details.json
          path: instance-details.json
          retention-days: 1

  calculate-commit-hash:
    runs-on: ubuntu-22.04
    outputs:
      DESKTOP_SHA: ${{ steps.repo.outputs.DESKTOP_SHA }}
    steps:
      - name: cmt/checkout-desktop
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          ref: ${{ inputs.DESKTOP_VERSION }}

      - name: cmt/calculate-mattermost-sha
        id: repo
        run: echo "DESKTOP_SHA=$(git rev-parse HEAD)" >> ${GITHUB_OUTPUT}

  update-initial-status:
    runs-on: ubuntu-22.04
    needs:
      - calculate-commit-hash
    steps:
      - uses: mattermost/actions/delivery/update-commit-status@746563b58e737a17a8ceb00b84a813b9e6e1b236
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          repository_full_name: mattermost/desktop
          commit_sha: ${{ needs.calculate-commit-hash.outputs.DESKTOP_SHA }}
          context: e2e/compatibility-matrix-testing
          description: "Compatibility Matrix Testing for ${{ inputs.DESKTOP_VERSION }} version"
          status: pending

  # Input follows the below schema
  # {
  #   "environment": [
  #     {
  #       "os": "linux",
  #       "runner": "ubuntu-22.04"
  #     },
  #     {
  #       "os": "macos",
  #       "runner": "macos-13"
  #     },
  #     {
  #       "os": "windows",
  #       "runner": "windows-2022"
  #     }
  #   ],
  #   "server": [
  #     {
  #       "version": "9.6.1",
  #       "url": "https://delivery-cmt-8467830017-9-6-1.test.mattermost.cloud/"
  #     },
  #     {
  #       "version": "9.5.2",
  #       "url": "https://delivery-cmt-8467830017-9-5-2.test.mattermost.cloud/"
  #     }
  #   ]
  # }
  e2e:
    name: ${{ matrix.environment.os }}-${{ matrix.server.version }}
    uses: ./.github/workflows/e2e-functional-template.yml
    needs:
      - update-initial-status
    strategy:
      fail-fast: false
      matrix: ${{ fromJson(inputs.CMT_MATRIX) }}
    secrets: inherit
    with:
      runs-on: ${{ matrix.environment.runner }}
      cmt: true
      MM_TEST_SERVER_URL: ${{ matrix.server.url }}
      DESKTOP_VERSION: ${{ inputs.DESKTOP_VERSION }}
      MM_SERVER_VERSION: ${{ matrix.server.version }}

  # We need to duplicate here in order to set the proper commit status
  # https://mattermost.atlassian.net/browse/CLD-5815
  update-failure-final-status:
    runs-on: ubuntu-22.04
    if: failure() || cancelled()
    needs:
      - calculate-commit-hash
      - e2e
    steps:
      - uses: mattermost/actions/delivery/update-commit-status@746563b58e737a17a8ceb00b84a813b9e6e1b236
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          repository_full_name: mattermost/desktop
          commit_sha: ${{ needs.calculate-commit-hash.outputs.DESKTOP_SHA }}
          context: e2e/compatibility-matrix-testing
          description: "Compatibility Matrix Testing for ${{ inputs.DESKTOP_VERSION }} version"
          status: failure

  # https://mattermost.atlassian.net/browse/CLD-5815
  update-success-final-status:
    runs-on: ubuntu-22.04
    if: success()
    needs:
      - calculate-commit-hash
      - e2e
    steps:
      - uses: mattermost/actions/delivery/update-commit-status@746563b58e737a17a8ceb00b84a813b9e6e1b236
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          repository_full_name: mattermost/desktop
          commit_sha: ${{ needs.calculate-commit-hash.outputs.DESKTOP_SHA }}
          context: e2e/compatibility-matrix-testing
          description: "Compatibility Matrix Testing for ${{ inputs.DESKTOP_VERSION }} version"
          status: success
