aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml1
-rw-r--r--mix.exs7
-rwxr-xr-xrel/files/bin/pleroma_ctl118
-rwxr-xr-xrel/pleroma_ctl26
4 files changed, 123 insertions, 29 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 97f96ffc8..f8711f299 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -173,6 +173,7 @@ amd64:
script: &release
- mix deps.get --only prod
- mkdir release
+ - export PLEROMA_BUILD_BRANCH=$CI_COMMIT_REF_NAME
- mix release --path release
diff --git a/mix.exs b/mix.exs
index 7f8e36cbb..9fdf6e83a 100644
--- a/mix.exs
+++ b/mix.exs
@@ -37,14 +37,14 @@ defmodule Pleroma.Mixfile do
pleroma: [
include_executables_for: [:unix],
applications: [ex_syslogger: :load, syslog: :load],
- steps: [:assemble, &copy_pleroma_ctl/1]
+ steps: [:assemble, &copy_files/1]
]
]
]
end
- def copy_pleroma_ctl(%{path: target_path} = release) do
- File.cp!("./rel/pleroma_ctl", Path.join([target_path, "bin", "pleroma_ctl"]))
+ def copy_files(%{path: target_path} = release) do
+ File.cp_r!("./rel/files", target_path)
release
end
@@ -209,6 +209,7 @@ defmodule Pleroma.Mixfile do
branch_name =
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
branch_name =
String.trim(branch_name)
diff --git a/rel/files/bin/pleroma_ctl b/rel/files/bin/pleroma_ctl
new file mode 100755
index 000000000..62368115e
--- /dev/null
+++ b/rel/files/bin/pleroma_ctl
@@ -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
diff --git a/rel/pleroma_ctl b/rel/pleroma_ctl
deleted file mode 100755
index ac7339762..000000000
--- a/rel/pleroma_ctl
+++ /dev/null
@@ -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