name: mirror

on:
  workflow_dispatch:

  schedule:
    - cron: '@daily'

jobs:
  mirror:
    if: ${{ secrets.MIRROR_TOKEN != '' }}
    runs-on: docker
    container:
      image: 'code.forgejo.org/oci/node:20-bookworm'
    steps:
      - name: git push {v*/,}forgejo
        run: |
          git init --bare .
          git remote add origin ${{ env.GITHUB_SERVER_URL }}/${{ env.GITHUB_REPOSITORY }}
          git fetch origin refs/heads/forgejo:refs/mirror/forgejo
          git ls-remote origin refs/heads/v*/forgejo | while read sha full_ref ; do
            ref=${full_ref#refs/heads/}
            echo git fetch origin $full_ref:refs/mirror/$ref
            git fetch origin $full_ref:refs/mirror/$ref
          done
          echo git push --force https://${{ vars.MIRROR_DESTINATION }} refs/mirror/*:refs/heads/*
          git push --force https://any:${{ secrets.MIRROR_TOKEN }}@${{ vars.MIRROR_DESTINATION }} refs/mirror/*:refs/heads/*