| .forgejo/workflows | ||
| deploy | ||
| docs | ||
| scripts/deploy | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| compose.yml | ||
| Dockerfile | ||
| index.mjs | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
unrip project
This repository contains the unrip trading-system code and its project-specific deployment assets.
Contents
src/— application codepackage.json/package-lock.json— Node package manifestDockerfile/.dockerignore— app container build.env.example— local app runtime examplecompose.yml— local development stackdeploy/k8s/base/— project-specific Kubernetes manifestsdeploy/redpanda/rpk-topics.txt— project topic referencedocs/— project-specific design and contract docs
Local development
npm install
cp .env.example .env
# edit .env
docker compose up -d --build
Useful commands:
docker compose ps
docker compose logs -f
docker compose logs -f near-intents-ingest dummy-reactor dummy-executor dummy-consumer
npm run near-intents:ingest
npm run dummy-reactor
npm run dummy-executor
npm run dummy-consumer
App image
The app image is now built from this directory.
Examples:
docker build -t unrip:dev .
Kubernetes manifests
Project manifests live under:
deploy/k8s/base/
The shared cluster/platform resources live in the separate infra repository.
Deployment
This repo is the app-side deployment repo. The shared Hetzner/k3s bootstrap, Forgejo runner, registry, and other platform services live in the separate platform repo.
See docs/deployment.md for the full operator path.
One-time app bootstrap
Bootstrap the app namespace, secrets, and Forgejo repo settings from this repo:
bash scripts/deploy/bootstrap.sh
By default, the script uses the adjacent platform checkout at ../unrip3 for:
kubeconfig.yamlkubeconfig.incluster.yaml- registry credentials
- the
NEAR_INTENTS_API_KEYfallback from../unrip3/.env
If you are not using that local split, provide the values yourself via env vars
such as KUBECONFIG_PATH, CI_KUBECONFIG_PATH, REGISTRY_HOST,
REGISTRY_USERNAME, REGISTRY_PASSWORD, NEAR_INTENTS_API_KEY, and either
FORGEJO_TOKEN or FORGEJO_ADMIN_USERNAME / FORGEJO_ADMIN_PASSWORD.
Routine deploy
After bootstrap, deployment is just a push to Forgejo main:
git push forgejo main
.forgejo/workflows/deploy.yml then:
- applies
deploy/k8s/base - builds the image from this repo root inside the cluster with Kaniko
- pushes it to the shared registry
- rolls the
unripdeployments
Observe rollout
KUBECONFIG=../unrip3/.state/hetzner/kubeconfig.yaml kubectl -n unrip get deploy,pods,job
KUBECONFIG=../unrip3/.state/hetzner/kubeconfig.yaml kubectl -n unrip rollout status deploy/near-intents-ingest
KUBECONFIG=../unrip3/.state/hetzner/kubeconfig.yaml kubectl -n unrip rollout status deploy/dummy-reactor
KUBECONFIG=../unrip3/.state/hetzner/kubeconfig.yaml kubectl -n unrip rollout status deploy/dummy-executor
KUBECONFIG=../unrip3/.state/hetzner/kubeconfig.yaml kubectl -n unrip rollout status deploy/dummy-consumer