Repository navigation
Drill Importers
Source platforms change under us. This drill reruns every importer end to end, plus the export round trip, so a drift in an upstream image, a changed API or a regression in the importer shows up the night it happens instead of the day a user comes home.
It is the job drill-importers of the drills pipeline: scripts/drill/legs/importers/run.
One check per source. Each runs the same Linux e2e script a developer runs by hand, against a local, pinned fixture. No credential is involved and nothing leaves the runner.
| Check id | Script | Guide |
|---|---|---|
importers/postgres |
scripts/e2e/import-postgres.sh |
Come-Home-Postgres |
importers/nhost |
scripts/e2e/import-nhost.sh |
Come-Home-nhost |
importers/hasura-cloud |
scripts/e2e/import-hasura-cloud.sh |
Come-Home-Hasura-Cloud |
importers/supabase |
scripts/e2e/import-supabase.sh |
Come-Home-Supabase |
importers/firebase |
scripts/e2e/import-firebase.sh |
Come-Home-Firebase |
importers/appwrite |
scripts/e2e/import-appwrite.sh |
Come-Home-Appwrite |
importers/round-trip |
scripts/e2e/export-round-trip.sh |
Import-Export-Format |
bash scripts/drill/legs/importers/run --list prints the seven ids and runs nothing.
- One fixture at a time, in the order above. A source that fails does not stop the next one, and the leg exits 1 when any check did not pass.
- Each script runs the way the e2e line of the importers plan runs it: a
docker:27-clicontainer on the host network with the docker socket, the checkout and a work dir mounted at the same path as on the host, and a static Linuxnselfbuilt from this checkout onPATH. The script tears its own fixture down (compose down -v) in a trap; the leg removes the container and the work dir after each source, and on CI it also removes any container, volume or network left behind that carries one of the scripts' own project names (a<NN>…-,e2e-adopt-rt-; the pipeline runs the other drill legs on the same Docker daemon at the same time, so nothing else is touched) and removes unused images when the runner is short of disk. - Time: 15 minutes per source, 75 minutes for the whole leg. A source that overruns, or that has no time left, is an
errorcheck with failure classtimeout. A skipped source is never reported as a pass. - The nightly workflow passes
--timeout 80mtonself-ci, so every drill job may run 80 minutes and the 75-minute budget fits. (A drill job has a 10-minute default; theNSELF_CI_TIMEOUTvariable alone does not raise it for discovered drill jobs.) - It runs on a GitHub-hosted
ubuntu-latestrunner. A run on a Mac proves nothing for the record.
The leg prints progress lines on stderr and, as the last line of stdout, one compact ci.evidence/v1 document with one check per source (importers/<source>, kind test, required). nself ci reads that line, validates it, and folds the failing checks into the one check of the drill-importers job. The pipeline evidence of the nightly run is the artifact drills-evidence; per-source logs are in ~/.nself/drill-out/importers/<source>.log, uploaded as the artifact drills-importers-results.
A failed check carries the exit code, failure_class code, and the last lines of the script output as its excerpt. An error check means the script did not get an answer: the budget ran out, Docker or Go was missing, or the image could not be pulled.
nself-ci --pipeline drills # all drills, including this one
bash scripts/drill/legs/importers/run # this leg alone (needs Docker and Go)
A full run needs Docker with about 15 GiB of free disk for the fixture images and takes tens of minutes.
Test the leg itself without Docker by pointing it at stub scripts named <source>.sh:
D=$(mktemp -d)
for s in postgres nhost hasura-cloud supabase firebase appwrite round-trip; do
printf '#!/bin/sh\nexit %s\n' "$([ "$s" = firebase ] && echo 1 || echo 0)" > "$D/$s.sh"
done
DRILL_SOURCES_DIR="$D" bash scripts/drill/legs/importers/run # firebase fails, the rest run, exit 1
| Variable | Meaning | Default |
|---|---|---|
DRILL_SOURCES_DIR |
run <dir>/<source>.sh directly with bash, no container |
unset |
DRILL_OUT_ROOT |
result root; logs go to <root>/importers/
|
~/.nself/drill-out |
DRILL_SOURCE_TIMEOUT |
seconds per source | 900 |
DRILL_BUDGET |
seconds for the whole leg | 4500 |
NSELF_LINUX_BIN |
a static Linux nself to mount instead of building one |
built from the checkout |
On GitHub a throwaway runner keeps no run store, so a red nightly run is the alert and a missing run is the staleness signal (see Drills). The drill must pass once on the pull request that adds it. Three consecutive green nights are counted once, in the ship gate, not here.
- Open the
drills-evidenceartifact and read the excerpt of the failing check, then its full log in the artifactdrills-importers-results(<source>.log). - Fixtures are pinned by digest in
test/fixtures/import/<source>/. If an upstream image moved, bump the digest deliberately in the fixture and rerun. - If the script drifted from the importer's behaviour, fix the script in the same change that changed the behaviour, and rerun this leg.
Getting Started
Commands
- Commands, Overview
- Lifecycle: cmd-init · cmd-build · cmd-start · cmd-stop · cmd-restart · cmd-dev
- Monitoring: cmd-status · cmd-logs · cmd-health · cmd-urls · cmd-doctor · cmd-monitor · cmd-alerts · cmd-sentry · cmd-watchdog
- Data: cmd-db · cmd-backup · cmd-dr · cmd-queue · cmd-webhooks
- Config: cmd-config · cmd-service · cmd-env · cmd-promote
- Networking: cmd-ssl · cmd-trust · cmd-dns-setup
- Security: cmd-access · cmd-security · cmd-secrets
- Tenancy: cmd-tenant · cmd-billing
- Plugins: cmd-plugin · cmd-license · cmd-dogfood (extracted, CLI-R11) · cmd-k8s (extracted, CLI-R11) · cmd-encryption (extracted, CLI-R11) · cmd-waf (extracted, CLI-R11) · cmd-federation (extracted, CLI-R11) · cmd-mail (extracted, CLI-R11) · cmd-dlq (extracted, CLI-R11)
- AI: cmd-ai · cmd-claw · cmd-model
- Templates: cmd-template
- Utilities: cmd-exec · cmd-clean · cmd-reset · cmd-update · cmd-upgrade · cmd-version · cmd-admin · cmd-migrate · cmd-migrate-firebase · cmd-migrate-supabase · cmd-completion
Features
- Features, Overview
- Feature-Auth
- Feature-Storage
- Feature-Search
- Feature-Functions
- Feature-Email
- Feature-Monitoring
- Feature-Plugins
- Feature-nClaw, AI Assistant
- Feature-nChat, Messaging
- Feature-nFamily, Family Social
- Feature-nCloud, Managed Hosting
- Feature-Memory-Rooms, Knowledge Organization
- Feature-Agent-Dashboard, Agent Metrics
- Feature-Image-Generation, AI Image Generation
Configuration
- Configuration, Overview
- Config-Env-Vars
- Config-Postgres
- Config-Hasura
- Config-Auth
- Config-Nginx
- Shared-Proxy
- Config-Optional-Services
- Config-Custom-Services
- Config-System
Plugins (87 + 10 monitoring)
- Plugin-Overview
- Plugin-Catalog
- Plugin-Install
- Plugin-Licensing
- Plugin-Architecture
- Plugin-Dev-Guide
- Plugin-Migrations-Contract
Free (25)
- plugin-backup
- plugin-content-acquisition
- plugin-content-progress
- plugin-cron
- plugin-donorbox
- plugin-feature-flags
- plugin-github
- plugin-github-runner
- plugin-invitations
- plugin-jobs
- plugin-link-preview
- plugin-mdns
- plugin-mlflow
- plugin-monitoring
- plugin-notifications
- plugin-notify
- plugin-paypal
- plugin-search
- plugin-shopify
- plugin-stripe
- plugin-subtitle-manager
- plugin-tokens
- plugin-torrent-manager
- plugin-vpn
- plugin-webhooks
Pro (62)
- plugin-access-controls
- plugin-activity-feed
- plugin-admin-api
- plugin-analytics
- plugin-auth
- plugin-bots
- plugin-browser
- plugin-calendar
- plugin-cdn
- plugin-chat
- plugin-claw
- plugin-claw-budget
- plugin-claw-news
- plugin-claw-web
- plugin-cloudflare
- plugin-cms
- plugin-compliance
- plugin-ddns
- plugin-devices
- plugin-documents
- plugin-entitlements
- plugin-file-processing
- plugin-game-metadata
- plugin-geocoding
- plugin-geolocation
- plugin-google
- plugin-home
- plugin-idme
- plugin-knowledge-base
- plugin-linkedin
- plugin-livekit
- plugin-media-processing
- plugin-meetings
- plugin-moderation
- plugin-mux
- plugin-object-storage
- plugin-observability
- plugin-photos
- plugin-podcast
- plugin-post
- plugin-realtime
- plugin-retro-gaming
- plugin-rom-discovery
- plugin-social
- plugin-sports
- plugin-support
- plugin-tmdb
- plugin-voice
- plugin-web3
- plugin-workflows
Planned (26)
plugin-auditplugin-blogplugin-checkoutplugin-commerceplugin-drmplugin-exportplugin-flowplugin-importplugin-ldapplugin-mailgunplugin-mediaplugin-oauth-providersplugin-pagesplugin-postmarkplugin-rate-limitplugin-reportsplugin-samlplugin-schedulerplugin-sendgridplugin-ssoplugin-subscriptionplugin-thumbplugin-transcoderplugin-twilioplugin-wafplugin-watermark
Guides
- Guide-Production-Deployment
- Guide-SSL-Setup
- Guide-Multi-Tenancy
- Guide-Security-Hardening
- Guide-Monitoring-Setup
- Guide-Backup-Restore
- Guide-Custom-Services
- Guide-Migration-from-v1
Architecture
- Architecture
- Architecture-Guardrails
- Service-Graph
- Compose-Generation
- Nginx-Generation
- Plugin-Architecture
Reference
Machine interface
-
JSON-Output,
--jsonenvelope -
Command-Registry,
nself help --json - Exit-Codes
- error-codes, Error Codes
-
Compat-V15,
NSELF_V15gate
Licensing
Security
Brand
Operations
- operations/release-cascade, Release Cascade
- operations/self-healing, Self-Healing Schema
- operations/redis-tuning, Redis Pool Tuning
- operations/meilisearch-warmup, MeiliSearch Warm-Up
- operations/jwt-rotation, JWT Key Rotation
- operations/windows-wsl2-setup, Windows / WSL2 Setup
- operations/gemini-oauth-reauth, Gemini OAuth Reauth
Contributing
Admin
- USER-ACTION-QUEUE, Pending Admin Actions
All commands (21)
- A: cmd-add · cmd-admin
- B: cmd-backup · cmd-build
- C: cmd-clean · cmd-config
- D: cmd-db · cmd-deploy · cmd-doctor
- E: cmd-exec
- I: cmd-init
- L: cmd-license · cmd-logs
- M: cmd-mcp
- R: cmd-remove · cmd-reset · cmd-restart
- S: cmd-start · cmd-status · cmd-stop
- U: cmd-update