skills-ws
Version:
87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.
88 lines (74 loc) • 2.06 kB
Markdown
## Contents
- Rollback Strategies
- Kubernetes Health Check Rollback
- Database Migration Rollback
## Rollback Strategies
### Kubernetes Health Check Rollback
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 3
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0 # Zero-downtime
template:
spec:
containers:
- name: app
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 2
```
Manual rollback:
```bash
kubectl rollout undo deployment/app --namespace=production
kubectl rollout undo deployment/app --to-revision=3 --namespace=production
```
### Database Migration Rollback
**Rule:** Every migration must be reversible.
```typescript
// migrations/20240301_add_user_email_verified.ts
import { Knex } from 'knex';
export async function up(knex: Knex): Promise<void> {
await knex.schema.alterTable('users', (table) => {
table.boolean('email_verified').nullable().defaultTo(null);
});
await knex.raw(`
UPDATE users SET email_verified = true WHERE confirmed_at IS NOT NULL
`);
}
export async function down(knex: Knex): Promise<void> {
await knex.schema.alterTable('users', (table) => {
table.dropColumn('email_verified');
});
}
```
**Expand-contract pattern for breaking schema changes:**
1. **Expand:** Add new column, dual-write to both old and new
2. **Migrate:** Backfill data from old to new
3. **Switch:** Read from new column
4. **Contract:** Drop old column (separate deploy, days later)