This Val Town project exposes an HTTP webhook that acts as a lightweight GitHub App backend. It listens for repository creation events, verifies the webhook signature, infers the project type (Android vs. Node.js), synchronizes the required GitHub Actions secrets, and finally dispatches a bootstrap workflow in the new repository.
POST requests signed with x-hub-signature-256 using GITHUB_APP_WEBHOOK_SECRET..github/workflows/bootstrap-action.yml to register, enables it if necessary, and triggers a workflow dispatch on the default branch.Set these secrets in the Val configuration before deploying:
| Variable | Description |
|---|---|
GITHUB_APP_WEBHOOK_SECRET | Shared secret used to validate incoming GitHub webhooks. |
GITHUB_APP_ID | Numeric GitHub App identifier. |
GITHUB_APP_PRIVATE_KEY | PEM string for the GitHub App private key (PKCS#1 or PKCS#8; literal newlines or \n escapes both work). |
ANDROID_ACTION_SECRETS_JSON | JSON object mapping secret names (prefixed with ANDROID_) to plaintext values for Android projects. |
NODE_ACTION_SECRETS_JSON | JSON object mapping secret names (prefixed with NPM_) to plaintext values for Node.js projects. |
Example secret JSON:
{ "ANDROID_KEYSTORE": "base64-keystore", "ANDROID_KEYSTORE_PASSWORD": "super-secret" }
https://github.com/cmwen/min-android-app-template) map directly to android.build.gradle, gradlew, AndroidManifest.xml, etc.package.json, pnpm-lock.yaml, vite.config.ts, etc.unknown and no secrets are synced.crypto_box_seal).bootstrap-action.yml registration (up to ~60 seconds).TEMPLATE_TYPE_MAP with new template URLs.ANDROID_INDICATORS / NODE_INDICATORS or introduce new project types.vt watch for rapid iteration while sending signed webhook payloads (e.g., via curl).404, ensure the workflow file exists on the default branch and that GitHub has finished initializing the repo (may take a minute on newly-created repositories).