Skip to content
Open
Show file tree
Hide file tree
Changes from 67 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
f66f8e2
test: add antithesis test
gfyrag Nov 12, 2024
df41f3d
chore: some test
gfyrag Nov 13, 2024
eead415
feat: first workable setup
gfyrag Nov 13, 2024
3b91230
Merge branch 'main' of github.com:formancehq/ledger into feat/dst
altitude Feb 21, 2025
24c347a
wip: bring up to date and new driver
altitude Feb 21, 2025
0addc57
fix: test composer changes
altitude Mar 13, 2025
dc15569
Merge branch 'main' of github.com:formancehq/ledger into feat/dst
altitude Mar 13, 2025
d64d1ef
wip: improve assertions
altitude Mar 13, 2025
32759cc
fix: overly ambitious assertions
altitude Mar 13, 2025
a380c0b
wip: add debugger
altitude Mar 13, 2025
b22e498
Merge remote-tracking branch 'origin/main' into feat/dst
altitude Apr 23, 2025
0919823
feat: add antithesis ci
altitude Apr 23, 2025
8aa8fb7
fix: antithesis registry docker login
altitude Apr 23, 2025
6d3747a
fix: antithesis docker login
altitude Apr 23, 2025
256bfb9
fix: antithesis github workflow
altitude Apr 23, 2025
10acc49
fix: workload build
altitude Apr 23, 2025
a2351d6
feat: improve test composing sequence
altitude May 2, 2025
58524d7
feat: improve test composer sequence
altitude May 5, 2025
4ed1eb5
fix: volumes driver
altitude May 5, 2025
8aaa393
fix: don't overuse assertions
altitude May 5, 2025
3ec2e4c
fix: ledger id
altitude May 5, 2025
9f22e06
fix: bucket/ledger
altitude May 5, 2025
aa9fa2b
Merge remote-tracking branch 'origin/main' into feat/dst
altitude May 5, 2025
e8b6e82
fix: remove exhaustive assertion on tx
altitude May 5, 2025
9fc1cf7
fix: switch to sometimes assertions for tx commit
altitude May 5, 2025
e52be33
feat: switch ledger creation to sometimes assertions as well
altitude May 5, 2025
40c1a39
fix: move correctness check to eventually
altitude May 5, 2025
c8ab708
feat: improve error handling on eventually
altitude May 6, 2025
f8fa1ba
Merge remote-tracking branch 'origin/main' into feat/dst
altitude May 6, 2025
979b33a
fix: improve error handling
altitude May 6, 2025
49b0414
wip: improve
altitude May 7, 2025
9248bd8
feat: add Kubernetes pod configuration for workload
flemzord Jun 19, 2025
424b4c1
k8s test setup
Azorlogh Aug 13, 2025
d4f161b
Merge branch 'main' into feat/dst-k8s
Azorlogh Aug 13, 2025
c5dac59
test fixes & remove docker-compose antithesis setup
Azorlogh Aug 18, 2025
7664eb6
integrate the operator
Azorlogh Aug 27, 2025
0966637
partially fix ledger instrumentation
Azorlogh Sep 3, 2025
c152718
fixes, readiness probe, missing images
Azorlogh Sep 8, 2025
0f879a9
fix workload panic
Azorlogh Sep 9, 2025
c3cb880
remove main earthfile & fix workflow
Azorlogh Sep 9, 2025
9db3f81
fix secret name
Azorlogh Sep 9, 2025
fddeb96
use antithesis-trigger-action
Azorlogh Sep 9, 2025
fa66ba7
fix images list
Azorlogh Sep 9, 2025
62309de
keep just setup for now
Azorlogh Sep 9, 2025
1ee5795
version upgrades & specify tags in workflow
Azorlogh Sep 10, 2025
65042d5
test run
Azorlogh Sep 10, 2025
af6956b
fix workflow
Azorlogh Sep 10, 2025
59ddcbf
fix workflow
Azorlogh Sep 10, 2025
3242e71
fix missing images
Azorlogh Sep 10, 2025
3c8a68b
fix token
Azorlogh Sep 10, 2025
d2d57b7
fix version update command & workload permissions
Azorlogh Sep 10, 2025
0484df1
temporarily disable version update, more complex workload & checks
Azorlogh Sep 23, 2025
a5e3d61
fix instrumented ledger release workflow
Azorlogh Sep 23, 2025
6b8fd2e
rerun workflow & fix names
Azorlogh Sep 23, 2025
f51e01f
workflow fixes
Azorlogh Sep 23, 2025
47401f6
workload fixes
Azorlogh Sep 23, 2025
c40afec
more assertion details
Azorlogh Sep 24, 2025
a59cf2f
fix non-determinism & missing assertion
Azorlogh Sep 29, 2025
24a0a1a
cleanup
Azorlogh Oct 1, 2025
015ca6a
remove earthfiles
Azorlogh Oct 2, 2025
42073fa
install missing instrumentor
Azorlogh Oct 2, 2025
2e854a9
fix workflow
Azorlogh Oct 2, 2025
235e5a0
fix workflow
Azorlogh Oct 2, 2025
1e0ff72
fix workflow
Azorlogh Oct 2, 2025
14785db
fix workflow attempt
Azorlogh Oct 2, 2025
16c0cde
fix workload container
Azorlogh Oct 2, 2025
160b453
fix workload/ledger builders
Azorlogh Oct 3, 2025
e559f0c
dockerfile typo
Azorlogh Oct 3, 2025
e7f7110
fix eventually_correct panic
Azorlogh Oct 3, 2025
ea4e906
restore version upgrade test
Azorlogh Oct 17, 2025
24ffd8b
Merge branch 'main' into feat/dst
Azorlogh Oct 21, 2025
12c399d
justfile typo
Azorlogh Oct 21, 2025
3dc65d4
remove bucket version assertion for now
Azorlogh Oct 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/antithesis_daily.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Antithesis Daily Run
on:
workflow_dispatch:
inputs:
run_tests:
description: "Run Antithesis tests after pushing images"
type: boolean
default: true
pull_request:
types: [opened, synchronize, reopened]
paths:
- "test/antithesis/**"
- ".github/workflows/antithesis_daily.yml"
schedule:
- cron: "0 10 * * *"

jobs:
trigger-daily-run:
name: Trigger daily run
runs-on: shipfox-4vcpu-ubuntu-2404
env:
ANTITHESIS_PASSWORD: ${{ secrets.ANTITHESIS_PASSWORD }}
ANTITHESIS_SLACK_REPORT_RECIPIENT: ${{ secrets.ANTITHESIS_SLACK_REPORT_RECIPIENT }}
ANTITHESIS_REPOSITORY: ${{ secrets.ANTITHESIS_REPOSITORY }}
OPERATOR_TAG: "v2.10.1"
OPERATOR_UTILS_TAG: "v2.0.14"
GATEWAY_TAG: "v2.0.24"
# LEDGER_PREVIOUS_TAG: "v2.2.47"
# temporary: remove this when support for multiple image versions is added
LEDGER_PREVIOUS_TAG: "v2.3.0"
LEDGER_LATEST_TAG: "v2.3.0"
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Just
uses: extractions/setup-just@v3
with:
just-version: "1.40.0"

- name: Setup Environment
uses: ./.github/actions/default
with:
token: ${{ secrets.NUMARY_GITHUB_TOKEN }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: "NumaryBot"
password: ${{ secrets.NUMARY_GITHUB_TOKEN }}

- name: Login to Antithesis Docker Registry
run: |
echo '${{ secrets.ANTITHESIS_JSON_KEY }}' | docker login -u _json_key https://us-central1-docker.pkg.dev --password-stdin

- name: Build and Push Config Image
run: |
nix develop --impure --command just --justfile ./test/antithesis/Justfile requirements-push

- name: Run Antithesis Tests
uses: antithesishq/[email protected]
with:
notebook_name: formance-k8s
tenant: formance
username: ${{ secrets.ANTITHESIS_USERNAME }}
password: ${{ secrets.ANTITHESIS_PASSWORD }}
github_token: ${{ secrets.NUMARY_GITHUB_TOKEN }}
# images: "workload:latest;docker.io/library/postgres:15-alpine;ghcr.io/formancehq/operator:${{ env.OPERATOR_TAG }};ghcr.io/formancehq/operator-utils:${{ env.OPERATOR_UTILS_TAG }};ghcr.io/formancehq/gateway:${{ env.GATEWAY_TAG }};ghcr.io/formancehq/ledger-instrumented:${{ env.LEDGER_PREVIOUS_TAG }};ghcr.io/formancehq/ledger-instrumented:${{ env.LEDGER_LATEST_TAG }}"
# temporary: remove this when support for multiple image versions is added
images: "workload:latest;docker.io/library/postgres:15-alpine;ghcr.io/formancehq/operator:${{ env.OPERATOR_TAG }};ghcr.io/formancehq/operator-utils:${{ env.OPERATOR_UTILS_TAG }};ghcr.io/formancehq/gateway:${{ env.GATEWAY_TAG }};ghcr.io/formancehq/ledger-instrumented:${{ env.LEDGER_LATEST_TAG }}"
config_image: "antithesis-config:daily_run"
email_recipients: ${{ secrets.ANTITHESIS_SLACK_REPORT_RECIPIENT }}
48 changes: 48 additions & 0 deletions .github/workflows/antithesis_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Antithesis Instrumented Release
on:
push:
tags:
- "*"

jobs:
push-instrumented-ledger:
name: Push instrumented ledger
runs-on: shipfox-4vcpu-ubuntu-2404
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Just
uses: extractions/setup-just@v3
with:
just-version: "1.40.0"

- name: Setup Environment
uses: ./.github/actions/default
with:
token: ${{ secrets.NUMARY_GITHUB_TOKEN }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: "NumaryBot"
password: ${{ secrets.NUMARY_GITHUB_TOKEN }}

- name: Login to Antithesis Docker Registry
run: |
echo '${{ secrets.ANTITHESIS_JSON_KEY }}' | docker login -u _json_key https://us-central1-docker.pkg.dev --password-stdin

- name: Build and Push Config Image
env:
LEDGER_TAG: ${{ env.GITHUB_REF_NAME }}
run: |
nix develop --impure --command just --justfile ./test/antithesis/image/Justfile push
2 changes: 1 addition & 1 deletion Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ deploy:
RUN kubectl patch Versions.formance.com default -p "{\"spec\":{\"ledger\": \"${tag}\"}}" --type=merge

deploy-staging:
BUILD --pass-args core+deploy-staging
BUILD --pass-args core+deploy-staging
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ replace google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215 => google.
require (
github.com/ThreeDotsLabs/watermill v1.4.7
github.com/alitto/pond v1.9.2
github.com/antithesishq/antithesis-sdk-go v0.5.0
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10
github.com/bluele/gcache v0.0.2
github.com/dop251/goja v0.0.0-20250630131328-58d95d85e994
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7X
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
github.com/antithesishq/antithesis-sdk-go v0.4.3-default-no-op h1:+OSa/t11TFhqfrX0EOSqQBDJ0YlpmK0rDSiB19dg9M0=
github.com/antithesishq/antithesis-sdk-go v0.4.3-default-no-op/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E=
github.com/antithesishq/antithesis-sdk-go v0.4.3 h1:a2hGdDogClzHzFu20r1z0tzD6zwSWUipiaerAjZVP90=
github.com/antithesishq/antithesis-sdk-go v0.4.3/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E=
github.com/antithesishq/antithesis-sdk-go v0.5.0 h1:cudCFF83pDDANcXFzkQPUHHedfnnIbUO3JMr9fqwFJs=
github.com/antithesishq/antithesis-sdk-go v0.5.0/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E=
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves=
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
Expand Down
35 changes: 32 additions & 3 deletions internal/storage/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import (
"context"
"errors"
"fmt"
"sync"
"time"

"github.com/antithesishq/antithesis-sdk-go/assert"
"github.com/formancehq/ledger/internal/storage/common"
systemstore "github.com/formancehq/ledger/internal/storage/system"
"github.com/formancehq/ledger/internal/tracing"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/noop"
"sync"
"time"

"github.com/alitto/pond"
"github.com/formancehq/go-libs/v3/bun/bunpaginate"
Expand All @@ -36,9 +38,23 @@ type Driver struct {
parallelBucketMigrations int
}

func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgerstore.Store, error) {
/*
CreateLedger creates a new ledger in the system and sets up all necessary database objects.

The function follows these steps:
1. Create a ledger record in the system store (_system.ledgers table)
2. Get the bucket (database schema) for this ledger
3. Check if the bucket is already initialized:
a. If initialized: Verify it's up to date and add ledger-specific objects to it
b. If not initialized: Create the bucket schema with all necessary tables
4. Return a ledger store that provides an interface to interact with the ledger

Note: This entire process is wrapped in a database transaction, ensuring atomicity.
If any step fails, the entire transaction is rolled back, preventing partial state.
*/
func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgerstore.Store, error) {
var ret *ledgerstore.Store

err := d.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
systemStore := d.systemStoreFactory.Create(tx)

Expand All @@ -54,13 +70,25 @@ func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgersto
if err != nil {
return fmt.Errorf("checking if bucket is initialized: %w", err)
}

if isInitialized {
upToDate, err := b.IsUpToDate(ctx, tx)
if err != nil {
return fmt.Errorf("checking if bucket is up to date: %w", err)
}

if !upToDate {
assert.AlwaysOrUnreachable(
// @todo: replace this with a proper flag detailing wether we're
// operating a new version of the binary or not.
// if we are, we are definitely expecting this to happen.
// if we're not, this should be unreachable.
false,
"Bucket is outdated",
map[string]any{
"bucket": l.Bucket,
},
)
return ErrBucketOutdated
}

Expand All @@ -77,6 +105,7 @@ func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgersto

return nil
})

if err != nil {
return nil, postgres.ResolveError(err)
}
Expand Down
27 changes: 27 additions & 0 deletions test/antithesis/Justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
run-6min: requirements-push
curl --fail \
--user "formance:$ANTITHESIS_PASSWORD" \
-X POST https://formance.antithesis.com/api/v1/launch_experiment/formance-k8s -d '{ \
"params": { \
"custom.duration": "0.1", \
"antithesis.report.recipients": "'"$ANTITHESIS_SLACK_REPORT_RECIPIENT"'", \
"antithesis.config_image": "antithesis-config:daily_run", \
"antithesis.images": "workload:latest;docker.io/library/postgres:15-alpine;ghcr.io/formancehq/operator:v2.10.1;ghcr.io/formancehq/operator-utils:v2.0.14;ghcr.io/formancehq/gateway:v2.0.24;ghcr.io/formancehq/ledger-instrumented:'"$LEDGER_LATEST_TAG"'" \
} \
}'

run-1h: requirements-push
curl --fail \
--user "formance:$ANTITHESIS_PASSWORD" \
-X POST https://formance.antithesis.com/api/v1/launch_experiment/formance-k8s -d '{ \
"params": { \
"custom.duration": "1", \
"antithesis.report.recipients": "'"$ANTITHESIS_SLACK_REPORT_RECIPIENT"'", \
"antithesis.config_image": "antithesis-config:daily_run", \
"antithesis.images": "workload:latest;docker.io/library/postgres:15-alpine;ghcr.io/formancehq/operator:v2.10.1;ghcr.io/formancehq/operator-utils:v2.0.14;ghcr.io/formancehq/gateway:v2.0.24;ghcr.io/formancehq/ledger-instrumented:"'"$LEDGER_LATEST_TAG"'" \
} \
}'

requirements-push:
just config/push
just workload/push
1 change: 1 addition & 0 deletions test/antithesis/config/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tmp
2 changes: 2 additions & 0 deletions test/antithesis/config/Dockerfile.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
FROM scratch
COPY tmp/* /manifests/
18 changes: 18 additions & 0 deletions test/antithesis/config/Justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
build-manifest:
rm -f -- tmp/resources.yaml
mkdir -p tmp
cat manifests/namespace.yaml >> tmp/resources.yaml
echo "---" >> tmp/resources.yaml
cat manifests/postgres.yaml >> tmp/resources.yaml
echo "---" >> tmp/resources.yaml
helm template regions oci://ghcr.io/formancehq/helm/regions --version 2.15.2 --namespace formance-systems >> tmp/resources.yaml
echo "---" >> tmp/resources.yaml
cat manifests/stack.yaml >> tmp/resources.yaml
echo "---" >> tmp/resources.yaml
yq '.spec.version = strenv(LEDGER_PREVIOUS_TAG)' manifests/ledger.yaml >> tmp/resources.yaml
echo "---" >> tmp/resources.yaml
cat manifests/workload.yaml >> tmp/resources.yaml

push: build-manifest
docker build -f Dockerfile.config -t $ANTITHESIS_REPOSITORY/antithesis-config:daily_run .
docker push $ANTITHESIS_REPOSITORY/antithesis-config:daily_run
Comment on lines +16 to +18
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Validate ANTITHESIS_REPOSITORY before use.

The push recipe uses $ANTITHESIS_REPOSITORY without verifying it is set. If unset, the Docker commands will fail with unclear error messages.

Apply this diff to add validation:

 push: build-manifest
+	: "$${ANTITHESIS_REPOSITORY:?ANTITHESIS_REPOSITORY is required}"
 	docker build -f Dockerfile.config -t $ANTITHESIS_REPOSITORY/antithesis-config:daily_run .
 	docker push $ANTITHESIS_REPOSITORY/antithesis-config:daily_run
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
push: build-manifest
docker build -f Dockerfile.config -t $ANTITHESIS_REPOSITORY/antithesis-config:daily_run .
docker push $ANTITHESIS_REPOSITORY/antithesis-config:daily_run
push: build-manifest
: "$${ANTITHESIS_REPOSITORY:?ANTITHESIS_REPOSITORY is required}"
docker build -f Dockerfile.config -t $ANTITHESIS_REPOSITORY/antithesis-config:daily_run .
docker push $ANTITHESIS_REPOSITORY/antithesis-config:daily_run
🤖 Prompt for AI Agents
In test/antithesis/config/Justfile around lines 16 to 18, the push recipe uses
$ANTITHESIS_REPOSITORY without validating it; add a guard at the start of the
push recipe that checks the variable is set and non-empty and fails with a clear
error if not. Specifically, prepend a test like: if [ -z
"$ANTITHESIS_REPOSITORY" ]; then echo "ANTITHESIS_REPOSITORY must be set"; exit
1; fi — then proceed with the docker build and push commands so the recipe fails
fast with a helpful message instead of producing unclear Docker errors.

7 changes: 7 additions & 0 deletions test/antithesis/config/manifests/ledger.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: formance.com/v1beta1
kind: Ledger
metadata:
name: stack0-ledger
spec:
stack: stack0
version: LEDGER_VERSION_PLACEHOLDER
4 changes: 4 additions & 0 deletions test/antithesis/config/manifests/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: formance-systems
42 changes: 42 additions & 0 deletions test/antithesis/config/manifests/postgres.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: formance-systems
spec:
selector:
app: postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
---
apiVersion: v1
kind: Pod
metadata:
name: postgres
namespace: formance-systems
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:15-alpine
imagePullPolicy: IfNotPresent
args: ["-c", "max_connections=100"]
env:
- name: "POSTGRES_USER"
value: "ledger"
- name: "POSTGRES_PASSWORD"
value: "ledger"
- name: "POSTGRES_DB"
value: "ledger"
- name: "PGDATA"
value: /data/postgres
livenessProbe:
exec:
command: ["pg_isready", "-Uledger"]
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
33 changes: 33 additions & 0 deletions test/antithesis/config/manifests/stack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: formance.com/v1beta1
kind: Settings
metadata:
name: formance-settings
spec:
key: postgres.*.uri
stacks:
- "stack0"
value: postgresql://ledger:[email protected]:5432?disableSSLMode=true
---
apiVersion: formance.com/v1beta1
kind: Settings
metadata:
name: formance-setting-ledger-image
spec:
key: registries."ghcr.io".images."formancehq/ledger".rewrite
stacks:
- "stack0"
value: "formancehq/ledger-instrumented"
---
apiVersion: formance.com/v1beta1
kind: Stack
metadata:
name: stack0
spec:
versionsFromFile: v2.0
---
apiVersion: formance.com/v1beta1
kind: Gateway
metadata:
name: stack0-gateway
spec:
stack: stack0
Loading
Loading