name: Mirror Container Images

on:
  schedule:
    # Run every 2 hours
    - cron: "0 */2 * * *"
  workflow_dispatch:
    inputs:
      dry_run:
        description: 'Dry run (check only, no actual mirroring)'
        required: false
        default: false
        type: boolean
  push:
    branches:
      - main
    paths:
      # Re-run when config changes
      - '.forgejo/regsync/regsync.yml'
      - '.forgejo/workflows/mirror-images.yml'
concurrency:
  group: "mirror-images"
  cancel-in-progress: true

jobs:
  mirror-images:
    runs-on: ubuntu-latest
    env:
      BUILTIN_REGISTRY_USER: ${{ vars.BUILTIN_REGISTRY_USER }}
      BUILTIN_REGISTRY_PASSWORD: ${{ secrets.BUILTIN_REGISTRY_PASSWORD }}
      GITLAB_USERNAME: ${{ vars.GITLAB_USERNAME }}
      GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
      N7574_GIT_USERNAME: ${{ vars.N7574_GIT_USERNAME }}
      N7574_GIT_TOKEN: ${{ secrets.N7574_GIT_TOKEN }}
      GH_PACKAGES_USER: ${{ vars.GH_PACKAGES_USER }}
      GH_PACKAGES_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN }}
      DOCKER_MIRROR_USER: ${{ vars.DOCKER_MIRROR_USER }}
      DOCKER_MIRROR_TOKEN: ${{ secrets.DOCKER_MIRROR_TOKEN }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          persist-credentials: false

      # - uses: https://github.com/actions/create-github-app-token@v2
      #   id: app-token
      #   with:
      #     app-id: ${{ vars.GH_APP_ID }}
      #     private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
      #     github-api-url: https://api.github.com
      #     owner: continuwuity
      #     repositories: continuwuity

      - name: Install regctl
        uses: https://forgejo.ellis.link/continuwuation/regclient-actions/regctl-installer@main
        with:
          binary: regsync

      - name: Check what images need mirroring
        run: |
          echo "Checking images that need mirroring..."
          regsync check -c .forgejo/regsync/regsync.yml -v info

      - name: Mirror images
        if: ${{ !inputs.dry_run }}
        run: |
          echo "Starting image mirroring..."
          regsync once -c .forgejo/regsync/regsync.yml -v info
