-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
206 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |