#!/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"