• TheLinuxGuy@programming.dev
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    1 year ago

    Probably this script:

    #!/bin/bash
    
    if [ -z "$1" ]
    then
            echo "Please provide git repository url as an argument for this script."
            exit 1
    fi
    regex='(https?|ftp|file)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]'
    if [[ $1 =~ $regex ]]
    then
    basename=$(basename $1)
    reponame=${basename%.*}
    curl -X 'POST' 'https://localgitea.com/api/v1/repos/migrate?access_token={Access Token Here}' \
      --insecure \
      -H "accept: application/json" \
      -H "Content-Type: application/json" \
      -d '{  "clone_addr": "'"$1"'",  "issues": false,  "labels": false,  "lfs": false,  "mirror": true,  "mirror_interval": "96h0m0s",  "private": false, "repo_name": "'"$reponame"'", "pull_requests": true,  "releases": true, "repo_owner": "githubpublic",  "service": "git",  "wiki": true}'
    else
            echo "Invalid URL"
            exit 1
    fi
    

    You can adjust it as needed and as for why I have --insecure flag, I have a direct network cable between my PC to the server, so encryption or HTTPS is not needed here. This is probably my favorite command, because I would write above as .sra.sh in home directory and then alias the .bashrc to make a sra command by adding alias sra=/home/{your user account}/.sra.sh in .bashrc and from there, anytime I have an interesting repository that I want to archive, I simply run sra {git url} and that’s it. It also specify the mirror interval manually for 3 days interval rather than every 8 hours that would’ve needlessly spam the git server.

    This is something I rely on everyday both as developer and system admin, I would maintain a different supply chain and prevent a supply chain attacks by generating my own package feeds/registry automatically from Gitea/Forgejo.

    Edited to Add: I noticed this community is Powershell, here the powershell version of above:

    param (
        [Parameter(Mandatory=$true)]
        [string]$gitRepoUrl
    )
    
    function Test-Url($url) {
        $regex = "(https?|ftp|file)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]"
        return $url -match $regex
    }
    
    
    $basename = Split-Path $gitRepoUrl -Leaf
    $reponame = [System.IO.Path]::GetFileNameWithoutExtension($basename)
    
    $headers = @{
        'accept' = 'application/json'
        'Content-Type' = 'application/json'
    }
    
    $body = @{
        'clone_addr' = $gitRepoUrl
        'issues' = $false
        'labels' = $false
        'lfs' = $false
        'mirror' = $true
        'mirror_interval' = '96h0m0s'
        'private' = $false
        'repo_name' = $reponame
        'pull_requests' = $true
        'releases' = $true
        'repo_owner' = 'githubpublic'
        'service' = 'git'
        'wiki' = $true
    } | ConvertTo-Json
    
    Invoke-RestMethod -Uri 'https://localgitea.com/api/v1/repos/migrate?access_token={Access Token Here}' -Method POST -Headers $headers -Body $body -SkipCertificateCheck