diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml new file mode 100644 index 0000000..28d0886 --- /dev/null +++ b/.github/workflows/mirror.yml @@ -0,0 +1,200 @@ +name: 'Mirror' + +on: + - push + +env: + OWNER: '${{ github.repository_owner }}' + USER_AGENT: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0' + +jobs: + + # ------------------------------------------------------------------------------------------------------------------ # + # GitLab. + # ------------------------------------------------------------------------------------------------------------------ # + + mirror_gitlab: + runs-on: ubuntu-latest + name: 'GitLab' + env: + DOMAIN: 'https://gitlab.com' + VERSION: 'v4' + NSID: '69852292' + steps: + - name: 'Get repository name' + shell: bash + run: | + echo "REPO_NAME=$( echo '${{ github.repository }}' | awk -F '/' '{ print $2 }' )" >> $GITHUB_ENV + - name: 'Create repository' + shell: bash + run: | + http="$( curl -s -o '/dev/null' -I -w '%{http_code}' -A '${{ env.USER_AGENT }}' '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}' )" + if [[ "${http}" -ne 200 ]]; then + curl -X POST \ + -H 'Authorization: Bearer ${{ secrets.BOT_MIRROR_TOKEN_GITLAB }}' \ + -H 'Content-Type: application/json' \ + -A '${{ env.USER_AGENT }}' \ + '${{ env.DOMAIN }}/api/${{ env.VERSION }}/projects' \ + -d '{"name":"${{ env.REPO_NAME }}","path":"${{ env.REPO_NAME }}","namespace_id":"${{ env.NSID }}","visibility":"public"}' + fi + - name: 'Mirror repository' + uses: ghastore/github-mirror@main + with: + src_repo: '${{ github.server_url }}/${{ github.repository }}.git' + src_user: '${{ secrets.BOT_MIRROR_NAME }}' + src_token: '${{ secrets.BOT_MIRROR_TOKEN_GITHUB }}' + dst_repo: '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}.git' + dst_user: '${{ secrets.BOT_MIRROR_NAME }}' + dst_token: '${{ secrets.BOT_MIRROR_TOKEN_GITLAB }}' + + # ------------------------------------------------------------------------------------------------------------------ # + # Codeberg. + # ------------------------------------------------------------------------------------------------------------------ # + + mirror_codeberg: + runs-on: ubuntu-latest + name: 'Codeberg' + env: + DOMAIN: 'https://codeberg.org' + VERSION: 'v1' + steps: + - name: 'Get repository name' + shell: bash + run: | + echo "REPO_NAME=$( echo '${{ github.repository }}' | awk -F '/' '{ print $2 }' )" >> $GITHUB_ENV + - name: 'Create repository' + shell: bash + run: | + http="$( curl -s -o '/dev/null' -I -w '%{http_code}' -A '${{ env.USER_AGENT }}' '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}' )" + if [[ "${http}" -ne 200 ]]; then + curl -X POST \ + -H 'Authorization: token ${{ secrets.BOT_MIRROR_TOKEN_CODEBERG }}' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -A '${{ env.USER_AGENT }}' \ + '${{ env.DOMAIN }}/api/${{ env.VERSION }}/orgs/${{ env.OWNER }}/repos' \ + -d '{"name":"${{ env.REPO_NAME }}"}' + fi + - name: 'Mirror repository' + uses: ghastore/github-mirror@main + with: + src_repo: '${{ github.server_url }}/${{ github.repository }}.git' + src_user: '${{ secrets.BOT_MIRROR_NAME }}' + src_token: '${{ secrets.BOT_MIRROR_TOKEN_GITHUB }}' + dst_repo: '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}.git' + dst_user: '${{ secrets.BOT_MIRROR_NAME }}' + dst_token: '${{ secrets.BOT_MIRROR_TOKEN_CODEBERG }}' + + # ------------------------------------------------------------------------------------------------------------------ # + # MosHub. + # ------------------------------------------------------------------------------------------------------------------ # + + mirror_moshub: + runs-on: ubuntu-latest + name: 'MosHub' + env: + DOMAIN: 'https://hub.mos.ru' + VERSION: 'v4' + NSID: '38795' + steps: + - name: 'Get repository name' + shell: bash + run: | + echo "REPO_NAME=$( echo '${{ github.repository }}' | awk -F '/' '{ print $2 }' )" >> $GITHUB_ENV + - name: 'Create repository' + shell: bash + run: | + http="$( curl -s -o '/dev/null' -I -w '%{http_code}' -A '${{ env.USER_AGENT }}' '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}' )" + if [[ "${http}" -ne 200 ]]; then + curl -X POST \ + -H 'Authorization: Bearer ${{ secrets.BOT_MIRROR_TOKEN_MOSHUB }}' \ + -H 'Content-Type: application/json' \ + -A '${{ env.USER_AGENT }}' \ + '${{ env.DOMAIN }}/api/${{ env.VERSION }}/projects' \ + -d '{"name":"${{ env.REPO_NAME }}","path":"${{ env.REPO_NAME }}","namespace_id":"${{ env.NSID }}","visibility":"public"}' + fi + - name: 'Mirror repository' + uses: ghastore/github-mirror@main + with: + src_repo: '${{ github.server_url }}/${{ github.repository }}.git' + src_user: '${{ secrets.BOT_MIRROR_NAME }}' + src_token: '${{ secrets.BOT_MIRROR_TOKEN_GITHUB }}' + dst_repo: '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}.git' + dst_user: '${{ secrets.BOT_MIRROR_NAME }}' + dst_token: '${{ secrets.BOT_MIRROR_TOKEN_MOSHUB }}' + + # ------------------------------------------------------------------------------------------------------------------ # + # GIT.ORG.RU. + # ------------------------------------------------------------------------------------------------------------------ # + + mirror_gitorgru: + runs-on: ubuntu-latest + name: 'GIT.ORG.RU' + env: + DOMAIN: 'https://git.org.ru' + VERSION: 'v1' + steps: + - name: 'Get repository name' + shell: bash + run: | + echo "REPO_NAME=$( echo '${{ github.repository }}' | awk -F '/' '{ print $2 }' )" >> $GITHUB_ENV + - name: 'Create repository' + shell: bash + run: | + http="$( curl -s -o '/dev/null' -I -w '%{http_code}' -A '${{ env.USER_AGENT }}' '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}' )" + if [[ "${http}" -ne 200 ]]; then + curl -X POST \ + -H 'Authorization: token ${{ secrets.BOT_MIRROR_TOKEN_GITORGRU }}' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -A '${{ env.USER_AGENT }}' \ + '${{ env.DOMAIN }}/api/${{ env.VERSION }}/orgs/${{ env.OWNER }}/repos' \ + -d '{"name":"${{ env.REPO_NAME }}"}' + fi + - name: 'Mirror repository' + uses: ghastore/github-mirror@main + with: + src_repo: '${{ github.server_url }}/${{ github.repository }}.git' + src_user: '${{ secrets.BOT_MIRROR_NAME }}' + src_token: '${{ secrets.BOT_MIRROR_TOKEN_GITHUB }}' + dst_repo: '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}.git' + dst_user: '${{ secrets.BOT_MIRROR_NAME }}' + dst_token: '${{ secrets.BOT_MIRROR_TOKEN_GITORGRU }}' + + # ------------------------------------------------------------------------------------------------------------------ # + # Disroot. + # ------------------------------------------------------------------------------------------------------------------ # + + mirror_disroot: + runs-on: ubuntu-latest + name: 'Disroot' + env: + DOMAIN: 'https://git.disroot.org' + VERSION: 'v1' + steps: + - name: 'Get repository name' + shell: bash + run: | + echo "REPO_NAME=$( echo '${{ github.repository }}' | awk -F '/' '{ print $2 }' )" >> $GITHUB_ENV + - name: 'Create repository' + shell: bash + run: | + http="$( curl -s -o '/dev/null' -I -w '%{http_code}' -A '${{ env.USER_AGENT }}' '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}' )" + if [[ "${http}" -ne 200 ]]; then + curl -X POST \ + -H 'Authorization: token ${{ secrets.BOT_MIRROR_TOKEN_DISROOT }}' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -A '${{ env.USER_AGENT }}' \ + '${{ env.DOMAIN }}/api/${{ env.VERSION }}/orgs/${{ env.OWNER }}/repos' \ + -d '{"name":"${{ env.REPO_NAME }}"}' + fi + - name: 'Mirror repository' + uses: ghastore/github-mirror@main + with: + src_repo: '${{ github.server_url }}/${{ github.repository }}.git' + src_user: '${{ secrets.BOT_MIRROR_NAME }}' + src_token: '${{ secrets.BOT_MIRROR_TOKEN_GITHUB }}' + dst_repo: '${{ env.DOMAIN }}/${{ env.OWNER }}/${{ env.REPO_NAME }}.git' + dst_user: '${{ secrets.BOT_MIRROR_NAME }}' + dst_token: '${{ secrets.BOT_MIRROR_TOKEN_DISROOT }}'