Skip to content

🤖 Developer Setup

Before you begin, ensure you have the following tools installed:

Download the appropriate slangroom-exec binary for your OS from the releases page.

Add slangroom-exec to PATH and make it executable:

Terminal window
wget https://github.com/dyne/slangroom-exec/releases/latest/download/slangroom-exec-Linux-x86_64 -O slangroom-exec
chmod +x slangroom-exec
sudo cp slangroom-exec /usr/local/bin/

For most Linux distrubution, just do:

Terminal window
sudo apt install pre-commit
Terminal window
git clone https://github.com/ForkbombEu/credimi
Terminal window
cd credimi
mise trust
make credimi

Copy .env.example to .env

Terminal window
cp ./webapp/.env.example ./webapp/.env

Then edit the .env file, particularly:

  1. set the absolute path in ROOT_DIR
  2. Get a token from https://www.certification.openid.net and add it in TOKEN

Copy ./webapp/env.example to

Terminal window
make dev

[!TIP] Use make help to see all the commands available.

Pipeline listings rely on a Temporal visibility search attribute named PipelineIdentifier (type Keyword). Register it once per Temporal cluster:

Terminal window
temporal operator search-attributes create --name PipelineIdentifier --type Keyword

If the attribute is added after workflows already exist, trigger a Temporal visibility reindex to backfill historical data (see Temporal admin tooling docs for your deployment).

  • Default acquire wait timeout: 45m.
  • Override timeout: MOBILE_RUNNER_SEMAPHORE_WAIT_TIMEOUT=30m (or any valid time.ParseDuration value).
  • Disable semaphore (no-op acquire/release): MOBILE_RUNNER_SEMAPHORE_DISABLED=1.
  • Internal Temporal API auth key: CREDIMI_INTERNAL_ADMIN_KEY=<plaintext key> (required for internal workflow HTTP calls).
  1. Run DB migrations so api_keys supports key_type, superuser, revoked, expires_at.
  2. Provision an internal admin key (hash stored in DB, plaintext returned once).
  3. Set CREDIMI_INTERNAL_ADMIN_KEY in backend and worker runtime secrets.
  4. Deploy backend/workers with middleware + internal HTTP activity enabled.
  5. Smoke-check one authenticated user route and one internal Temporal route.
  • Semaphore workflows live in the Temporal default namespace with IDs: mobile-runner-semaphore/<runner_id>.
  • Query current state via Temporal UI (GetState) or GET /api/mobile-runner/semaphore?runner_identifier=....
  • To unstick a runner, terminate the semaphore workflow in Temporal; it will be recreated on the next acquire.