118 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
# XXX: This should be removed when elixir's releases get custom command support
 | 
						|
 | 
						|
detect_flavour() {
 | 
						|
	arch="$(uname -m)"
 | 
						|
	if [ "$arch" = "x86_64" ]; then
 | 
						|
		arch="amd64"
 | 
						|
	elif [ "$arch" = "armv7l" ]; then
 | 
						|
		arch="arm"
 | 
						|
	elif [ "$arch" = "aarch64" ]; then
 | 
						|
		arch="arm64"
 | 
						|
	else
 | 
						|
		echo "Unsupported arch: $arch" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
 | 
						|
	if getconf GNU_LIBC_VERSION >/dev/null; then
 | 
						|
		libc_postfix=""
 | 
						|
	elif [ "$(ldd 2>&1 | head -c 9)" = "musl libc" ]; then
 | 
						|
		libc_postfix="-musl"
 | 
						|
	elif [ "$(find /lib/libc.musl* | wc -l)" ]; then
 | 
						|
		libc_postfix="-musl"
 | 
						|
	else
 | 
						|
		echo "Unsupported libc" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
 | 
						|
	echo "$arch$libc_postfix"
 | 
						|
}
 | 
						|
 | 
						|
detect_branch() {
 | 
						|
	version="$(cut -d' ' -f2 <"$RELEASE_ROOT"/releases/start_erl.data)"
 | 
						|
	branch="$(echo "$version" | cut -d'-' -f 4)"
 | 
						|
	if [ "$branch" = "develop" ]; then
 | 
						|
		echo "develop"
 | 
						|
	elif [ "$branch" = "" ]; then
 | 
						|
		echo "master"
 | 
						|
	else
 | 
						|
		echo "Releases are built only for master and develop branches" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
}
 | 
						|
update() {
 | 
						|
	set -e
 | 
						|
	RELEASE_ROOT=$(dirname "$SCRIPTPATH")
 | 
						|
	uri="${PLEROMA_CTL_URI:-https://git.pleroma.social}"
 | 
						|
	project_id="${PLEROMA_CTL_PROJECT_ID:-2}"
 | 
						|
	project_branch="$(detect_branch)"
 | 
						|
	flavour="${PLEROMA_CTL_FLAVOUR:-$(detect_flavour)}"
 | 
						|
	echo "Detected flavour: $flavour"
 | 
						|
	tmp="${PLEROMA_CTL_TMP_DIR:-/tmp}"
 | 
						|
	artifact="$tmp/pleroma.zip"
 | 
						|
	full_uri="${uri}/api/v4/projects/${project_id}/jobs/artifacts/${project_branch}/download?job=${flavour}"
 | 
						|
	echo "Downloading the artifact from ${full_uri} to ${artifact}"
 | 
						|
	curl "$full_uri" -o "${artifact}"
 | 
						|
	echo "Unpacking ${artifact} to ${tmp}"
 | 
						|
	unzip -q "$artifact" -d "$tmp"
 | 
						|
	echo "Copying files over to $RELEASE_ROOT"
 | 
						|
	if [ "$1" != "--no-rm" ]; then
 | 
						|
		rm -r "${RELEASE_ROOT:-?}"/*
 | 
						|
	fi
 | 
						|
	cp -rf "$tmp/release"/* "$RELEASE_ROOT"
 | 
						|
	echo "Removing temporary files"
 | 
						|
	rm -r "$tmp/release"
 | 
						|
	rm "$artifact"
 | 
						|
	echo "Done! Please refer to the changelog/release notes for changes and update instructions"
 | 
						|
	set +e
 | 
						|
}
 | 
						|
 | 
						|
if [ -z "$1" ] || [ "$1" = "help" ]; then
 | 
						|
	# TODO: Just list the commands on `pleroma_ctl help` and output help for the individual command on `pleroma_ctl help $COMMAND`
 | 
						|
	echo "Usage: $(basename "$0") COMMAND [ARGS]
 | 
						|
 | 
						|
    The known commands are:
 | 
						|
 | 
						|
        create
 | 
						|
	  Create database schema (needs to be executed only once)
 | 
						|
 | 
						|
        migrate
 | 
						|
	  Execute database migrations (needs to be done after updates)
 | 
						|
 | 
						|
        rollback [VERSION]
 | 
						|
	  Rollback database migrations (needs to be done before downgrading)
 | 
						|
 | 
						|
	update [OPTIONS]
 | 
						|
	  Update the instance using the latest CI artifact for the current branch.
 | 
						|
 | 
						|
	  The only supported option is --no-rm, when set the script won't delete the whole directory, but
 | 
						|
	  just force copy over files from the new release. This wastes more space, but may be useful if
 | 
						|
	  some files are stored inside of the release directories (although you really shouldn't store them
 | 
						|
	  there), or if you want to be able to quickly revert a broken update.
 | 
						|
 | 
						|
	  The script will try to detect your architecture and ABI and set a flavour automatically,
 | 
						|
	  but if it is wrong, you can overwrite it by setting PLEROMA_CTL_FLAVOUR to the desired flavour.
 | 
						|
 | 
						|
	  By default the artifact will be downloaded from https://git.pleroma.social for pleroma/pleroma (project id: 2)
 | 
						|
	  to /tmp/, you can overwrite these settings by setting PLEROMA_CTL_URI, PLEROMA_CTL_PROJECT_ID and PLEROMA_CTL_TMP_DIR
 | 
						|
	  respectively.
 | 
						|
 | 
						|
 | 
						|
    and any mix tasks under Pleroma namespace, for example \`mix pleroma.user COMMAND\` is
 | 
						|
    equivalent to \`$(basename "$0") user COMMAND\`
 | 
						|
 | 
						|
    By default pleroma_ctl will try calling into a running instance to execute non migration-related commands,
 | 
						|
    if for some reason this is undesired, set PLEROMA_CTL_RPC_DISABLED environment variable
 | 
						|
"
 | 
						|
else
 | 
						|
	SCRIPT=$(readlink -f "$0")
 | 
						|
	SCRIPTPATH=$(dirname "$SCRIPT")
 | 
						|
 | 
						|
	if [ "$1" = "update" ]; then
 | 
						|
		update "$2"
 | 
						|
	elif [ "$1" = "migrate" ] || [ "$1" = "rollback" ] || [ "$1" = "create" ] || [ "$1 $2" = "instance gen" ] || [ -n "$PLEROMA_CTL_RPC_DISABLED" ]; then
 | 
						|
		"$SCRIPTPATH"/pleroma eval 'Pleroma.ReleaseTasks.run("'"$*"'")'
 | 
						|
	else
 | 
						|
		"$SCRIPTPATH"/pleroma rpc 'Pleroma.ReleaseTasks.run("'"$*"'")'
 | 
						|
	fi
 | 
						|
fi
 |