Files
gh-duongdev-ccpm/commands/project:delete.md
2025-11-29 18:24:24 +08:00

333 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: Delete a project from CCPM configuration
allowed-tools: [Bash, Read, Edit, AskUserQuestion]
argument-hint: <project-id> [--force]
---
# Delete Project from CCPM
Remove a project configuration from `~/.claude/ccpm-config.yaml`.
## Arguments
- **$1** - Project ID (required)
- **--force** - Skip confirmation (optional, dangerous)
## Usage
```bash
# Interactive delete with confirmation
/ccpm:project:delete my-app
# Force delete without confirmation
/ccpm:project:delete my-app --force
```
## Workflow
### Step 1: Validate Project Exists
```bash
CONFIG_FILE="$HOME/.claude/ccpm-config.yaml"
PROJECT_ID=$1
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "❌ Error: No CCPM configuration found"
exit(1)
fi
if ! yq eval ".projects.$PROJECT_ID" "$CONFIG_FILE" > /dev/null 2>&1; then
echo "❌ Error: Project '$PROJECT_ID' not found"
echo ""
echo "Available projects:"
yq eval '.projects | keys | .[]' "$CONFIG_FILE"
exit(1)
fi
```
### Step 2: Load and Display Project Info
```javascript
const projectConfig = await yq(`.projects.${projectId}`, CONFIG_FILE)
console.log(`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ Delete Project: ${projectId}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Project will be removed:
Name: ${projectConfig.name}
Description: ${projectConfig.description || "N/A"}
Linear: ${projectConfig.linear.team} / ${projectConfig.linear.project}
Repository: ${projectConfig.repository?.url || "N/A"}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ WARNING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This will remove the project configuration from CCPM.
What will happen:
✓ Project removed from ~/.claude/ccpm-config.yaml
✓ CCPM commands will no longer recognize this project
✓ You can re-add the project later if needed
What will NOT happen:
✗ No data in Linear will be deleted
✗ No data in Jira/Confluence will be deleted
✗ No code repositories will be affected
✗ No files in your project will be deleted
This ONLY removes the CCPM configuration for this project.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
`)
```
### Step 3: Confirm Deletion
If `--force` flag is NOT provided:
```javascript
{
questions: [{
question: `Are you sure you want to delete project '${projectId}'?`,
header: "Confirm Delete",
multiSelect: false,
options: [
{
label: "Yes, delete it",
description: "Remove project from CCPM configuration"
},
{
label: "Show details first",
description: "View full project configuration before deleting"
},
{
label: "No, cancel",
description: "Keep the project"
}
]
}]
}
```
If user selects "Show details first":
```bash
# Run /ccpm:project:show internally
/ccpm:project:show $PROJECT_ID
# Then ask again
{
questions: [{
question: "After reviewing, do you want to delete this project?",
header: "Confirm Delete",
multiSelect: false,
options: [
{
label: "Yes, delete it",
description: "Remove project from CCPM"
},
{
label: "No, keep it",
description: "Cancel deletion"
}
]
}]
}
```
### Step 4: Check if Project is Active
```javascript
const isActive = await isActiveProject(projectId)
if (isActive) {
console.log(`
⚠️ Additional Warning: Active Project
This project is currently active (auto-detected from your working directory).
If you delete it, you'll need to:
1. Use /ccpm:project:set <other-project> to switch, OR
2. Navigate to a different project directory, OR
3. CCPM commands will prompt you to select a project
`)
// Ask for additional confirmation
{
questions: [{
question: "This is your active project. Still delete?",
header: "Active Project",
multiSelect: false,
options: [
{
label: "Yes, delete anyway",
description: "I understand this is active"
},
{
label: "No, cancel",
description: "Keep the active project"
}
]
}]
}
}
```
### Step 5: Perform Deletion
```bash
# Create backup first
BACKUP_FILE="$HOME/.claude/ccpm-config.backup.$(date +%Y%m%d_%H%M%S).yaml"
cp "$CONFIG_FILE" "$BACKUP_FILE"
echo "📦 Backup created: $BACKUP_FILE"
echo ""
# Delete the project using yq
yq eval -i "del(.projects.$PROJECT_ID)" "$CONFIG_FILE"
echo "✅ Project deleted successfully!"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 Summary"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Deleted: $PROJECT_ID"
echo "Backup: $BACKUP_FILE"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 Next Steps"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "View remaining projects: /ccpm:project:list"
echo "Add new project: /ccpm:project:add <project-id>"
echo ""
echo "To restore (if needed):"
echo " cp $BACKUP_FILE $CONFIG_FILE"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
```
### Step 6: Cleanup Active Project Context
If the deleted project was active:
```bash
# Clear active project context
yq eval -i '.context.current_project = null' "$CONFIG_FILE"
echo ""
echo " Active project context cleared"
echo ""
echo "Next time you run a CCPM command, you'll be prompted to select a project."
echo "Or set a default: /ccpm:project:set <project-id>"
```
## Safety Features
### 1. Always Creates Backup
Before deletion, a timestamped backup is created:
```
~/.claude/ccpm-config.backup.20250120_143022.yaml
```
### 2. Confirmation Required
Unless `--force` is used, user must confirm:
- Once for regular projects
- Twice for active projects
### 3. Clear Communication
The command clearly states what WILL and WILL NOT be deleted.
### 4. Easy Restoration
Backup file path is provided for easy restoration if needed.
## Examples
### Example 1: Delete with confirmation
```bash
/ccpm:project:delete old-project
# Shows project details
# Asks for confirmation
# Creates backup
# Deletes configuration
# ✅ Done
```
### Example 2: Delete active project
```bash
/ccpm:project:delete my-current-app
# Shows project details
# ⚠️ Warns it's the active project
# Asks for confirmation twice
# Creates backup
# Deletes configuration
# Clears active project context
# ✅ Done
```
### Example 3: Force delete (no confirmation)
```bash
/ccpm:project:delete temp-project --force
# ⚠️ DANGEROUS: Skips all confirmations
# Creates backup
# Deletes immediately
# ✅ Done
# Use with caution!
```
### Example 4: Restore from backup
```bash
# If you deleted by mistake:
cp ~/.claude/ccpm-config.backup.20250120_143022.yaml ~/.claude/ccpm-config.yaml
# Or run:
/ccpm:project:list # Shows the backup file path
# Then manually restore
```
## What Gets Deleted
### Deleted ✓
- Project configuration in `~/.claude/ccpm-config.yaml`
- Project entry from CCPM's project list
- Active project context (if applicable)
### NOT Deleted ✗
- Linear issues and data
- Jira tickets and data
- Confluence pages
- Slack messages
- Git repositories
- Local project files
- Any actual code or data
**This command ONLY removes the CCPM configuration, not any actual project data.**
## Notes
- Always creates a timestamped backup before deletion
- Can be safely restored from backup
- Does not affect any external systems
- Use `--force` carefully (skips all confirmations)
- Active projects require extra confirmation
- Configuration file: `~/.claude/ccpm-config.yaml`