A pre-deployment checklist for ServiceNow. Point it at an instance and it flips through the twenty-three things that quietly break a deploy — then holds at the gate, or clears you for takeoff with a single exit code.
npx servicenow-preflight
Watch the board flip — CLEARED passes · HOLD warns · DENIED fails.
Read the timetable →Gates 01–02, 05 and 06 board on credentials alone. The rest stay ON HOLD until you supply their inputs — they never depart unchecked. Select a gate for the full read-out.
Run completed, no check returned fail.
A fail, a zero-match selection, or an unexpected runtime error.
A usage error — bad flags or config, caught before any check runs.
npx servicenow-preflight
Two identical binaries — servicenow-preflight and alias snpf.
export SNPF_INSTANCE=https://… export SNPF_USER=admin export SNPF_PASS='***'
$ snpf ✓ 4 cleared ! 11 on hold EXIT 0 — CLEARED
name: ServiceNow preflight on: [workflow_dispatch, pull_request] jobs: preflight: runs-on: ubuntu-latest permissions: { security-events: write } steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 22 } - env: # repo secrets SNPF_INSTANCE: ${{ secrets.SNPF_INSTANCE }} SNPF_USER: ${{ secrets.SNPF_USER }} SNPF_PASS: ${{ secrets.SNPF_PASS }} run: npx servicenow-preflight --format sarif > pf.sarif - uses: github/codeql-action/upload-sarif@v3 if: always() with: { sarif_file: pf.sarif }
{
"instanceUrl": "https://dev12345.service-now.com",
"scope": "x_acme_app",
"updateSetId": "a1b2c3d4…",
"select": { "skip": ["atf-run"] },
"options": { "languages": ["de","fr"],
"requiredApps": [{ "id": "x_acme_lib" }],
"atfSuites": ["<suite_sys_id>"] }
}
import { runPreflight, createSnClient } from "servicenow-preflight"; const http = createSnClient({ instanceUrl, auth }); const report = await runPreflight({ http, scope, updateSetId }); report.ok; // false if any check failed report.summary; // { pass, warn, fail }
If it saves you or your team time, sponsorship directly funds new features, fixes and maintenance.