Configurando Mirror entre repositórios: GitHub para GitLab
Aprenda o que é um Mirror de repositórios e a como configurar um de forma rápida

Afinal, o que é um Mirror de repositórios?
Imagine que você trabalha em uma empresa de Desenvolvimento de Software, e junto com a sua equipe vocês desenvolveram uma solução para um cliente da Companhia, e agora ele deseja ter acesso ao código fonte da aplicação. Como você faria isso? Existem muitas maneiras de passar esse acesso, e uma delas é o Mirror. Com ele, você faz de fato um espelhamento(Mirror), onde criamos um repositório em branco (em nosso exemplo, na conta do cliente), e ele será atualizado com todo o código e futuras mudanças de um repositório já existente(repositório da empresa).
Passo a passo para configurar o seu Mirror
É importante ressaltar que existem várias maneiras de fazer um Mirror com o repositório de origem estando on Github. Nesse tutorial irei utilizar o Github actions para realizar essa tarefa.
1. Criando a pipeline em seu projeto de origem
Crie o a seguinte estrutura de arquivos na raiz do seu projeto:
.github/workflow/mirror.yml.github e workflows são duas pastas, então caso essa estrutura já exista em seu projeto, apenas crie um arquivo com a extensão .yml dentro delas.
Dentro do arquivo mirror.yml, adicione o seguinte código:
name: Mirroring
on: [push, delete]
jobs:
to_gitlab:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pixta-dev/repository-mirroring-action@v1
with:
target_repo_url:
git@gitlab.com:ViniciusCassemira/mirror.git
ssh_private_key:
${{ secrets.GITLAB_SSH_PRIVATE_KEY }}Note
Para o tutorial não se estender desnecessariamente, não irei explicar sobre o código acima, sobre o que é uma pipeline dentro de um projeto ou até mesmo sobre o Github Actions. Se você está aqui para saber como realizar um Mirror Github > Gitlab, provavelmente já tem uma noção básica sobre esses conceitos.
De forma resumida, toda vez que o projeto receber um push ou delete, todo o código da aplicação será clonado, e depois enviado para o endereço do repositório que estiver em:
[...]
target_repo_url:
git@gitlab.com:ViniciusCassemira/mirror.git # Url do repositório de destino
[...]Altere esse valor para a Url do seu projeto de destino, então caso você ainda não tenha esse criado, realize essa configuração.
2. Criando chaves SSH de acesso ao repositório de destino
Para a pipeline que configuramos anteriormente possa acessar o nosso projeto de destino, esse precisa ter configurado uma Deploy Key, e nossa pipeline dentro do Github deve usar a chave privada para se autenticar no repositório de destino.
Crie as chaves utilizando o seguinte comando:
ssh-keygen -t ed25519 -C "mirror-action" -f "./mirror_key"
3. Configurando chave privada no repositório de origem
Agora que possuímos as chaves privadas e públicas, vamos terminar a configuração da nossa pipeline no repositório de origem. Acesse essa área em seu projeto no Github e clique em New repository secret:

Configure a tela seguinte dessa forma:
Name: Mesmo nome que configuramos em nossa pipeline, quando ela for executada irá buscar esse secret com base em seu nome
Secret: Valor da chave privada mirror_key que criamos anteriormente. Não vou mostrar ela no tutorial porque não quero que alterem o meu repositório de destino.

Após configurar esses dois valores, clique em Add secret.
A configuração do nosso repositório de origem foi finalizada. Agora vamos para o Gitlab
4. Configurando chave pública no repositório de destino
Acesse essa área em seu repositório no Gitlab e clique em Add new Key:

Agora, configure a próxima tela da seguinte forma:
Title: Qualquer um, desde que faça você se lembrar da origem dessa configuração.
Key: Valor da chave pública mirror_key.pub que configuramos no 2º passo desse tutorial.
Grant write permissions on this key: Habilite essa opção

Clique em Add Key para salvar a configuração.
Para evitar conflitos na hora do Mirror, prefira usar um projeto de destino vazio, em branco.
5. Verificando branchs protegidas
Talvez a pipeline no github não consiga atualizar em branchs protegidas em seu Gitlab. Para o meu caso, eu resolvi ativando a seguinte opção em meu projeto no Gitlab:

6. Testando Mirror
Agora que já configuramos ambos os projetos, vamos testar a execução da nossa Pipeline. Suba no projeto de Origem as mudanças que fizemos no 1º passo, e veja a mágica acontecer!


