Packages

An Elixir framework to build your own in-house PaaS (Platform as a Service).

Current section

Files

Jump to
antikythera core version core.ex
Raw

core/version/core.ex

# Copyright(c) 2015-2019 ACCESS CO., LTD. All rights reserved.
use Croma
defmodule AntikytheraCore.Version.Core do
alias Antikythera.{Time, Env, VersionStr, ContextId}
alias AntikytheraCore.{Version, GearManager, GearModule, GearLog}
alias AntikytheraCore.Version.{Artifact, History}
require AntikytheraCore.Logger, as: L
defunp current_antikythera_instance_version!() :: VersionStr.t do
Version.current_version(Env.antikythera_instance_name()) || raise "antikythera instance version is not found!"
end
defun upgrade_to_next_version() :: :ok do
current_version = current_antikythera_instance_version!()
case History.next_upgradable_version(Env.antikythera_instance_name(), current_version) do
nil -> L.info("skip upgrade of antikythera instance: already the latest (#{current_version})")
next_version -> upgrade(next_version)
end
end
defunp upgrade(version :: v[VersionStr.t]) :: :ok do
L.info("start to upgrade core to #{version}")
Artifact.copy_core_release_tgz(version)
with {:ok, version_charlist} <- :release_handler.unpack_release('#{version}/#{Env.antikythera_instance_name()}'),
{:ok, _, _} <- :release_handler.check_install_release(version_charlist, [:purge]),
{:ok, _, _} <- :release_handler.install_release(version_charlist) do
emit_success_message_to_all_log_files(version)
else
{:error, reason} -> L.error("failed to upgrade antikythera instance: #{inspect(reason)}")
end
end
defunp emit_success_message_to_all_log_files(version :: v[VersionStr.t]) :: :ok do
message = "successfully upgraded core to #{version}"
L.info(message)
GearManager.running_gear_names() |> Enum.each(fn gear_name ->
GearLog.Writer.info(GearModule.logger(gear_name), Time.now(), ContextId.system_context(), message)
end)
end
end