As a developer, I want to quickly rollback to a previous version so that I can recover from a bad deployment without rebuilding.
Design
Command Interface
# Rollback to previous version
qrun rollback --env prod
# Rollback to specific version
qrun rollback --env prod --version 1.2.2
# Rollback with confirmation
qrun rollback --env prod --confirm
# Show rollback candidates
qrun rollback --env prod --list
Rollback Workflow
1. Query Voyage for deployment history
2. Identify rollback target (previous or specified)
3. Confirm with user (unless --confirm)
4. Create new deployment with old artifact
5. Monitor deployment
6. Report success/failure
List Output
$ qrun rollback --env prod --list
Deployment historyfor prod:
v1.2.3 (current) - deployed 2h ago by james@example.com
v1.2.2 - deployed 1d ago by james@example.com
v1.2.1 - deployed 3d ago by ci@example.com
v1.2.0 - deployed 7d ago by ci@example.com
Use: qrun rollback --env prod --version <version>
Confirmation Prompt
$ qrun rollback --env prod
Rolling back prod from v1.2.3 to v1.2.2
Current: v1.2.3 (deployed 2h ago)
Target: v1.2.2 (deployed 1d ago)
Reason: [Enter reason or press Enter to skip]: Bug in login flow
Proceed with rollback? [y/N]: y
Rolling back...
Creating deployment... ✓
Waiting for pods... ✓
Health check... ✓
Rollback complete!
Version: 1.2.2
Time: 45s
Voyage API
GET /v1/apps/{app}/deployments?env=prod
→ Returns deployment history
POST /v1/deployments
{
"artifactId": "art_old",
"environment": "prod",
"rollbackFrom": "dep_current",
"reason": "Bug in login flow"
}
Files to Create/Modify
File
Action
Description
RollbackCommand.java
Create
Main rollback command
DeploymentHistory.java
Create
Deployment history model
RollbackConfirmation.java
Create
Interactive confirmation
VoyageClient.java
Modify
Add history endpoint
Implementation Tasks
Create RollbackCommand with Picocli annotations
Implement --list to show deployment history
Implement --version to specify target
Implement automatic previous version detection
Create interactive confirmation prompt
Implement --confirm to skip prompt
Add --reason option for audit trail
Implement rollback via Voyage API
Monitor deployment after rollback
Handle rollback failures gracefully
Prevent rollback to non-existent version
Add timeout for deployment monitoring
Add unit tests for rollback logic
Acceptance Criteria
qrun rollback --env prod rolls back to previous
--version allows specific version selection
--list shows deployment history
Confirmation required unless --confirm
Reason captured for audit trail
Rollback completes within 2 minutes
Clear error if no previous version exists
Deployment status monitored after rollback
Part of #13
## User Story
As a **developer**, I want to quickly rollback to a previous version so that I can recover from a bad deployment without rebuilding.
## Design
### Command Interface
```bash
# Rollback to previous version
qrun rollback --env prod
# Rollback to specific version
qrun rollback --env prod --version 1.2.2
# Rollback with confirmation
qrun rollback --env prod --confirm
# Show rollback candidates
qrun rollback --env prod --list
```
### Rollback Workflow
```
1. Query Voyage for deployment history
2. Identify rollback target (previous or specified)
3. Confirm with user (unless --confirm)
4. Create new deployment with old artifact
5. Monitor deployment
6. Report success/failure
```
### List Output
```bash
$ qrun rollback --env prod --list
Deployment history for prod:
v1.2.3 (current) - deployed 2h ago by james@example.com
v1.2.2 - deployed 1d ago by james@example.com
v1.2.1 - deployed 3d ago by ci@example.com
v1.2.0 - deployed 7d ago by ci@example.com
Use: qrun rollback --env prod --version <version>
```
### Confirmation Prompt
```bash
$ qrun rollback --env prod
Rolling back prod from v1.2.3 to v1.2.2
Current: v1.2.3 (deployed 2h ago)
Target: v1.2.2 (deployed 1d ago)
Reason: [Enter reason or press Enter to skip]: Bug in login flow
Proceed with rollback? [y/N]: y
Rolling back...
Creating deployment... ✓
Waiting for pods... ✓
Health check... ✓
Rollback complete!
Version: 1.2.2
Time: 45s
```
### Voyage API
```
GET /v1/apps/{app}/deployments?env=prod
→ Returns deployment history
POST /v1/deployments
{
"artifactId": "art_old",
"environment": "prod",
"rollbackFrom": "dep_current",
"reason": "Bug in login flow"
}
```
## Files to Create/Modify
| File | Action | Description |
|------|--------|-------------|
| `RollbackCommand.java` | Create | Main rollback command |
| `DeploymentHistory.java` | Create | Deployment history model |
| `RollbackConfirmation.java` | Create | Interactive confirmation |
| `VoyageClient.java` | Modify | Add history endpoint |
## Implementation Tasks
- [ ] Create `RollbackCommand` with Picocli annotations
- [ ] Implement `--list` to show deployment history
- [ ] Implement `--version` to specify target
- [ ] Implement automatic previous version detection
- [ ] Create interactive confirmation prompt
- [ ] Implement `--confirm` to skip prompt
- [ ] Add `--reason` option for audit trail
- [ ] Implement rollback via Voyage API
- [ ] Monitor deployment after rollback
- [ ] Handle rollback failures gracefully
- [ ] Prevent rollback to non-existent version
- [ ] Add timeout for deployment monitoring
- [ ] Add unit tests for rollback logic
## Acceptance Criteria
- [ ] `qrun rollback --env prod` rolls back to previous
- [ ] `--version` allows specific version selection
- [ ] `--list` shows deployment history
- [ ] Confirmation required unless `--confirm`
- [ ] Reason captured for audit trail
- [ ] Rollback completes within 2 minutes
- [ ] Clear error if no previous version exists
- [ ] Deployment status monitored after rollback
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #13
User Story
As a developer, I want to quickly rollback to a previous version so that I can recover from a bad deployment without rebuilding.
Design
Command Interface
Rollback Workflow
List Output
Confirmation Prompt
Voyage API
Files to Create/Modify
RollbackCommand.javaDeploymentHistory.javaRollbackConfirmation.javaVoyageClient.javaImplementation Tasks
RollbackCommandwith Picocli annotations--listto show deployment history--versionto specify target--confirmto skip prompt--reasonoption for audit trailAcceptance Criteria
qrun rollback --env prodrolls back to previous--versionallows specific version selection--listshows deployment history--confirm