# Safe Deploy

> Deploy to a target environment after running pre-flight checks. Only invoke manually.

- Skill: `davila7/safe-deploy` (Agent Skill)
- Install (CLI): `npx skillmds@latest add davila7/safe-deploy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/davila7/safe-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/safe-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: /safe-deploy <environment> (e.g., /safe-deploy staging or /safe-deploy production)."

### Step 1: Abort if there are uncommitted changes

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

Report: "Deploy aborted: the working tree has uncommitted changes. Commit or stash them before deploying to $ARGUMENTS."

Do not proceed past this step if there are uncommitted changes.

### Step 2: Run the test suite

Run:
```
npm test
```

If any test fails, stop here. Report the failing test names and do not proceed.

### Step 3: Build the project

Run:
```
npm run build
```

If the build fails, report the full error output and stop. Do not proceed.

### Step 4: Create a deployment tag

Construct a tag name:
```
deploy-$ARGUMENTS-<YYYYMMDD>-<HHMMSS>
```

Use the current UTC date and time. For example, a production deploy on 2026-05-13 at 14:32:07 UTC produces: `deploy-production-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. Do not retry automatically.

### Step 6: Report success

Print a final summary:

```
Deploy initiated.
Environment: $ARGUMENTS
Tag: deploy-$ARGUMENTS-<YYYYMMDD>-<HHMMSS>
Commit: <git rev-parse HEAD output>
Time: <YYYY-MM-DD HH:MM:SS UTC>
```

If any step failed, do not print this summary. The failure report for the failing step is the final output.

