Skip to content

Commit

Permalink
Added gogs migration script (#532)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bwko authored and lunny committed Jan 25, 2017
1 parent 833f8b9 commit 75f0b0c
Showing 1 changed file with 206 additions and 0 deletions.
206 changes: 206 additions & 0 deletions scripts/migrate/gogs_migrate.sh
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit 75f0b0c

Please sign in to comment.