You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Configurable CLI exit behavior for API errors (#211)
* feat: add --exit-code-on-api-error flag + Buildkite-aware infra error logging
Adds a configurable exit code for API/infrastructure failures so CI pipelines
can distinguish them from blocking security findings (exit 1), without changing
any default behavior.
- New CliConfig field exit_code_on_api_error (default 3) + --exit-code-on-api-error
flag. The CLI already exited 3 on unexpected errors; this just makes that code
configurable (e.g. remap to a Buildkite soft_fail code, or 0 to swallow).
- New _emit_infrastructure_error helper + IS_BUILDKITE gate: emits Buildkite log
section markers (^^^ +++ / --- ⚠️) and a soft_fail hint when running in
Buildkite; plain log.error elsewhere so markers don't leak as literal text.
- Wire the top-level generic-exception handler in cli() through the helper and
the configurable code.
Deliberately NON-breaking for 2.3.x:
- --disable-blocking STILL forces exit 0 for all outcomes and takes precedence
over --exit-code-on-api-error (documented in the flag help so the two aren't
combined by mistake).
- Default exit codes are unchanged; the exit code only changes when the user
explicitly passes the flag.
The breaking variant (infra errors bypassing --disable-blocking, distinct
RequestTimeoutExceeded handling, exit 1 -> 3 for diff API failures) is
intentionally deferred to a future 3.0 release.
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
* feat(config): auto-truncate commit messages over 200 chars
The --commit-message flag passes its value directly into the API request URL
as a query parameter with no length limit. AI-generated commit messages and
the common CI pattern of concatenating $BUILDKITE_BUILD_NUMBER + $BUILDKITE_MESSAGE
can easily exceed URL length limits, producing HTTP 413 errors.
The 413 originates from an infrastructure-layer URL length limit (nginx/Cloudflare),
not application-level validation -- confirmed via inspection of the Socket API route
handler, which has no constraint on commit_message (unlike committers, which enforces
<= 200 chars and returns a clean 400).
200 chars chosen as a conservative defensive ceiling given URL encoding can 2-3x
raw character count. No customer should ever want a 2000-character commit message
in their scan metadata.
A backend-side validation (returning 400 instead of 413) is filed as a follow-on
for the depscan API team.
Motivated by customer incidents (Plaid).
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
* pass timeout through SDK diff requests
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
* fix: propagate --exclude-license-details to the full-scan diff request
The full-scan diff comparison ignored --exclude-license-details: the flag was
applied to full-scan params and report URLs but never forwarded to the
fullscans.stream_diff request, so diff comparisons always fetched license
details regardless of the flag.
Thread it through get_added_and_removed_packages -> stream_diff via a new
include_license_details param (defaulting True to preserve current behavior).
Non-breaking: the APIFailure handling at this call site is deliberately left
as-is (exit 1, --disable-blocking -> 0). Re-routing diff APIFailures through
the top-level exit-3 path is part of the 3.0 exit-code change, not this one.
Originally from the unreleased PR #195 branch; the timeout-propagation half
already landed in the preceding commit.
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
* test: cover --exit-code-on-api-error, truncation, and Buildkite formatting
tests/unit/test_cli_config.py
- exit_code_on_api_error default 3 / custom / zero
- commit-message truncation: passthrough under 200, truncate over 200,
quote-strip-before-truncate
tests/unit/test_socketcli.py
- unexpected error exits 3 by default
- --exit-code-on-api-error 100 remaps the failure exit code
- --disable-blocking OVERRIDES --exit-code-on-api-error (-> 0): locks in the
documented precedence so the soft_fail guidance can't silently regress
- KeyboardInterrupt still exits 2
- _emit_infrastructure_error: BK markers + soft_fail hint only when
IS_BUILDKITE; traceback gated on include_traceback
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
* chore(release): 2.3.0 -- configurable API-error exit code
Minor bump for the new --exit-code-on-api-error flag and the supporting
non-breaking improvements (commit-message truncation, Buildkite-aware infra
error logging, --timeout / --exclude-license-details fixes).
This release is intentionally NON-breaking: default exit codes are unchanged,
the exit code only shifts when --exit-code-on-api-error is explicitly passed,
and --disable-blocking keeps its existing precedence. The breaking exit-code
behavior change (infra errors exiting non-zero even under --disable-blocking)
is deferred to a future 3.0.
CHANGELOG + README document the flag AND its interaction with --disable-blocking
(which overrides it) to reduce user error in the Buildkite soft_fail setup.
Version refs synced across pyproject.toml, socketsecurity/__init__.py, and
uv.lock (per the version-incrementation CI check).
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
---------
Signed-off-by: lelia <2418071+lelia@users.noreply.github.com>
0 commit comments