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 4 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