Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added gogs migration script #532

Merged
merged 1 commit into from
Jan 25, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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"