mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Added gogs migration script (#532)
This commit is contained in:
		
							
								
								
									
										206
									
								
								scripts/migrate/gogs_migrate.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										206
									
								
								scripts/migrate/gogs_migrate.sh
									
									
									
									
									
										Executable file
									
								
							@@ -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"
 | 
				
			||||||
		Reference in New Issue
	
	Block a user