|
|
@ -0,0 +1,206 @@ |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
gitea_version=1.0.1 |
|
|
|
tested_gogs_version="0.9.114.1227" |
|
|
|
gogs_binary=gogs |
|
|
|
gitea_binary=gitea |
|
|
|
download_gitea=true |
|
|
|
gitea_path= |
|
|
|
|
|
|
|
function usage() { |
|
|
|
echo "Optional parameters: [-b Gitea binary] [-i Gitea install dir] [-o gogs binary] [-h help]"; |
|
|
|
exit 1; |
|
|
|
} |
|
|
|
|
|
|
|
while getopts ":b::i:o:h:" opt; do |
|
|
|
case $opt in |
|
|
|
b) |
|
|
|
gitea_binary=${OPTARG} |
|
|
|
download_gitea=false |
|
|
|
;; |
|
|
|
i) |
|
|
|
gitea_path=${OPTARG} |
|
|
|
;; |
|
|
|
o) |
|
|
|
gogs_binary=${OPTARG} |
|
|
|
;; |
|
|
|
h) |
|
|
|
usage |
|
|
|
;; |
|
|
|
\?) |
|
|
|
echo -e "Invalid option: -$OPTARG" |
|
|
|
exit 1 |
|
|
|
;; |
|
|
|
:) |
|
|
|
usage |
|
|
|
exit 1 |
|
|
|
;; |
|
|
|
esac |
|
|
|
done |
|
|
|
|
|
|
|
function exitOnError() { |
|
|
|
if [ "$?" != "0" ]; then |
|
|
|
echo -e $1 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
function checkBinary() { |
|
|
|
if [ ! -f $1 ]; then |
|
|
|
echo "Unable to find $1" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
function continueYN(){ |
|
|
|
while true; do |
|
|
|
echo -e "$1 Yes or No" |
|
|
|
read yn |
|
|
|
case $yn in |
|
|
|
[Yy]* ) break;; |
|
|
|
[Nn]* ) exit 1;; |
|
|
|
* ) echo "Please answer yes or no.";; |
|
|
|
esac |
|
|
|
done |
|
|
|
} |
|
|
|
|
|
|
|
########## Binary checks |
|
|
|
if pidof "$gogs_binary" >/dev/null; then |
|
|
|
echo "Please stop gogs before migrating to Gitea" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
checkBinary "$gogs_binary" |
|
|
|
|
|
|
|
if [ ! -x "$gogs_binary" ]; then |
|
|
|
echo "Please make sure that you are running this script as the gogs user" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
########## Version check |
|
|
|
gogs_version=$(./$gogs_binary --version) |
|
|
|
original_IFS=$IFS |
|
|
|
IFS="." && current_version=(${gogs_version#"Gogs version "}) && minimal_version=($tested_gogs_version) |
|
|
|
IFS=$original_IFS |
|
|
|
|
|
|
|
count=0 |
|
|
|
for i in "${current_version[@]}" |
|
|
|
do |
|
|
|
if [ $i -gt ${minimal_version[$count]} ]; then |
|
|
|
echo -e "!!!--WARNING--!!!\nYour $gogs_version is newer than the tested Gogs version $tested_gogs_version\nUse this script on your own risk\n!!!--WARNING--!!!" |
|
|
|
break |
|
|
|
fi |
|
|
|
let count+=1 |
|
|
|
done |
|
|
|
|
|
|
|
########## Disclaimer |
|
|
|
continueYN "This migration script creates a backup before it starts with the actual migration |
|
|
|
If something goes wrong you could always resotre this backup. |
|
|
|
The backups are stored into your gogs folder in gogs-dump-[timestamp].zip file |
|
|
|
|
|
|
|
Migrating from gogs to gitea, are you sure?" |
|
|
|
|
|
|
|
########## gogs dump |
|
|
|
echo "Creating a backup of gogs, this could take a while..." |
|
|
|
./"$gogs_binary" dump |
|
|
|
exitOnError "Failed to create a gogs dump" |
|
|
|
|
|
|
|
########## Create Gitea folder |
|
|
|
if [ -z "$gitea_path" ]; then |
|
|
|
echo "Where do you want to install Gitea?" |
|
|
|
read gitea_path |
|
|
|
fi |
|
|
|
|
|
|
|
if [ ! -d "$gitea_path" ]; then |
|
|
|
mkdir -p "$gitea_path" |
|
|
|
exitOnError |
|
|
|
fi |
|
|
|
|
|
|
|
if [ "$(ls -A $gitea_path)" ]; then |
|
|
|
continueYN "!!!--WARNING--!!!\nDirectory $gitea_path is not empty, do you want to continue?" |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
########## Download Gitea |
|
|
|
if [ $download_gitea == true ]; then |
|
|
|
|
|
|
|
########## Detect os |
|
|
|
case "$OSTYPE" in |
|
|
|
darwin*) platform="darwin-10.6";; |
|
|
|
linux*) platform="linux" ;; |
|
|
|
freebsd*) platform="bsd" ;; |
|
|
|
netbsd*) platform="bsd" ;; |
|
|
|
openbsd*) platform="bsd" ;; |
|
|
|
*) echo "Unsupported os: $OSTYPE\n Please download/compile your own binary and run this script with the -b option" exit 1;; |
|
|
|
esac |
|
|
|
|
|
|
|
arch="" |
|
|
|
bits="" |
|
|
|
if [[ "$platform" == "linux" ]] || [[ "$platform" == "bsd" ]]; then |
|
|
|
arch="$(uname -m | sed -e 's/arm\(.*\)/arm-\1/' -e s/aarch64.*/arm64/)" |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ "$platform" == "bsd" ]] && [[ "$arch" != "arm"* ]]; then |
|
|
|
echo "Currently Gitea only supports arm prebuilt binarys on bsd" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ "$arch" != "arm"* ]] && [[ "$arch" != "mips"* ]]; then |
|
|
|
arch="" |
|
|
|
case "$(getconf LONG_BIT)" in |
|
|
|
64*) bits="amd64";; |
|
|
|
32*) bits="386" ;; |
|
|
|
esac |
|
|
|
fi |
|
|
|
|
|
|
|
########## Wget Gitea |
|
|
|
echo "Downloading Gitea" |
|
|
|
file="gitea-$gitea_version-$platform-$arch$bits" |
|
|
|
url="https://dl.gitea.io/gitea/$gitea_version/$file" |
|
|
|
wget "$url" -P "$gitea_path" |
|
|
|
exitOnError "Failed to download $url" |
|
|
|
|
|
|
|
wget "$url.sha256" -P "$gitea_path" |
|
|
|
exitOnError "Failed to Gitea checksum $url.sha256" |
|
|
|
|
|
|
|
echo "Comparing checksums" |
|
|
|
gogs_dir=$(pwd) |
|
|
|
cd "$gitea_path" |
|
|
|
|
|
|
|
sha256sum -c "$file.sha256" |
|
|
|
exitOnError "Downloaded Gitea checksums do not match" |
|
|
|
|
|
|
|
rm "$file.sha256" |
|
|
|
mv "$file" gitea |
|
|
|
cd "$gogs_dir" |
|
|
|
|
|
|
|
else |
|
|
|
checkBinary "$gitea_binary" |
|
|
|
if [ "$gitea_binary" != "$gitea_path/gitea" ];then |
|
|
|
cp "$gitea_binary" "$gitea_path/gitea" |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
########## Copy gogs data to Gitea folder |
|
|
|
echo "Copying gogs data to Gitea, this could take a while..." |
|
|
|
cp -R custom "$gitea_path" |
|
|
|
cp -R data "$gitea_path" |
|
|
|
#cp -R conf "$gitea_path" |
|
|
|
|
|
|
|
########## Moving & deleting old files |
|
|
|
#mv $gitea_path/conf $gitea_path/options |
|
|
|
cd "$gitea_path" |
|
|
|
mv "custom/conf/app.ini" "custom/conf/gogs_app.ini" |
|
|
|
url="https://raw.githubusercontent.com/go-gitea/gitea/v$gitea_version/conf/app.ini" |
|
|
|
wget "$url" -P "custom/conf/" |
|
|
|
exitOnError "Unable to download Gitea app.ini" |
|
|
|
rm -f conf/README.md |
|
|
|
|
|
|
|
echo -e "Migration is almost complete, you only need to merge custom/conf/gogs_app.ini into custom/conf/app.ini" |
|
|
|
continueYN "Do you want to start Gitea?" |
|
|
|
|
|
|
|
########## Starting Gitea |
|
|
|
echo "Starting Gitea" |
|
|
|
chmod +x gitea |
|
|
|
./gitea web |
|
|
|
exitOnError "Failed to start Gitea" |