TigerGate scan engine — static analysis for many languages, packaged for the TigerGate platform.
Project description
tg-engine
TigerGate scan engine — fast static analysis for many languages, packaged for the TigerGate platform.
The engine is fully self-contained: no outbound telemetry, no version-check pings, no third-party metrics. All scanning happens locally on the machine that runs tg-engine.
| Version | 1.0.0 |
| Distribution name (PyPI) | tg-engine |
| Console script | tg-engine |
| Telemetry | disabled — no outbound network calls from the engine |
| License | LGPL-2.1-or-later — see LICENSE |
Install
pip install tg-engine
tg-engine --version
That single pip install brings down the Python CLI plus the native scanner binary for your platform (Linux x64, Linux arm64, macOS arm64, Windows x64). No extra setup, no apt/brew packages, no environment variables.
Build from source
A self-contained release wheel for your current platform is produced by:
./scripts/build-wheel.sh
Output: cli/dist/tg_engine-<version>-<python-tags>-<platform>.whl (~70 MB; includes the native scanner binary and its companion shared libraries).
See scripts/build-wheel.sh for the exact mechanics.
Smoke test the wheel
python3 -m venv /tmp/tg-smoke
source /tmp/tg-smoke/bin/activate
pip install cli/dist/tg_engine-*.whl
pip show tg-engine # Name: tg-engine, Version: 1.0.0
which tg-engine # /tmp/tg-smoke/bin/tg-engine
tg-engine --version
tg-engine scan --config p/python /path/to/some.py # produces findings
Release setup
The high-level shape:
For each target platform: build a per-platform wheel
└── twine check
└── twine upload --repository testpypi ← rehearsal
└── pip install from TestPyPI; verify
└── twine upload ← real publish
└── git tag tg-engine-<ver>
One-time setup
- PyPI accounts. Create one at https://pypi.org and one at https://test.pypi.org. Enable 2FA on both.
- Local tooling (only needed for laptop releases — CI does this automatically):
pip install --upgrade build twine
- Credentials. For laptop releases, put API tokens in
~/.pypirc(chmod 0600):[distutils] index-servers = pypi testpypi [pypi] username = __token__ password = pypi-<your-token> [testpypi] repository = https://test.pypi.org/legacy/ username = __token__ password = pypi-<your-testpypi-token>
Per-release flow
- Bump version. Updates both
pyproject.tomland the package's__VERSION__in lockstep:./scripts/bump-version.sh X.Y.Z - Build per-platform wheels. Locally you can only build for your current platform; the rest needs CI (see below).
./scripts/build-wheel.sh
- Verify.
twine check cli/dist/*
- TestPyPI rehearsal.
twine upload --repository testpypi cli/dist/* python3 -m venv /tmp/tg-release-test /tmp/tg-release-test/bin/pip install \ --index-url https://test.pypi.org/simple/ \ --extra-index-url https://pypi.org/simple/ \ tg-engine /tmp/tg-release-test/bin/tg-engine --version
- Real publish.
twine upload cli/dist/*
- Tag the release.
git tag -a tg-engine-X.Y.Z -m "tg-engine X.Y.Z" git push origin main --tags
CI release via GitHub Actions
The full multi-arch build + publish flow lives in .github/workflows/release.yml. It builds four wheels in parallel (Linux x64, Linux arm64, macOS arm64, Windows x64), then publishes them in a single approved-gated job.
Trigger map:
| Tag pushed | Build | Publish | GitHub release |
|---|---|---|---|
tg-engine-1.0.0 |
all 4 archs | PyPI | yes |
tg-engine-1.0.0-rc.1 (also -alpha, -beta) |
all 4 archs | TestPyPI | yes (prerelease) |
tg-engine-1.0.0-dev |
all 4 archs | none (artifacts only) | yes (prerelease) |
manual workflow_dispatch |
all 4 archs | chosen via input dropdown | no |
Cutting a release:
./scripts/bump-version.sh 1.0.1
git commit -am "Release 1.0.1"
git tag -a tg-engine-1.0.1 -m "tg-engine 1.0.1"
git push origin main --tags
# → CI builds all archs, waits at the `release` environment for approval,
# then publishes to PyPI + cuts a GitHub release with the wheels attached.
One-time CI setup (do this before the first release)
-
PyPI OIDC trusted publisher. No API token needed — PyPI verifies GitHub's OIDC claim directly. Go to https://pypi.org/manage/account/publishing/ → Add a new pending publisher:
- PyPI Project Name:
tg-engine - Owner: your GitHub org/user
- Repository name: your repo name
- Workflow filename:
release.yml - Environment name:
release
For TestPyPI, repeat at https://test.pypi.org/manage/account/publishing/.
- PyPI Project Name:
-
GitHub Environment with required reviewer. This is the approval gate before any upload happens. In repo Settings → Environments:
- Click "New environment", name it
release. - Under "Deployment protection rules", enable "Required reviewers" and add yourself (or the relevant team).
- Save.
- Click "New environment", name it
-
Push a test tag to verify the wiring:
git tag -a tg-engine-1.0.0-dev -m "wiring test" git push origin tg-engine-1.0.0-dev
This builds all 4 wheels and creates a GitHub prerelease without uploading anywhere. Check that all 4 wheels are attached to the release before doing a real publish.
Publishing to a private index
Replace the twine upload call with the private index URL (or add to ~/.pypirc):
twine upload --repository-url https://pypi.tigergate.dev/simple/ cli/dist/*
Versioning policy
This project uses SemVer (MAJOR.MINOR.PATCH). Bump:
- MAJOR on any breaking change to the public CLI/LSP contract.
- MINOR on a new feature or scanner-version bump.
- PATCH on bug fixes and internal-only changes.
License
LGPL-2.1-or-later. See LICENSE for the full license text and required attributions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-win_amd64.whl.
File metadata
- Download URL: tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-win_amd64.whl
- Upload date:
- Size: 50.1 MB
- Tags: CPython 3.10, CPython 3.11, CPython 3.12, CPython 3.13, CPython 3.14, Python 3.10, Python 3.11, Python 3.12, Python 3.13, Python 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d099837eb0d099412b65a4ca56ba9cb53021ce1565cc3054d85e25c6857a606
|
|
| MD5 |
ea99b9ad11c968914a80aa088c492bdd
|
|
| BLAKE2b-256 |
ed9560f37e82d83fa8cda5cb2c03c878df963f60272b76c68b3c6fd61ed3219d
|
Provenance
The following attestation bundles were made for tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-win_amd64.whl:
Publisher:
release.yml on tigergate/tg-engine
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-win_amd64.whl -
Subject digest:
3d099837eb0d099412b65a4ca56ba9cb53021ce1565cc3054d85e25c6857a606 - Sigstore transparency entry: 1822887438
- Sigstore integration time:
-
Permalink:
tigergate/tg-engine@a014510007feac87e97bb8e42d12281a2f25c820 -
Branch / Tag:
refs/tags/tg-engine-1.0.1 - Owner: https://github.com/tigergate
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a014510007feac87e97bb8e42d12281a2f25c820 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 74.4 MB
- Tags: CPython 3.10, CPython 3.11, CPython 3.12, CPython 3.13, CPython 3.14, Python 3.10, Python 3.11, Python 3.12, Python 3.13, Python 3.14, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70afcb025c8381dbba0302f589c3cfb469ca41ae1b644b9e51033b1667d89a26
|
|
| MD5 |
19f4d7d92ad6a223aad595fe65f074a4
|
|
| BLAKE2b-256 |
81b2bb83de4794c3241d5174fa7548667e78672ad8a2719007c858f567616ed7
|
Provenance
The following attestation bundles were made for tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_x86_64.whl:
Publisher:
release.yml on tigergate/tg-engine
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_x86_64.whl -
Subject digest:
70afcb025c8381dbba0302f589c3cfb469ca41ae1b644b9e51033b1667d89a26 - Sigstore transparency entry: 1822887420
- Sigstore integration time:
-
Permalink:
tigergate/tg-engine@a014510007feac87e97bb8e42d12281a2f25c820 -
Branch / Tag:
refs/tags/tg-engine-1.0.1 - Owner: https://github.com/tigergate
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a014510007feac87e97bb8e42d12281a2f25c820 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_aarch64.whl.
File metadata
- Download URL: tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_aarch64.whl
- Upload date:
- Size: 76.1 MB
- Tags: CPython 3.10, CPython 3.11, CPython 3.12, CPython 3.13, CPython 3.14, Python 3.10, Python 3.11, Python 3.12, Python 3.13, Python 3.14, manylinux: glibc 2.35+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca00cb4571fe2e41b8a0188080e9f4b427e44f268e5b11e85bc0a84071aff607
|
|
| MD5 |
5fd9914a4c76c7776b6a06c2a6348d85
|
|
| BLAKE2b-256 |
81b9207c0437d7d1e2e16d3c1b2b55e7329d53399043f06c716b1a18368799f7
|
Provenance
The following attestation bundles were made for tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_aarch64.whl:
Publisher:
release.yml on tigergate/tg-engine
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-manylinux_2_35_aarch64.whl -
Subject digest:
ca00cb4571fe2e41b8a0188080e9f4b427e44f268e5b11e85bc0a84071aff607 - Sigstore transparency entry: 1822887447
- Sigstore integration time:
-
Permalink:
tigergate/tg-engine@a014510007feac87e97bb8e42d12281a2f25c820 -
Branch / Tag:
refs/tags/tg-engine-1.0.1 - Owner: https://github.com/tigergate
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a014510007feac87e97bb8e42d12281a2f25c820 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 47.1 MB
- Tags: CPython 3.10, CPython 3.11, CPython 3.12, CPython 3.13, CPython 3.14, Python 3.10, Python 3.11, Python 3.12, Python 3.13, Python 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ee6c98e345f9644e590416b654430ed85bfc4ec480c6cf25430df4b54f63dd2
|
|
| MD5 |
147cb77186b64cb731e9cb88cb0d544e
|
|
| BLAKE2b-256 |
8dc7ef739c0855929be61c96f8fbd49506d4c8b2f2c29f653ef1bdc4beca2603
|
Provenance
The following attestation bundles were made for tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl:
Publisher:
release.yml on tigergate/tg-engine
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tg_engine-1.0.1-cp310.cp311.cp312.cp313.cp314.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl -
Subject digest:
7ee6c98e345f9644e590416b654430ed85bfc4ec480c6cf25430df4b54f63dd2 - Sigstore transparency entry: 1822887456
- Sigstore integration time:
-
Permalink:
tigergate/tg-engine@a014510007feac87e97bb8e42d12281a2f25c820 -
Branch / Tag:
refs/tags/tg-engine-1.0.1 - Owner: https://github.com/tigergate
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a014510007feac87e97bb8e42d12281a2f25c820 -
Trigger Event:
push
-
Statement type: