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

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 }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
        with:
          persist-credentials: false

      - 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
