Skip to content

python-deploy

Pre-flight checks

!git status --short

!git log --oneline -5


Deploy to: $ARGUMENTS

If $ARGUMENTS is empty, stop immediately. Report: “No environment specified. Invoke as: /python-deploy (e.g., /python-deploy staging or /python-deploy production).”

Step 1: Abort if there are uncommitted changes

Check the git status output above. If it shows any lines (modified, untracked, staged, or deleted files), stop here.

Report: “Deploy aborted: there are uncommitted changes. Commit or stash them before deploying to $ARGUMENTS.”

A clean working tree shows no output from git status --short. Do not proceed unless the output is empty.

Step 2: Run the test suite

Run:

python -m pytest

If any tests fail, report the failing test names and count, then stop. Do not proceed.

If pytest is not installed, try:

python -m unittest discover

If neither is available, report that no test runner was found and stop. Do not deploy without running tests.

Step 3: Build the distribution package

Run:

python -m build

This requires the build package. If it is not installed, run:

pip install build

Then retry python -m build.

If the build fails, report the error output and stop.

On success, confirm the output: the dist/ directory should contain a .whl and a .tar.gz file.

Step 4: Create a deployment tag

Construct the tag name:

deploy-$ARGUMENTS-<YYYYMMDD>-<HHMMSS>

Use current UTC date and time. Example: deploy-staging-20260513-143207.

Run:

git tag deploy-$ARGUMENTS-<YYYYMMDD>-<HHMMSS>

Step 5: Push the tag

Run:

git push origin deploy-$ARGUMENTS-<YYYYMMDD>-<HHMMSS>

If the push fails, report the error and stop.

Step 6: Report success

Print a final summary:

Deploy initiated.
Environment: $ARGUMENTS
Tag: deploy-$ARGUMENTS-<YYYYMMDD>-<HHMMSS>
Time: <YYYY-MM-DD HH:MM:SS UTC>
Build artifacts: dist/