name: Release Workflow

on:
  push:
    tags:
      - 'v*'

jobs:
  route:
    runs-on: ubuntu-latest
    outputs:
      provider: ${{ steps.provider.outputs.provider }}
      gitea_ref_name: ${{ steps.provider.outputs.gitea_ref_name }}
      gitea_server_url: ${{ steps.provider.outputs.gitea_server_url }}
      gitea_repository: ${{ steps.provider.outputs.gitea_repository }}
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Debug Environment
        run: |
          echo "CI Environment Details:"
          echo "GITHUB_ACTIONS=${GITHUB_ACTIONS:-not set}"
          echo "GITEA_ACTIONS=${GITEA_ACTIONS:-not set}"
          echo "GITEA_REPOSITORY=${GITEA_REPOSITORY:-not set}"
          echo "GITEA_SERVER_URL=${GITEA_SERVER_URL:-not set}"
          echo "RUNNER_NAME=${RUNNER_NAME:-not set}"

      - name: Determine CI Provider
        id: provider
        shell: bash
        run: |
          if [ -n "${GITEA_ACTIONS}" ] || [ -n "${GITEA_REPOSITORY}" ] || [[ "${RUNNER_NAME}" == *"gitea"* ]]; then
            echo "provider=gitea" >> "$GITHUB_OUTPUT"
            echo "gitea_ref_name=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT"
            echo "gitea_server_url=${GITHUB_SERVER_URL}" >> "$GITHUB_OUTPUT"
            echo "gitea_repository=${GITHUB_REPOSITORY}" >> "$GITHUB_OUTPUT"
          elif [ "${GITHUB_ACTIONS}" = "true" ]; then
            echo "provider=github" >> "$GITHUB_OUTPUT"
          else
            echo "provider=unknown" >> "$GITHUB_OUTPUT"
          fi

  verify-provider:
    needs: route
    runs-on: ubuntu-latest
    steps:
      - name: Echo detected provider
        run: |
          echo "Detected CI Provider: ${{ needs.route.outputs.provider }}"
          if [ "${{ needs.route.outputs.provider }}" = "unknown" ]; then
            echo "::error::Failed to detect CI provider!"
            exit 1
          fi

  github-release:
    needs: [route, verify-provider]
    if: needs.route.outputs.provider == 'github'
    uses: ./.github/workflows/providers/github-release.yml

  gitea-release:
    needs: [route, verify-provider]
    if: needs.route.outputs.provider == 'gitea'
    uses: ./.github/workflows/providers/gitea-release.yml
    with:
      gitea_ref_name: ${{ needs.route.outputs.gitea_ref_name }}
      gitea_server_url: ${{ needs.route.outputs.gitea_server_url }}
      gitea_repository: ${{ needs.route.outputs.gitea_repository }}
    secrets:
      GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}