# Python Deploy

> Deploy a Python project to the target environment. Runs pytest, builds the wheel, and pushes a deployment tag. Only invoke manually when ready to deploy.

- Skill: `davila7/python-deploy` (Agent Skill)
- Install (CLI): `npx skillmds@latest add davila7/python-deploy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/davila7/python-deploy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: davila7 (https://skillmd.com/u/davila7)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/davila7/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 <environment> (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/
```

