name: Update

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

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

      - name: Install Nix
        uses: cachix/install-nix-action@v31
        with:
          nix_path: nixpkgs=channel:nixos-unstable

      - name: Use Cachix
        uses: cachix/cachix-action@v16
        with:
          name: trevstack
          authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"

      # https://github.com/actions/checkout/issues/13
      - name: Set Git Config
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git checkout -B update

      - name: Update
        run: nix run .#update

      - name: Create Pull Request
        env:
          PAT: ${{ secrets.PAT }}
        run: |
          URL="${{ gitea.server_url }}"
          REPO_OWNER_SLASH_NAME="${{ gitea.repository }}"

          if ! git ls-remote --exit-code origin update; then
            git push origin update --force

            PR_RESPONSE=$(curl -s -X POST -H "Authorization: token $PAT" \
              -H "Content-Type: application/json" \
              -d '{"title":"update","body":"automatic update","head":"update","base":"main"}' \
              "https://$URL/api/v1/repos/$REPO_OWNER_SLASH_NAME/pulls")
            
            PR_NUMBER=$(echo "$PR_RESPONSE" | jq -r '.number')

            curl -s -X POST -H "Authorization: token $PAT" \
              -H "Content-Type: application/json" \
              -d '{"Do":"merge","merge_when_checks_succeed":true,"delete_branch_after_merge":true}' \
              "https://$URL/api/v1/repos/$REPO_OWNER_SLASH_NAME/pulls/$PR_NUMBER/merge"

          else
            git push origin update --force
          fi
