A defensive, local-first security scanner for software release packages.
Find exposed secrets, unsafe archives, sensitive files, broken static assets, dangerous
permissions, and policy violations before you publish or deploy.
Get started · Explore the checks · Read the docs · Report a vulnerability
Created and maintained by Taher Amine ELHOUARI
Website · GitHub · Official repository
A release can build successfully and still expose credentials, contain internal files, ship broken assets, preserve unsafe permissions, or hide a dangerous archive structure. Release Sentry adds a focused security gate between “the build passed” and “publish it.”
Source code → Build artifact → Release Sentry → Publish / Deploy
│
└─ secrets, archive safety, hygiene,
permissions, completeness and policy
It scans directories, ZIP archives, TAR files, TAR.GZ files, and TGZ files without executing or blindly extracting their contents.
Release Sentry requires Python 3.11 or newer.
Download the wheel from the latest GitHub release, then run:
python -m pip install release_sentry-1.0.1-py3-none-any.whlrelease-sentry scan dist/release.ziprelease-sentry scan public/ --profile static-web --fail-on highrelease-sentry init --profile static-web
release-sentry validate-policy .release-sentry.yml| Security area | Release Sentry checks |
|---|---|
| Archive safety | Path traversal, absolute paths, unsafe links, special entries, collisions, archive bombs, encryption, and quota violations |
| Secrets | Private keys, provider tokens, credentials, JWT-like values, and bounded entropy candidates—without disclosing the secret |
| Release hygiene | Environment files, dumps, backups, caches, VCS metadata, debug output, and internal notes |
| Completeness | Required files, one-of requirements, non-empty assets, and profile-specific production expectations |
| Permissions | Executable, world-writable, setuid/setgid, and signature-to-extension mismatches |
| Static websites | Missing assets, case mismatches, escaping paths, development URLs, source maps, and .htaccess requirements |
| Release evidence | Terminal, JSON, Markdown, JUnit XML, SARIF 2.1.0, and SHA-256/SHA-512 manifests |
Built-in profiles:
generic · static-web · python-package · node-package · documentation · container-build-context
| Command | Purpose |
|---|---|
release-sentry scan PATH |
Scan a directory or supported archive |
release-sentry init |
Generate a starter policy |
release-sentry validate-policy FILE |
Validate a policy before using it |
release-sentry manifest PATH |
Generate a stable SHA-256 or SHA-512 manifest |
release-sentry compare OLD NEW |
Highlight security risks introduced by a new release |
release-sentry rules |
List built-in rules and explanations |
release-sentry version |
Show version and project ownership information |
release-sentry about |
Display project, creator, and official links |
schema_version: "1.0"
profile: static-web
failure_threshold: high
require_htaccess: true
forbid_source_maps: true
required_paths:
- path: index.html
non_empty: true
forbidden_paths:
- "**/*.bak"
- "**/.env*"
allowed_executables: []
suppressions:
- rule_id: RS-FILE-005
path: "docs/Thumbs.db"
justification: "Legacy fixture reviewed by the release owner"
owner: release-team
expires: 2027-01-01Generate a starter with release-sentry init --profile static-web. See the
policy reference and the machine-readable
policy schema for every option.
Choose the output that fits your workflow:
release-sentry scan dist/release.zip --format json --output report.json
release-sentry scan dist/release.zip --format markdown --output report.md
release-sentry scan dist/release.zip --format junit --output report.xml
release-sentry scan dist/release.zip --format sarif --output report.sarifFor GitHub Actions:
- name: Inspect release artifact
uses: MrTaherAmine/release-sentry@v1
with:
path: dist/release.zip
policy: .release-sentry.yml
fail-on: high
format: sarifSee the GitHub Actions guide for complete least-privilege examples and SARIF upload guidance.
| Code | Meaning |
|---|---|
0 |
Scan completed; no finding met the failure threshold |
1 |
Scan completed; at least one finding met or exceeded the threshold |
2 |
Invalid arguments, policy, or configuration |
3 |
Artifact unreadable, corrupted, or unsupported |
4 |
Internal failure or cancellation |
Release Sentry is read-only, offline, and local-first. During a scan it does not:
- execute artifact content;
- blindly extract archives;
- upload files or send network requests;
- modify the artifact being inspected;
- collect analytics or emit telemetry.
Secret evidence is fingerprinted and redacted in every output format. Reads are bounded, symlinks are not followed, and untrusted names and report fields are sanitized.
Read the security model and threat model for the complete design and trust boundaries.
Important
Release Sentry is a defensive review aid. It does not guarantee that an artifact is secure, compliant, malware-free, or free of every possible secret. Binary semantic analysis, digital-signature verification, and recursive nested-archive scanning are outside v1.0.
Release Sentry v1.0.1 is validated with 100% measured test coverage across 1,074
statements and 348 branches, with the project quality gate set to 99.99%.
The release is also checked with Ruff, strict MyPy, Bandit, dependency auditing, package build verification, clean-environment installation, and a Release Sentry self-scan.
| Guide | Description |
|---|---|
| Architecture | Components, data flow, and design boundaries |
| Rule catalogue | Built-in rules, severity, and remediation guidance |
| Policy reference | Configuration and suppression reference |
| Output formats | Terminal, JSON, Markdown, JUnit, and SARIF outputs |
| GitHub Actions | CI integration and least-privilege examples |
| Creating rules | Contributor guide for new detections |
| Security policy | Supported versions and vulnerability reporting |
| Contributing | Development setup and contribution process |
Contributions, responsible testing, documentation improvements, and new defensive detection ideas are welcome. Please read CONTRIBUTING.md and the Code of Conduct before opening a pull request.
For security-sensitive reports, follow SECURITY.md instead of opening a public issue.
Release Sentry is released under the MIT License.
Created and maintained by Taher Amine ELHOUARI.
Copyright © 2026 Taher Amine ELHOUARI. All project attribution, official links, and provenance
information must remain consistent with the license and repository history.
Secure the release before the release becomes the incident.
Website · GitHub profile · Releases · Issues