diff --git a/Dockerfile b/Dockerfile index 10e3fab..22c02ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,8 +24,8 @@ COPY ./src/frontend/packages/eslint-config-people/package.json ./packages/eslint RUN yarn --frozen-lockfile -### ---- Front-end builder image ---- -FROM node:20 as frontend-builder +### ---- Front-end builder dev image ---- +FROM node:20 as frontend-builder-dev WORKDIR /builder @@ -34,8 +34,10 @@ COPY ./src/frontend . WORKDIR ./apps/desk -RUN yarn build +### ---- Front-end builder image ---- +FROM frontend-builder-dev as frontend-builder +RUN yarn build # ---- Front-end image ---- FROM nginxinc/nginx-unprivileged:1.25 as frontend-production diff --git a/Makefile b/Makefile index 0903578..3ce4ea2 100644 --- a/Makefile +++ b/Makefile @@ -323,3 +323,12 @@ frontend-i18n-generate: \ frontend-i18n-compile: ## Format the crowin json files used deploy to the apps cd $(PATH_FRONT) && yarn i18n:deploy .PHONY: frontend-i18n-compile + +# -- K8S +start-kind: ## Create the kubernetes cluster + ./bin/start-kind.sh +.PHONY: start-kind + +tilt-up: ## start tilt - k8s local development + tilt up -f ./bin/Tiltfile +.PHONY: tilt-up diff --git a/bin/Tiltfile b/bin/Tiltfile new file mode 100644 index 0000000..a3beba2 --- /dev/null +++ b/bin/Tiltfile @@ -0,0 +1,71 @@ +load('ext://uibutton', 'cmd_button', 'bool_input', 'location') +load('ext://namespace', 'namespace_create', 'namespace_inject') +namespace_create('desk') + +docker_build( + 'localhost:5001/people-backend:latest', + context='..', + dockerfile='../Dockerfile', + only=['./src/backend', './src/mail', './docker'], + target = 'backend-production', + live_update=[ + sync('../src/backend', '/app'), + run( + 'pip install -r /app/requirements.txt', + trigger=['./api/requirements.txt'] + ) + ] +) + +docker_build( + 'localhost:5001/people-frontend:latest', + context='..', + dockerfile='../Dockerfile', + build_args={'ENV': 'dev'}, + only=['./src/frontend', './src/mail', './docker'], + target = 'frontend-builder-dev', + live_update=[ + sync('../src/frontend', '/builder'), + ] +) + +k8s_yaml(local('cd ../src/helm && helmfile -n desk -e dev template .')) + +migration = ''' +set -eu +# get k8s pod name from tilt resource name +POD_NAME="$(tilt get kubernetesdiscovery desk-backend -ojsonpath='{.status.pods[0].name}')" +kubectl -n desk exec "$POD_NAME" -- python manage.py makemigrations +''' +cmd_button('Make migration', + argv=['sh', '-c', migration], + resource='desk-backend', + icon_name='developer_board', + text='Run makemigration', +) + +pod_migrate = ''' +set -eu +# get k8s pod name from tilt resource name +POD_NAME="$(tilt get kubernetesdiscovery desk-backend -ojsonpath='{.status.pods[0].name}')" +kubectl -n desk exec "$POD_NAME" -- python manage.py migrate --no-input +''' +cmd_button('Migrate db', + argv=['sh', '-c', pod_migrate], + resource='desk-backend', + icon_name='developer_board', + text='Run database migration', +) + +pod_add_admin = ''' +set -eu +# get k8s pod name from tilt resource name +POD_NAME="$(tilt get kubernetesdiscovery desk-backend -ojsonpath='{.status.pods[0].name}')" +kubectl -n desk exec "$POD_NAME" -- python manage.py createsuperuser --password admin --admin_email admin@example.com +''' +cmd_button('Add admin', + argv=['sh', '-c', pod_add_admin], + resource='desk-backend', + icon_name='developer_board', + text='Create superadmin', +) diff --git a/bin/start-kind.sh b/bin/start-kind.sh new file mode 100644 index 0000000..9ff239c --- /dev/null +++ b/bin/start-kind.sh @@ -0,0 +1,102 @@ +#!/bin/sh +set -o errexit + +CURRENT_DIR=$(pwd) + +# 0. Create ca +echo "0. Create ca" +mkcert -install +cd /tmp +mkcert "127.0.0.1.nip.io" "*.127.0.0.1.nip.io" +cd $CURRENT_DIR + +# 1. Create registry container unless it already exists +echo "1. Create registry container unless it already exists" +reg_name='kind-registry' +reg_port='5001' +if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then + docker run \ + -d --restart=always -p "127.0.0.1:${reg_port}:5000" --network bridge --name "${reg_name}" \ + registry:2 +fi + +# 2. Create kind cluster with containerd registry config dir enabled +echo "2. Create kind cluster with containerd registry config dir enabled" +# TODO: kind will eventually enable this by default and this patch will +# be unnecessary. +# +# See: +# https://github.com/kubernetes-sigs/kind/issues/2875 +# https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration +# See: https://github.com/containerd/containerd/blob/main/docs/hosts.md +cat <