Main

A runnable Geblang example.

Path
gebweb/examples/services_yaml/main.gb
Category
Services Yaml

services.yaml end-to-end demo. Wires:

  • parameters with %env(...)% / %secret(...)% / %ref% markers

  • YAML services entries with arg overrides and tags

  • an interface binding (FeedClient -> HttpFeedClient or

StubFeedClient depending on GEBWEB_ENV)

  • a secrets provider so %secret(...)% markers resolve

Run with the encrypted vault:

cd examples/services_yaml

../../../gebweb secrets init

../../../gebweb secrets set feed.api_key sk_live_demo

GEBWEB_SECRETS_KEY=$(cat config/secrets.key) geblang main.gb

Or skip secrets by switching to the dev overlay (StubFeedClient):

GEBWEB_ENV=dev geblang main.gb

Source

import gebweb;
import io;
import controllers;

let app = gebweb.app([controllers.FeedController]);

/* The dev overlay binds FeedClient -> StubFeedClient which has no
 * args, so no secret is required. The prod path binds the real
 * HttpFeedClient and reads feed.api_key from the encrypted vault. */
if (gebweb.currentEnv() != "dev") {
    gebweb.useSecrets(app, gebweb.encryptedFileSecrets());
}

io.println("env: " + gebweb.currentEnv());
io.println("ids: " + ("" + gebweb.serviceIds(app).length()));
io.println("binding: " + (gebweb.interfaceBindings(app)["FeedClient"] as string));

gebweb.serve(app, "127.0.0.1:8080");