Merge branch 'feature/release-update-script' into 'develop'
pleroma_ctl: add an update command Closes #1004 and #988 See merge request pleroma/pleroma!1305
This commit is contained in:
commit
ba584364e9
|
@ -173,6 +173,7 @@ amd64:
|
||||||
script: &release
|
script: &release
|
||||||
- mix deps.get --only prod
|
- mix deps.get --only prod
|
||||||
- mkdir release
|
- mkdir release
|
||||||
|
- export PLEROMA_BUILD_BRANCH=$CI_COMMIT_REF_NAME
|
||||||
- mix release --path release
|
- mix release --path release
|
||||||
|
|
||||||
|
|
||||||
|
|
7
mix.exs
7
mix.exs
|
@ -37,14 +37,14 @@ def project do
|
||||||
pleroma: [
|
pleroma: [
|
||||||
include_executables_for: [:unix],
|
include_executables_for: [:unix],
|
||||||
applications: [ex_syslogger: :load, syslog: :load],
|
applications: [ex_syslogger: :load, syslog: :load],
|
||||||
steps: [:assemble, ©_pleroma_ctl/1]
|
steps: [:assemble, ©_files/1]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def copy_pleroma_ctl(%{path: target_path} = release) do
|
def copy_files(%{path: target_path} = release) do
|
||||||
File.cp!("./rel/pleroma_ctl", Path.join([target_path, "bin", "pleroma_ctl"]))
|
File.cp_r!("./rel/files", target_path)
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -209,6 +209,7 @@ defp version(version) do
|
||||||
|
|
||||||
branch_name =
|
branch_name =
|
||||||
with {branch_name, 0} <- System.cmd("git", ["rev-parse", "--abbrev-ref", "HEAD"]),
|
with {branch_name, 0} <- System.cmd("git", ["rev-parse", "--abbrev-ref", "HEAD"]),
|
||||||
|
branch_name <- System.get_env("PLEROMA_BUILD_BRANCH") || branch_name,
|
||||||
true <- branch_name != "master" do
|
true <- branch_name != "master" do
|
||||||
branch_name =
|
branch_name =
|
||||||
String.trim(branch_name)
|
String.trim(branch_name)
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# XXX: This should be removed when elixir's releases get custom command support
|
||||||
|
|
||||||
|
detect_flavour() {
|
||||||
|
arch="$(arch)"
|
||||||
|
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" ] || [ -n "$PLEROMA_CTL_RPC_DISABLED" ]; then
|
||||||
|
"$SCRIPTPATH"/pleroma eval 'Pleroma.ReleaseTasks.run("'"$*"'")'
|
||||||
|
else
|
||||||
|
"$SCRIPTPATH"/pleroma rpc 'Pleroma.ReleaseTasks.run("'"$*"'")'
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# XXX: This should be removed when elixir's releases get custom command support
|
|
||||||
if [ -z "$1" ] || [ "$1" = "help" ]; then
|
|
||||||
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)
|
|
||||||
|
|
||||||
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" = "migrate" ] || [ "$1" = "rollback" ] || [ "$1" = "create" ] || [ -n "$PLEROMA_CTL_RPC_DISABLED" ]; then
|
|
||||||
"$SCRIPTPATH"/pleroma eval 'Pleroma.ReleaseTasks.run("'"$*"'")'
|
|
||||||
else
|
|
||||||
"$SCRIPTPATH"/pleroma rpc 'Pleroma.ReleaseTasks.run("'"$*"'")'
|
|
||||||
fi
|
|
||||||
fi
|
|
Loading…
Reference in New Issue