272 lines
8.7 KiB
Markdown
272 lines
8.7 KiB
Markdown
# 🚀 Interactive GitHub User Removal Script
|
||
|
||
An intuitive, guided script that walks you through the process of removing users from GitHub repositories with a beautiful interactive interface.
|
||
|
||
## ✨ Features
|
||
|
||
### 🎯 Interactive Experience
|
||
- **Beautiful Welcome Screen** with ASCII art
|
||
- **Step-by-step Guided Process** - no command line arguments needed
|
||
- **Smart Input Validation** with helpful error messages
|
||
- **Confirmation Prompts** to prevent accidental operations
|
||
- **Real-time Progress Updates** with visual progress bars
|
||
|
||
### 🛡️ Safety Features
|
||
- **Dry Run Mode** (recommended first run) - preview changes without executing
|
||
- **Multiple Confirmation Steps** for destructive operations
|
||
- **Token Validation** before proceeding
|
||
- **Pattern Preview** to show what repositories will match
|
||
|
||
### 🎨 User Interface
|
||
- **Color-coded Output** for easy reading
|
||
- **Emoji Icons** for visual clarity
|
||
- **Formatted Headers** and sections
|
||
- **Clear Success/Error Messages**
|
||
|
||
## 📋 Requirements
|
||
|
||
- `bash` (version 4.0+)
|
||
- `curl`
|
||
- `jq`
|
||
- Valid GitHub Personal Access Token with `repo` and `admin:org` permissions
|
||
|
||
## 🚀 Usage
|
||
|
||
Simply run the script - no command line arguments needed:
|
||
|
||
```bash
|
||
./remove_user_guided.sh
|
||
```
|
||
|
||
The script will guide you through each step:
|
||
|
||
### 1. 🔑 GitHub Authentication
|
||
```
|
||
🔑 GitHub Authentication
|
||
============================================================
|
||
Please provide your GitHub Personal Access Token:
|
||
💡 The token should have 'repo' and 'admin:org' permissions
|
||
💡 You can create one at: https://github.com/settings/tokens
|
||
|
||
🔐 Enter your GitHub token: [hidden input]
|
||
```
|
||
|
||
### 2. 👤 Target Organization/User
|
||
```
|
||
👤 Target Organization/User
|
||
============================================================
|
||
Enter the GitHub username or organization name:
|
||
💡 This is where we'll look for repositories
|
||
💡 Examples: 'mycompany', 'john-doe', 'my-organization'
|
||
|
||
🏢 Organization/Username:
|
||
```
|
||
|
||
### 3. 🎯 User to Remove
|
||
```
|
||
🎯 User to Remove
|
||
============================================================
|
||
Enter the username you want to remove from repositories:
|
||
💡 This user will be removed as a collaborator from matching repositories
|
||
💡 They will lose access to private repositories (if applicable)
|
||
|
||
👤 Username to remove:
|
||
```
|
||
|
||
### 4. 📁 Repository Filter
|
||
```
|
||
📁 Repository Filter
|
||
============================================================
|
||
Enter a repository name pattern to filter repositories:
|
||
💡 Pattern examples:
|
||
• '*' - All repositories
|
||
• 'myproject-' - Repos starting with 'myproject-'
|
||
• '*api*' - Repos containing 'api'
|
||
• 'web-app' - Repos starting with 'web-app'
|
||
|
||
🔍 Repository pattern:
|
||
```
|
||
|
||
### 5. ⚙️ Operation Options
|
||
```
|
||
⚙️ Operation Options
|
||
============================================================
|
||
Choose your operation mode:
|
||
|
||
1) 🔍 Dry Run - Preview what would be done (Recommended)
|
||
2) 🚀 Execute - Perform the actual removal
|
||
|
||
Select option (1 or 2):
|
||
```
|
||
|
||
### 6. 📋 Final Summary
|
||
```
|
||
📋 Operation Summary
|
||
============================================================
|
||
Configuration:
|
||
🏢 Organization/User: myorg
|
||
👤 User to remove: olduser
|
||
🔍 Repository pattern: project-*
|
||
⚙️ Mode: Dry Run
|
||
📝 Logging: Standard
|
||
|
||
Ready to proceed? (yes/no):
|
||
```
|
||
|
||
## 🎭 Interactive Flow Example
|
||
|
||
Here's what a complete session looks like:
|
||
|
||
```
|
||
╔══════════════════════════════════════════════════════════╗
|
||
║ ║
|
||
║ 🚀 GitHub User Removal Tool 🚀 ║
|
||
║ ║
|
||
║ Remove users from repositories with ease! ║
|
||
║ ║
|
||
╚══════════════════════════════════════════════════════════╝
|
||
|
||
ℹ️ Welcome to the Interactive GitHub User Removal Script!
|
||
|
||
🔑 GitHub Authentication
|
||
============================================================
|
||
[Token input and validation...]
|
||
|
||
👤 Target Organization/User
|
||
============================================================
|
||
[Organization selection...]
|
||
|
||
🎯 User to Remove
|
||
============================================================
|
||
[User selection with confirmation...]
|
||
|
||
📁 Repository Filter
|
||
============================================================
|
||
[Pattern selection with preview...]
|
||
|
||
⚙️ Operation Options
|
||
============================================================
|
||
[Mode selection...]
|
||
|
||
📋 Operation Summary
|
||
============================================================
|
||
[Final confirmation...]
|
||
|
||
🚀 Processing Repositories
|
||
============================================================
|
||
ℹ️ Discovering repositories for myorg...
|
||
✅ Found 25 repositories
|
||
ℹ️ Filtering repositories by pattern 'project-*'...
|
||
✅ Found 8 repositories matching pattern 'project-*'
|
||
ℹ️ Processing repositories...
|
||
|
||
Progress: [100%] 8/8 repositories processed
|
||
[DRY RUN] Would remove olduser from myorg/project-api
|
||
[DRY RUN] Would remove olduser from myorg/project-web
|
||
|
||
🎉 Operation Complete
|
||
============================================================
|
||
📊 Statistics:
|
||
📁 Repositories scanned: 25
|
||
🔍 Repositories matching pattern: 8
|
||
👤 Repositories where user was collaborator: 2
|
||
|
||
✅ Successful removals: 0
|
||
ℹ️ Already removed: 0
|
||
❌ Failed removals: 0
|
||
|
||
⚠️ This was a dry run - no actual changes were made
|
||
💡 To perform the actual removal, run the script again and select 'Execute' mode
|
||
|
||
🙏 Thank you for using the GitHub User Removal Tool!
|
||
```
|
||
|
||
## 🛡️ Safety Features in Detail
|
||
|
||
### 1. **Token Validation**
|
||
- Validates GitHub token before any operations
|
||
- Shows authenticated username for confirmation
|
||
- Provides clear error messages for invalid tokens
|
||
|
||
### 2. **Input Validation**
|
||
- Validates username/organization formats
|
||
- Checks repository pattern syntax
|
||
- Provides helpful suggestions for corrections
|
||
|
||
### 3. **Confirmation Steps**
|
||
- Confirms user to be removed
|
||
- Confirms repository pattern understanding
|
||
- Requires explicit "YES" for destructive operations
|
||
|
||
### 4. **Dry Run Mode (Recommended)**
|
||
- Shows exactly what would be done
|
||
- No actual changes made
|
||
- Perfect for testing and verification
|
||
|
||
### 5. **Pattern Preview**
|
||
- Shows what the pattern will match before execution
|
||
- Examples: "This will match repositories starting with: project-"
|
||
- Helps prevent unintended scope
|
||
|
||
## 🔧 Repository Patterns
|
||
|
||
| Pattern | What it Matches | Examples |
|
||
|---------|-----------------|----------|
|
||
| `*` | All repositories | All repos in the org/user |
|
||
| `bytelyst-` | Repos starting with 'bytelyst-' | `bytelyst-web`, `bytelyst-api`, `bytelyst-mobile` |
|
||
| `*api*` | Repos containing 'api' | `web-api`, `user-api-v2`, `api-gateway` |
|
||
| `web-*` | Repos starting with 'web-' | `web-frontend`, `web-backend`, `web-app` |
|
||
| `*-service` | Repos ending with '-service' | `user-service`, `auth-service` |
|
||
|
||
## 🎨 Color Coding
|
||
|
||
The script uses intuitive color coding:
|
||
|
||
- 🔵 **Blue**: Informational messages and prompts
|
||
- 🟢 **Green**: Success messages and confirmations
|
||
- 🟡 **Yellow**: Warnings and important notices
|
||
- 🔴 **Red**: Errors and failures
|
||
- 🟣 **Purple**: Section headers
|
||
- 🟦 **Cyan**: Progress updates and statistics
|
||
|
||
## 🚨 Important Notes
|
||
|
||
1. **Always start with Dry Run mode** to preview changes
|
||
2. **Double-check the user to remove** - there's no undo!
|
||
3. **Verify repository patterns** match your intentions
|
||
4. **Ensure your token has sufficient permissions**
|
||
5. **Users will lose access to private repositories** immediately
|
||
|
||
## 💡 Tips for Best Experience
|
||
|
||
1. **Have your GitHub token ready** before starting
|
||
2. **Know the exact username** you want to remove
|
||
3. **Think about the repository pattern** beforehand
|
||
4. **Use Dry Run first** to verify everything looks correct
|
||
5. **Keep the terminal window** large enough for the interface
|
||
|
||
## 🔗 Quick Start Guide
|
||
|
||
1. **Prepare**: Get your GitHub token with proper permissions
|
||
2. **Run**: Execute `./remove_user_guided.sh`
|
||
3. **Follow**: The interactive prompts step by step
|
||
4. **Preview**: Always do a dry run first
|
||
5. **Execute**: Run again in execute mode if satisfied
|
||
|
||
## ⚡ Keyboard Shortcuts
|
||
|
||
- `Ctrl+C`: Cancel operation at any time
|
||
- `Enter`: Confirm current input
|
||
- Arrow keys work in most terminals for command history
|
||
|
||
## 🆘 Need Help?
|
||
|
||
The script provides comprehensive help at each step:
|
||
- Clear explanations for each input
|
||
- Examples for common patterns
|
||
- Helpful error messages
|
||
- Recovery suggestions
|
||
|
||
---
|
||
|
||
**Ready to clean up your repositories? Just run `./remove_user_guided.sh` and let the script guide you!** 🚀 |