diff --git a/flake.nix b/flake.nix index cad28ac..81ea2f0 100644 --- a/flake.nix +++ b/flake.nix @@ -35,7 +35,7 @@ name = "customer_service"; contents = [ package pkgs.bashInteractive pkgs.busybox pkgs.shadow ]; config = { - Cmd = [ "${package}/bin/customer_service" "start" ]; + Cmd = [ "${package}/bin/customer_service" ]; }; }; in diff --git a/lib/customer_service/release.ex b/lib/customer_service/release.ex new file mode 100644 index 0000000..2089e6d --- /dev/null +++ b/lib/customer_service/release.ex @@ -0,0 +1,30 @@ +defmodule CustomerService.Release do + @moduledoc """ + Used for executing DB release tasks when run in production without Mix + installed. + """ + @app :customer_service + + def migrate do + load_app() + + for repo <- repos() do + {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true)) + end + end + + def rollback(repo, version) do + load_app() + {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version)) + end + + defp repos do + Application.fetch_env!(@app, :ecto_repos) + end + + defp load_app do + # Many platforms require SSL when connecting to the database + Application.ensure_all_started(:ssl) + Application.ensure_loaded(@app) + end +end diff --git a/ops/chart/values.yaml b/ops/chart/values.yaml index 18d8f52..fbce204 100644 --- a/ops/chart/values.yaml +++ b/ops/chart/values.yaml @@ -3,11 +3,29 @@ controllers: enabled: true type: deployment replicas: 1 + + initContainers: + migrate: + image: + repository: gitea.corredorconect.com/software-engineering/customer-service + tag: '{{ $.Chart.AppVersion }}' + args: + - "eval" + - "CustomService.Release.migrate" + env: + MIX_ENV: prod + DATABASE_URL: + valueFrom: + secretKeyRef: + name: policy-service-pg-app + key: uri containers: main: image: repository: gitea.corredorconect.com/software-engineering/customer-service tag: '{{ $.Chart.AppVersion }}' + args: + - "start" env: LOG_LEVEL: info MIX_ENV: prod diff --git a/rel/overlays/bin/migrate b/rel/overlays/bin/migrate new file mode 100755 index 0000000..1984cc9 --- /dev/null +++ b/rel/overlays/bin/migrate @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +cd -P -- "$(dirname -- "$0")" +exec ./customer_service eval CustomerService.Release.migrate diff --git a/rel/overlays/bin/migrate.bat b/rel/overlays/bin/migrate.bat new file mode 100755 index 0000000..dfdae86 --- /dev/null +++ b/rel/overlays/bin/migrate.bat @@ -0,0 +1 @@ +call "%~dp0\customer_service" eval CustomerService.Release.migrate diff --git a/rel/overlays/bin/server b/rel/overlays/bin/server new file mode 100755 index 0000000..16f1e66 --- /dev/null +++ b/rel/overlays/bin/server @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +cd -P -- "$(dirname -- "$0")" +PHX_SERVER=true exec ./customer_service start diff --git a/rel/overlays/bin/server.bat b/rel/overlays/bin/server.bat new file mode 100755 index 0000000..7a3b730 --- /dev/null +++ b/rel/overlays/bin/server.bat @@ -0,0 +1,2 @@ +set PHX_SERVER=true +call "%~dp0\customer_service" start