Skip to content

Fix mirror - take 2 #4999 #851

Fix mirror - take 2 #4999

Fix mirror - take 2 #4999 #851

Workflow file for this run

name: Mirror
on: [push, delete]
jobs:
mirror:
if: ${{ github.repository == 'authgear/authgear-server' }}
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
# Set fetch-depth: 0 to fetch all history for all branches and tags.
# https://github.com/actions/checkout#:~:text=Set%20fetch%2Ddepth%3A%200%20to%20fetch%20all%20history%20for%20all%20branches%20and%20tags.
fetch-depth: 0
- name: Import GitHub Deploy Key of the mirror repository
env:
MIRROR_GITHUB_DEPLOY_KEY: ${{ secrets.MIRROR_GITHUB_DEPLOY_KEY_OURSKY }}
run: |
mkdir -p ~/.ssh
printf "$MIRROR_GITHUB_DEPLOY_KEY" | base64 --decode > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
if [ -e ~/.ssh/known_hosts ]; then ssh-keygen -R github.com; fi
ssh-keyscan github.com >> ~/.ssh/known_hosts
- name: Mirror
run: |
export GIT_SSH_COMMAND="ssh -v -i ~/.ssh/id_ed25519"
# Print the git version for debugging purpose.
git --version
# Print the output of git show-ref for debugging purpose.
git show-ref
git remote add mirror [email protected]:oursky/authgear-server.git
# This expansion includes refs/remotes/origin/HEAD:refs/heads/HEAD
# That would create a branch named HEAD in the mirror repository.
# I tried to use the following command to exclude HEAD
#
# git show-ref | awk '{ print $2 }' | perl -n -e 'if (/(^refs\/remotes\/origin\/(.+)$)/ ) { if ($2 != "HEAD") { print "$1:refs/heads/$2\n" } }' | xargs -x git push --tags --force --prune "[email protected]:oursky/authgear-server.git"
#
# But that command will just result in "Everything up-to-date".
# So I change GitHub actions to exclude the branch "HEAD" instead.
# At least we will not receive a GitHub actions error saying HEAD is not a valid branch name.
git push --tags --force --prune mirror "refs/remotes/origin/*:refs/heads/*"
- name: Clean up
if: ${{ always() }}
run: |
rm -f ~/.ssh/id_ed25519
git remote remove mirror