name: Check and Update xray-core

on:
  schedule:
    - cron: '0 0 * * *'
  workflow_dispatch:

jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout our repository
        uses: actions/checkout@v4
        with:
          fetch-depth: '0'

      - name: Fetch latest release tag from external repository
        id: fetch-release
        run: |
          EXTERNAL_REPO="XTLS/Xray-core"
          LATEST_TAG=$(curl -s https://api.github.com/repos/$EXTERNAL_REPO/tags | jq -r '.[0]')
          LATEST_TAG_NAME=$(echo $LATEST_TAG | jq -r .name)
          LATEST_TAG_SHA=$(echo $LATEST_TAG | jq -r .commit.sha)
          echo "Latest tag from external repo: $LATEST_TAG_NAME"
          echo "LATEST_TAG_NAME=$LATEST_TAG_NAME" >> $GITHUB_ENV
          echo "LATEST_TAG_SHA=$LATEST_TAG_SHA" >> $GITHUB_ENV

      - name: Fetch current repository release tag
        id: fetch-current-tag
        run: |
          CURRENT_TAG_NAME=$(git describe --tags --abbrev=0)
          echo "Current tag in this repo: $CURRENT_TAG_NAME"
          echo "CURRENT_TAG_NAME=$CURRENT_TAG_NAME" >> $GITHUB_ENV

      - name: Compare tags
        id: compare-tags
        run: |
          if [ "$LATEST_TAG_NAME" != "$CURRENT_TAG_NAME" ]; then
            echo "Tags are different. Updating..."
            echo "needs_update=true" >> $GITHUB_ENV
          else
            echo "Tags are the same. No update needed."
            echo "needs_update=false" >> $GITHUB_ENV
          fi

      - name: Setup Golang
        if: env.needs_update == 'true'
        uses: actions/setup-go@v5
        with:
          go-version: 'stable'

      - name: Update and commit changes
        if: env.needs_update == 'true'
        run: |
          go get github.com/xtls/xray-core@${{ env.LATEST_TAG_SHA }}
          go mod tidy -v
          git diff

      - name: Commit and push changes
        id: auto-commit-action
        if: env.needs_update == 'true'
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Updating xray-core to ${{ env.LATEST_TAG_NAME }} ${{ env.LATEST_TAG_SHA }}
          tagging_message: ${{ env.LATEST_TAG_NAME }}

      - name: Trigger build
        if: env.needs_update == 'true' && steps.auto-commit-action.outputs.changes_detected == 'true'
        run: |
          curl -X POST \
            -H "Accept: application/vnd.github.v3+json" \
            -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            https://api.github.com/repos/${{ github.repository }}/actions/workflows/main.yml/dispatches \
            -d "{
              \"ref\": \"main\",
              \"inputs\": {
                \"release_tag\": \"${{ env.LATEST_TAG_NAME }}\"
              }
            }"
