add proper release and migrations
All checks were successful
Build and Publish / build-release (push) Successful in 1m48s

This commit is contained in:
2026-04-16 12:21:04 -05:00
parent d42e212bd4
commit e64238df08
3 changed files with 86 additions and 24 deletions

View File

@@ -52,9 +52,6 @@ if cookie = System.get_env("RELEASE_COOKIE") do
config :elixir, :cookie, cookie config :elixir, :cookie, cookie
end end
config :policy_service, PolicyServiceWeb.Endpoint,
http: [port: String.to_integer(System.get_env("PORT", "4000"))]
if config_env() == :prod do if config_env() == :prod do
database_url = database_url =
System.get_env("DATABASE_URL") || System.get_env("DATABASE_URL") ||
@@ -67,13 +64,14 @@ if config_env() == :prod do
config :policy_service, PolicyService.Repo, config :policy_service, PolicyService.Repo,
url: database_url, url: database_url,
pool_size: 1, pool_size: String.to_integer(System.get_env("DATABASE_POOL_SIZE") || "1"),
socket_options: maybe_ipv6 socket_options: maybe_ipv6
config :policy_service, PolicyService.EventStore, config :policy_service, PolicyService.EventStore,
serializer: Commanded.Serialization.JsonSerializer, serializer: Commanded.Serialization.JsonSerializer,
url: database_url, url: database_url,
pool_size: 1 schema: "eventstore",
pool_size: String.to_integer(System.get_env("EVENTSTORE_POOL_SIZE") || "1")
secret_key_base = secret_key_base =
System.get_env("SECRET_KEY_BASE") || System.get_env("SECRET_KEY_BASE") ||
@@ -87,9 +85,10 @@ if config_env() == :prod do
config :policy_service, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY") config :policy_service, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY")
config :policy_service, PolicyServiceWeb.Endpoint, config :policy_service, PolicyServiceWeb.Endpoint,
url: [host: host, port: 80, scheme: "http"], url: [host: host, port: String.to_integer(System.get_env("PORT", "4000")), scheme: "http"],
http: [ http: [
ip: {0, 0, 0, 0, 0, 0, 0, 0} ip: {0, 0, 0, 0, 0, 0, 0, 0},
port: String.to_integer(System.get_env("PORT", "4000"))
], ],
secret_key_base: secret_key_base secret_key_base: secret_key_base
end end

View File

@@ -0,0 +1,37 @@
defmodule PolicyService.Release do
@moduledoc """
Used for executing DB release tasks when run in production without Mix
installed.
"""
@app :policy_service
def migrate do
load_app()
init_event_store()
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
Application.ensure_all_started(:ssl)
Application.ensure_all_started(:postgrex)
Application.ensure_loaded(@app)
end
def init_event_store do
config = PolicyService.EventStore.config()
:ok = EventStore.Tasks.Init.exec(config, [])
end
end

View File

@@ -3,22 +3,33 @@ controllers:
enabled: true enabled: true
type: deployment type: deployment
replicas: 1 replicas: 1
# initContainers: initContainers:
# migrate: migrate:
# image: image:
# repository: gitea.corredorconect.com/software-engineering/policy-service repository: gitea.corredorconect.com/software-engineering/policy-service
# tag: '{{ $.Chart.AppVersion }}' tag: '{{ $.Chart.AppVersion }}'
# command: command:
# - /bin/sh - "/bin/policy_service"
# - -c args:
# - "/opt/policy_service/bin/policy_service eval 'Mix.Tasks.Ecto.Create.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.Ecto.Migrate.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.EventStore.Create.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.EventStore.Init.run([])' --no-start" - "eval"
# env: - "PolicyService.Release.migrate"
# MIX_ENV: prod env:
# DATABASE_URL: MIX_ENV: prod
# valueFrom: SECRET_KEY_BASE:
# secretKeyRef: valueFrom:
# name: policy-service-pg-app secretKeyRef:
# key: uri name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-secrets'
key: secretKeyBase
RELEASE_COOKIE:
valueFrom:
secretKeyRef:
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-secrets'
key: cookie
DATABASE_URL:
valueFrom:
secretKeyRef:
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-pg-app'
key: uri
containers: containers:
main: main:
image: image:
@@ -57,7 +68,7 @@ controllers:
DATABASE_URL: DATABASE_URL:
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: policy-service-cluster-pg-app name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-pg-app'
key: uri key: uri
probes: probes:
liveness: liveness:
@@ -177,3 +188,18 @@ rawResources:
owner: policy_service owner: policy_service
storage: storage:
size: 5Gi size: 5Gi
database:
enabled: true
apiVersion: postgresql.cnpg.io/v1
kind: Database
suffix: database
spec:
spec:
name: policy_service
owner: policy_service
cluster:
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-cluster-pg'
schemas:
- name: eventstore
owner: policy_service