.claude/skills/deploy/SKILL.md
Build, deploy, and test NiFi E2E environment (Docker containers)
npx skillsauth add cuioss/nifi-extensions deployInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Manages the Docker-based NiFi + Keycloak test environment for E2E testing.
Optional argument selects the workflow:
/deploy or /deploy status — Show container status/deploy start — First-time start (build NAR + start containers)/deploy redeploy — Redeploy after code changes (rebuild NAR + restart NiFi only)/deploy test — Run E2E Playwright tests (containers must be running)/deploy test <file> — Run specific E2E test file/deploy stop — Stop all containers/deploy full — Full CI workflow: stop → build → start → test → stop/deploy troubleshoot — Diagnose common issuesParse the argument to determine which workflow to execute. Default (no args) = show status.
./integration-testing/src/main/docker/check-status.sh --quiet
./integration-testing/src/main/docker/run-and-deploy.sh
Builds NAR, copies to target/nifi-deploy/, starts Keycloak + NiFi.
NiFi takes ~60-80s to become healthy. URLs after start:
After containers are healthy, run the NiFi Browser Login procedure, then display the Sandbox Credentials.
./integration-testing/src/main/docker/redeploy-nifi.sh
Rebuilds NAR, copies to deploy dir, runs docker compose restart nifi.
Wait ~60-80s for NiFi to become healthy.
Verify: ./integration-testing/src/main/docker/check-status.sh
After NiFi is healthy, run the NiFi Browser Login procedure, then display the Sandbox Credentials.
cd e-2-e-playwright && npm run playwright:test [-- tests/<file>.spec.js]
Containers MUST be running. Use /deploy start first if needed.
cd integration-testing/src/main/docker && docker compose down -v
cd integration-testing/src/main/docker && docker compose down -v
cd <project-root>
./mvnw clean install
./mvnw verify -Pintegration-tests -pl e-2-e-playwright -am
IMPORTANT: Maven manages its own container lifecycle. Do NOT have manually-started containers running.
Check for common issues in order:
docker ps — Are containers running? Any orphaned containers on ports 7777/9095/9443?docker compose -f integration-testing/src/main/docker/docker-compose.yml ps — Container stateslsof -i :7777 -i :9095 -i :9443 2>/dev/nulldocker logs docker-nifi-1 --tail 50docker logs docker-nifi-1 2>&1 | grep -i cuiossAfter every start or redeploy, open Chrome and log in to NiFi.
Prerequisites: The user must have accepted the self-signed certificate for https://localhost:9095 in Chrome beforehand. If the browser shows a certificate error page, ask the user to manually accept the certificate (Advanced → Proceed) and then retry.
CRITICAL — Chrome extension false negatives:
The tabs_context_mcp call frequently returns "Browser extension is not connected" even when the extension IS connected and working. This is a transient MCP initialization issue, NOT an actual disconnection. You MUST retry up to 5 times before concluding the extension is truly disconnected. NEVER tell the user the extension is disconnected based on failed calls alone — just keep retrying silently. In practice, the extension is almost always connected; failures resolve after 1-5 retries.
Login steps:
tabs_context_mcp with createIfEmpty: true. If it returns "not connected", retry up to 5 times (no delay needed between retries). Only after 5 consecutive failures should you ask the user to check the extension.tabs_create_mcphttps://localhost:9095/nifi/ — this redirects to NiFi's own login page (#/login)testUserdrowssap#/process-groups/ and the page title is "NiFi Flow" to verify a successful loginNotes:
https://localhost:9095/nifi/#/login.#/process-groups/ after navigation, the user is already logged in — skip the login steps.computer tool with coordinate-based clicks for the login form — find and read_page can be unreliable inside NiFi's Angular UI../mvnw verify -Pintegration-tests) automatically stops existing containers before starting fresh ones (via fixed deploy-and-start.sh)./mvnw clean install, the NAR in target/nifi-deploy/ is stale — must run /deploy redeploy to update running containerstarget/nifi-deploy/ directory is volume-mounted into the NiFi container| Path | Purpose |
|------|---------|
| target/nifi-deploy/ | NAR deployment dir (Docker volume mount) |
| integration-testing/src/main/docker/docker-compose.yml | Docker Compose config |
| integration-testing/src/main/docker/*.sh | Local deployment scripts |
| e-2-e-playwright/scripts/*.sh | Maven-phase scripts |
| e-2-e-playwright/target/test-results/ | Test artifacts |
After a successful start or redeploy (and browser login), display these credentials to the user so they can use the Token Fetch form in the Endpunkt-Tester tab:
Sandbox Keycloak Credentials (for Token Fetch)
───────────────────────────────────────────────
Realm: oauth_integration_tests
Client-ID: test_client
Client-Secret: yTKslWLtf4giJcWCaoVJ20H8sy6STexM
ROPC (password grant):
Username: testUser
Password: drowssap
Token Endpoint (auto-discovered via issuer):
https://keycloak:8443/realms/oauth_integration_tests/protocol/openid-connect/token
Other realm (for cross-issuer testing):
Realm: other_realm
Client-ID: other_client
Client-Secret: otherClientSecretValue123456789
Username: otherUser / drowssap
Note: The issuer dropdown in the Endpunkt-Tester auto-populates from the processor's Controller Service config. The token endpoint is resolved via OIDC discovery when clicking "Ermitteln".
The Custom UI runs inside an iframe. To access it manually:
https://localhost:9095/nifi/?id={processorId} query parametertesting
Verify NiFi custom UI tabs via Chrome and update doc/guides screenshots and guides
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.