This is a Next.js project bootstrapped with create-next-app
.
First, install node + npm via nvm.
Install the vercel cli
Get the staging env by linking the vercel project and pulling the env
vercel link
vercel env pull
The .env.local
file should be populated with values targeting the staging environment.
Now run the development server:
nvm use
npm i
npm run dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx
. The page auto-updates as you edit the file.
First, install golang and node + npm via nvm.
Install gno tools if you don't have them:
make clone-gno
make install-gno
Install atlas using a special branch with support for versioned migrations for libsql:
make install-atlas
Override local env with dev env
cp .env.backend-dev .env.local
If you need to test file uploads, add back the PINATA_JWT
in .env.local
Be careful not to commit the PINATA_JWT or clerk secret!
Now, start gnodev with the admin account:
make start.gnodev
In another terminal, initialize the db, inject the clerk secret and start the backend:
make migrate-local
export ZENAO_CLERK_SECRET_KEY=<clerk-testing-secret-key>
go run ./backend start
You can get the clerk testing secret with vercel env pull
Optionally, generate fake data:
go run ./backend fakegen
In a third terminal, run the development server:
nvm use
npm i
npm run dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx
. The page auto-updates as you edit the file.
This project uses next/font
to automatically optimize and load Geist, a new font family for Vercel.
First, install golang and node + npm via nvm.
Install gno tools if you don't have them:
make clone-gno
make install-gno
Install atlas using a special branch with support for versioned migrations for libsql:
make install-atlas
Override local env with dev env
cp .env.backend-dev .env.local
Add back the PINATA_JWT
in .env.local
Be careful not to commit the PINATA_JWT or clerk secret!
Now, run the e2e stack
export ZENAO_CLERK_SECRET_KEY=<clerk-testing-secret-key>
go run ./backend e2e-infra
You can get the clerk testing secret with vercel env pull
This prepares the local db, starts gnodev as well as the backend, run fakegen and print logs in a single terminal.
It also serves a http://localhost:4243/reset
http endpoint to reset the stack state. This endpoint is crucial to automate tests. Calls to the reset endpoint will be deduplicated and wait for the current reset to finish if one is ongoing.
In a second terminal, run the development server:
nvm use
npm i
npm run dev
Wait for the stack to warm up, you should get the following line in the e2e-infra terminal when it is:
READY | ----------------------------
In a third terminal, open cypress in e2e mode
npm run cypress:e2e
Select a test like main.cy.ts
, this will automatically start runnning the test and when done watch for changes in the test file located at cypress/e2e/main.cy.ts
.
You can now edit the tests and they will automatically re-run on save. If you only edited app sources, you can run the tests manually by clicking on the refresh icon in cypress ui.
Flaky tests, or tests that require cypress hacks to pass are probably a sign of bad architecture / unstable app code, try to think about what could introduce instability and fix it at the root ;)
First, install buf.
Edit the .proto
files, when you are done, run the codegen with
make generate
Install atlas using a special branch with support for versioned migrations for libsql:
make install-atlas
First, edit the gorm models in ./backend/gzdb
.
New models must embbed gorm.Model
or use a gorm annotation for at least one field.
Then, update the atlas schema using the gorm adapter:
make update-schema
You can now create a new migration, replace $MIGRATION_NAME
with the name of the migration:
atlas migrate diff $MIGRATION_NAME \
--dir "file://migrations" \
--to "file://schema.hcl" \
--dev-url "sqlite://file?mode=memory"
Finally you can migrate a db, replace $ENV
by one of dev
, staging
, prod
:
atlas migrate apply --dir "file://migrations" --env $ENV
For staging
and prod
envs, you need to pass a write-enabled turso token via the TURSO_TOKEN
env var
If you create a new prod token, make sure it is short-lived (1 day should be enough in most cases).