superset-showtime 0.1.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of superset-showtime might be problematic. Click here for more details.

Files changed (33) hide show
  1. superset_showtime-0.2.2/.claude/settings.local.json +36 -0
  2. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/CLAUDE.md +22 -17
  3. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/PKG-INFO +97 -96
  4. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/README.md +96 -95
  5. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/pyproject.toml +4 -1
  6. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/__init__.py +1 -3
  7. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/cli.py +302 -173
  8. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/core/aws.py +73 -24
  9. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/core/circus.py +42 -58
  10. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/core/emojis.py +0 -10
  11. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/core/github.py +43 -1
  12. superset_showtime-0.2.2/showtime/core/label_colors.py +105 -0
  13. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/data/ecs-task-definition.json +4 -0
  14. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/tests/unit/test_circus.py +0 -57
  15. {superset_showtime-0.1.0/.github/workflows → superset_showtime-0.2.2/workflows-reference}/showtime-cleanup.yml +20 -9
  16. superset_showtime-0.2.2/workflows-reference/showtime-trigger.yml +135 -0
  17. superset_showtime-0.1.0/.claude/settings.local.json +0 -24
  18. superset_showtime-0.1.0/.github/workflows/showtime.yml +0 -185
  19. superset_showtime-0.1.0/showtime/core/config.py +0 -152
  20. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/.gitignore +0 -0
  21. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/.pre-commit-config.yaml +0 -0
  22. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/Makefile +0 -0
  23. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/dev-setup.sh +0 -0
  24. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/pypi-push.sh +0 -0
  25. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/requirements-dev.txt +0 -0
  26. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/requirements.txt +0 -0
  27. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/__main__.py +0 -0
  28. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/commands/__init__.py +0 -0
  29. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/commands/start.py +0 -0
  30. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/showtime/core/__init__.py +0 -0
  31. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/tests/__init__.py +0 -0
  32. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/tests/unit/__init__.py +0 -0
  33. {superset_showtime-0.1.0 → superset_showtime-0.2.2}/uv.lock +0 -0
@@ -0,0 +1,36 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Read(//Users/max/code/superset/.github/workflows/**)",
5
+ "Bash(showtime stop:*)",
6
+ "Bash(python:*)",
7
+ "Bash(uv pip install:*)",
8
+ "Bash(aws configure:*)",
9
+ "Bash(env)",
10
+ "Bash(unset:*)",
11
+ "Bash(aws sts:*)",
12
+ "WebSearch",
13
+ "Bash(git add:*)",
14
+ "Bash(git commit:*)",
15
+ "Bash(ruff check:*)",
16
+ "Bash(pytest:*)",
17
+ "Bash(make test:*)",
18
+ "Bash(uv pip compile:*)",
19
+ "Bash(chmod:*)",
20
+ "Read(//Users/max/code/**)",
21
+ "Bash(aws efs create-file-system:*)",
22
+ "Bash(export AWS_PROFILE=\"\")",
23
+ "Bash(AWS_PROFILE=\"\" aws efs create-file-system --tags Key=Name,Value=superset-examples Key=Purpose,Value=shared-examples-duckdb --performance-mode generalPurpose)",
24
+ "Bash(env -u AWS_PROFILE aws efs create-file-system --tags Key=Name,Value=superset-examples Key=Purpose,Value=shared-examples-duckdb --performance-mode generalPurpose)",
25
+ "Bash(env -u AWS_PROFILE aws efs create-file-system --performance-mode generalPurpose)",
26
+ "Bash(env -u AWS_PROFILE aws efs describe-file-systems --query 'FileSystems[?Tags[?Key==`Name` && Value==`superset-examples`]]')",
27
+ "Bash(env -u AWS_PROFILE aws efs describe-file-systems)",
28
+ "Bash(env:*)",
29
+ "Bash(grep:*)",
30
+ "Bash(git grep:*)",
31
+ "Bash(git push:*)"
32
+ ],
33
+ "deny": [],
34
+ "ask": []
35
+ }
36
+ }
@@ -166,20 +166,25 @@ showtime stop 34809 --force
166
166
 
167
167
  ## Current Implementation Status
168
168
 
169
- ### ✅ Working (Tested)
170
- - GitHub API integration with apache/superset
171
- - Circus tent emoji label parsing and creation
172
- - CLI commands: `list`, `status`, `start/stop` (with dry-run)
173
- - Beautiful help system that teaches label workflow
174
- - Comprehensive dry-run testing framework
175
-
176
- ### 🚧 Partially Implemented
177
- - AWS operations (class exists, logic written, needs testing)
178
- - Per-SHA label parsing (designed, needs full implementation)
179
- - Trigger processing (framework exists, needs completion)
180
-
181
- ### 📋 Not Implemented
182
- - Rolling update logic for zero-downtime
183
- - Real AWS integration testing
184
- - Feature flag configuration via labels
185
- - GitHub Actions workflow deployment
169
+ ### ✅ Fully Implemented (Production Ready)
170
+ - **Blue-green deployment**: Zero-downtime updates with health checks
171
+ - **AWS integration**: Complete ECS/ECR operations with DockerHub pulling
172
+ - **Smart sync system**: Intelligent PR state detection and auto-sync
173
+ - **GitHub Actions workflows**: Drop-in replacement for ephemeral-env.yml
174
+ - **TTL-based cleanup**: Respects individual environment preferences
175
+ - **SHA override support**: Deploy any specific commit for testing
176
+ - **Freeze functionality**: Pin environments during testing
177
+ - **Enhanced CLI**: Clickable links, full-width tables, real-time progress
178
+ - **Unified label system**: Searchable namespaced labels with color themes
179
+
180
+ ### 🎯 Label System (Streamlined)
181
+ - **Trigger labels**: `🎪 ⚡ showtime-trigger-start` (namespaced, searchable)
182
+ - **State labels**: `🎪 abc123f 🚦 running` (color-coded status)
183
+ - **Freeze support**: `🎪 🧊 showtime-freeze` (prevents auto-sync)
184
+ - **Automatic creation**: Labels get proper colors/descriptions automatically
185
+
186
+ ### 📦 Ready for Deployment
187
+ - **GitHub Actions**: `workflows-reference/showtime-trigger.yml` + `showtime-cleanup.yml`
188
+ - **PyPI package**: Built with dependencies, ready for `pip install superset-showtime`
189
+ - **Testing infrastructure**: Comprehensive dry-run and manual testing support
190
+ - **Documentation**: Complete README with workflows and examples
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superset-showtime
3
- Version: 0.1.0
3
+ Version: 0.2.2
4
4
  Summary: 🎪 Apache Superset ephemeral environment management with circus tent emoji state tracking
5
5
  Project-URL: Homepage, https://github.com/apache/superset-showtime
6
6
  Project-URL: Documentation, https://superset-showtime.readthedocs.io/
@@ -72,22 +72,34 @@ Description-Content-Type: text/markdown
72
72
 
73
73
  ## 🎯 What is Showtime?
74
74
 
75
- Superset Showtime replaces the complex GitHub Actions scripts for ephemeral environments with a simple, powerful CLI tool that uses **circus tent emoji labels** for state management.
75
+ Superset Showtime is a CLI tool designed primarily for **GitHub Actions** to manage Apache Superset ephemeral environments. It uses **circus tent emoji labels** as a visual state management system and depends on Superset's existing build infrastructure.
76
76
 
77
- ### The Problem We Solve
77
+ ## 🚀 Quick Start for Superset Contributors
78
+
79
+ **Create an ephemeral environment:**
80
+ 1. Go to your PR in GitHub
81
+ 2. Add label: `🎪 ⚡ showtime-trigger-start`
82
+ 3. Watch the magic happen - labels will update automatically
83
+ 4. When you see `🎪 🚦 {sha} running`, your environment is ready!
84
+ 5. Get URL from `🎪 🌐 {sha} {ip}` → `http://{ip}:8080`
85
+ 6. **Every new commit automatically deploys a fresh environment** (zero-downtime)
86
+
87
+ **To test a specific commit without auto-updates:**
88
+ - Add label: `🎪 🧊 showtime-freeze` (prevents auto-sync on new commits)
78
89
 
79
- **Current Superset ephemeral environment issues:**
80
- - 🚨 **Stale environments** - New commits don't update existing environments
81
- - 💸 **Resource waste** - Multiple environments per PR, no automatic cleanup
82
- - 🔧 **Hard to maintain** - Complex GitHub Actions logic scattered across workflows
83
- - 👀 **Poor visibility** - Hard to see what environments exist and their status
90
+ **Clean up when done:**
91
+ ```bash
92
+ # Add this label:
93
+ 🎪 🛑 showtime-trigger-stop
94
+ # All circus labels disappear, AWS resources cleaned up
95
+ ```
84
96
 
85
- ### The Showtime Solution
97
+ ## 🎪 How It Works
86
98
 
87
99
  **🎪 GitHub labels become a visual state machine:**
88
100
  ```bash
89
101
  # User adds trigger label in GitHub UI:
90
- 🎪 trigger-start
102
+ 🎪 ⚡ showtime-trigger-start
91
103
 
92
104
  # System responds with state labels:
93
105
  🎪 abc123f 🚦 building # Environment abc123f is building
@@ -101,64 +113,40 @@ Superset Showtime replaces the complex GitHub Actions scripts for ephemeral envi
101
113
  🎪 abc123f 🌐 52-1-2-3 # Available at http://52.1.2.3:8080
102
114
  ```
103
115
 
104
- ## 🚀 Quick Start for Superset Contributors
105
-
106
- ### 1. As a Contributor (Using GitHub Labels)
116
+ ## 📊 For Maintainers (CLI Operations)
107
117
 
108
- **Create an ephemeral environment:**
109
- 1. Go to your PR in GitHub
110
- 2. Add label: `🎪 trigger-start`
111
- 3. Watch the magic happen - labels will update automatically
112
- 4. When you see `🎪 🚦 {sha} running`, your environment is ready!
113
- 5. Get URL from `🎪 🌐 {sha} {ip}` → `http://{ip}:8080`
118
+ > **Note**: CLI is mainly for debugging or developing Showtime itself. Primary interface is GitHub labels above.
114
119
 
115
- **Configure your environment:**
116
- ```bash
117
- # Add these labels to enable Superset feature flags:
118
- 🎪 conf-enable-ALERTS # Enable alerts feature
119
- 🎪 conf-enable-DASHBOARD_RBAC # Enable dashboard RBAC
120
- 🎪 conf-disable-SSH_TUNNELING # Disable SSH tunneling
121
- ```
122
-
123
- **Clean up when done:**
124
- ```bash
125
- # Add this label:
126
- 🎪 trigger-stop
127
- # All circus labels disappear, AWS resources cleaned up
128
- ```
129
-
130
- ### 2. As a Maintainer (Using CLI)
131
-
132
- **Install the CLI:**
120
+ **Install CLI for debugging:**
133
121
  ```bash
134
122
  pip install superset-showtime
135
123
  export GITHUB_TOKEN=your_token
136
124
  ```
137
125
 
138
- **Monitor all environments:**
126
+ **Monitor and debug:**
139
127
  ```bash
140
128
  showtime list # See all active environments
141
- showtime status 1234 # Check specific PR environment
142
- showtime labels # Learn the complete label system
129
+ showtime status 1234 # Debug specific environment
130
+ showtime labels # Complete label reference
143
131
  ```
144
132
 
145
- **Test and debug:**
133
+ **Testing/development:**
146
134
  ```bash
147
- showtime start 1234 --dry-run-aws # Test environment creation
135
+ showtime start 1234 --dry-run-aws # Test without AWS costs
148
136
  showtime test-lifecycle 1234 # Full workflow simulation
149
137
  ```
150
138
 
139
+ > **Dependency**: This CLI coordinates with Superset's existing GitHub Actions build infrastructure. It orchestrates environments but relies on Superset's build workflows for container creation.
140
+
151
141
  ## 🎪 Complete Label Reference
152
142
 
153
143
  ### 🎯 Trigger Labels (Add These to Your PR)
154
144
 
155
145
  | Label | Action | Result |
156
146
  |-------|---------|---------|
157
- | `🎪 trigger-start` | Create environment | Builds and deploys ephemeral environment |
158
- | `🎪 trigger-stop` | Destroy environment | Cleans up AWS resources and removes all labels |
159
- | `🎪 trigger-sync` | Update to latest commit | Zero-downtime rolling update |
160
- | `🎪 conf-enable-ALERTS` | Enable feature flag | Sets `SUPERSET_FEATURE_ALERTS=True` |
161
- | `🎪 conf-disable-DASHBOARD_RBAC` | Disable feature flag | Sets `SUPERSET_FEATURE_DASHBOARD_RBAC=False` |
147
+ | `🎪 ⚡ showtime-trigger-start` | Create environment | Builds and deploys ephemeral environment with blue-green deployment |
148
+ | `🎪 🛑 showtime-trigger-stop` | Destroy environment | Cleans up AWS resources and removes all labels |
149
+ | `🎪 🧊 showtime-freeze` | Freeze environment | Prevents auto-sync on new commits (for testing specific SHAs) |
162
150
 
163
151
  ### 📊 State Labels (Automatically Managed)
164
152
 
@@ -168,16 +156,27 @@ showtime test-lifecycle 1234 # Full workflow simulation
168
156
  | `🎪 🎯 {sha}` | Active environment pointer | `🎪 🎯 abc123f` |
169
157
  | `🎪 🏗️ {sha}` | Building environment pointer | `🎪 🏗️ def456a` |
170
158
  | `🎪 {sha} 📅 {timestamp}` | Creation time | `🎪 abc123f 📅 2024-01-15T14-30` |
171
- | `🎪 {sha} 🌐 {ip-with-dashes}` | Environment IP | `🎪 abc123f 🌐 52-1-2-3` |
159
+ | `🎪 {sha} 🌐 {ip:port}` | Environment URL | `🎪 abc123f 🌐 52.1.2.3:8080` |
172
160
  | `🎪 {sha} ⌛ {ttl}` | Time-to-live policy | `🎪 abc123f ⌛ 24h` |
173
161
  | `🎪 {sha} 🤡 {username}` | Who requested | `🎪 abc123f 🤡 maxime` |
174
- | `🎪 {sha} ⚙️ {config}` | Feature flags enabled | `🎪 abc123f ⚙️ alerts,debug` |
162
+
163
+ ## 🔧 Testing Configuration Changes
164
+
165
+ **Approach**: Modify configuration directly in your PR code, then trigger environment.
166
+
167
+ **Workflow**:
168
+ 1. Modify `superset_config.py` with your changes
169
+ 2. Push commit → Creates new SHA (e.g., `def456a`)
170
+ 3. Add `🎪 ⚡ showtime-trigger-start` → Deploys with your config
171
+ 4. Test environment reflects your exact code changes
172
+
173
+ This approach creates traceable, reviewable changes that are part of your git history.
175
174
 
176
175
  ## 🔄 Complete Workflows
177
176
 
178
177
  ### Creating Your First Environment
179
178
 
180
- 1. **Add trigger label** in GitHub UI: `🎪 trigger-start`
179
+ 1. **Add trigger label** in GitHub UI: `🎪 ⚡ showtime-trigger-start`
181
180
  2. **Watch state labels appear:**
182
181
  ```
183
182
  🎪 abc123f 🚦 building ← Environment is building
@@ -187,17 +186,15 @@ showtime test-lifecycle 1234 # Full workflow simulation
187
186
  3. **Wait for completion:**
188
187
  ```
189
188
  🎪 abc123f 🚦 running ← Now ready!
190
- 🎪 abc123f 🌐 52-1-2-3 ← Visit http://52.1.2.3:8080
189
+ 🎪 abc123f 🌐 52.1.2.3:8080 ← Visit http://52.1.2.3:8080
191
190
  ```
192
191
 
193
- ### Enabling Feature Flags
192
+ ### Testing Specific Commits
194
193
 
195
- 1. **Add config label:** `🎪 conf-enable-ALERTS`
196
- 2. **Watch config update:**
197
- ```
198
- 🎪 abc123f ⚙️ standard ← Before
199
- 🎪 abc123f ⚙️ alerts ← After (feature enabled!)
200
- ```
194
+ 1. **Add freeze label:** `🎪 🧊 showtime-freeze`
195
+ 2. **Result:** Environment won't auto-update on new commits
196
+ 3. **Use case:** Test specific SHA while continuing development
197
+ 4. **Override:** Add `🎪 ⚡ showtime-trigger-start` to force update despite freeze
201
198
 
202
199
  ### Rolling Updates (Automatic!)
203
200
 
@@ -230,18 +227,18 @@ You'll see:
230
227
  - **❌ External contributors** cannot trigger environments (no write access to add labels)
231
228
  - **🔒 Secure by design** - only trusted users can create expensive AWS resources
232
229
 
233
- ### How GitHub Actions Work
230
+ ### GitHub Actions Integration
234
231
 
235
- The new system replaces complex GHA scripts with simple ones:
232
+ Showtime is designed to be called by Superset's GitHub Actions workflows:
236
233
 
237
234
  ```yaml
238
- # .github/workflows/circus.yml (replaces current ephemeral-env.yml)
235
+ # .github/workflows/showtime.yml - Integrates with Superset's existing build workflows
239
236
  on:
240
237
  pull_request_target:
241
238
  types: [labeled, unlabeled, synchronize]
242
239
 
243
240
  jobs:
244
- circus-handler:
241
+ showtime-handler:
245
242
  if: contains(github.event.label.name, '🎪')
246
243
  steps:
247
244
  - name: Install Showtime from PyPI
@@ -251,66 +248,70 @@ jobs:
251
248
  run: python -m showtime handle-trigger ${{ github.event.pull_request.number }}
252
249
  ```
253
250
 
254
- **Security benefits:**
255
- - **Always runs trusted code** (from PyPI, not PR code)
256
- - **Simple workflow logic** (just install CLI and run)
257
- - **Same permission model** as current system
251
+ **Integration approach:**
252
+ - **Coordinates with Superset builds** - Uses existing container build workflows
253
+ - **Runs trusted code** (from PyPI, not PR code)
254
+ - **Simple orchestration logic** (install CLI and run commands)
255
+ - **Leverages existing infrastructure** - Same AWS resources and permissions
258
256
 
259
257
  ## 🛠️ Installation & Setup
260
258
 
261
259
  ### For Contributors (GitHub Labels Only)
262
- No installation needed! Just use the GitHub label system.
260
+ No installation needed! Just use GitHub labels to trigger environments.
263
261
 
264
- ### For Maintainers (CLI Access)
262
+ ### For Maintainers (Manual CLI Operations)
265
263
 
266
- **Install CLI:**
264
+ **Install CLI for debugging/testing:**
267
265
  ```bash
268
266
  pip install superset-showtime
269
267
  export GITHUB_TOKEN=your_personal_access_token
270
268
  ```
271
269
 
272
- **Test CLI:**
270
+ **Manual operations:**
273
271
  ```bash
274
- showtime list # See all active environments
275
- showtime status 1234 # Check specific environment
276
- showtime labels # Learn complete label system
272
+ showtime list # Monitor all active environments
273
+ showtime status 1234 # Debug specific environment
274
+ showtime labels # Reference complete label system
277
275
  ```
278
276
 
279
- ### For Repository Setup (One-Time)
277
+ ### For Repository Integration (GitHub Actions)
280
278
 
281
279
  **1. Install GitHub workflows:**
282
- Copy `.github/workflows/circus.yml` and `.github/workflows/circus-cleanup.yml` to your Superset repo.
280
+ Copy `workflows-reference/showtime-trigger.yml` and `workflows-reference/showtime-cleanup.yml` to Superset's `.github/workflows/`.
281
+
282
+ **2. Configure secrets (already exist in Superset):**
283
+ - `AWS_ACCESS_KEY_ID`
284
+ - `AWS_SECRET_ACCESS_KEY`
285
+ - `GITHUB_TOKEN`
283
286
 
284
- **2. Add repository secrets:**
285
- - `AWS_ACCESS_KEY_ID` (already exists)
286
- - `AWS_SECRET_ACCESS_KEY` (already exists)
287
- - `GITHUB_TOKEN` (already exists)
287
+ **3. Dependencies:**
288
+ Showtime coordinates with Superset's existing build infrastructure - no additional setup needed.
288
289
 
289
- **3. Replace old workflows:**
290
- Remove or disable the current `ephemeral-env.yml` and `ephemeral-env-pr-close.yml`.
290
+ ## 📊 CLI Reference (For Development/Debugging)
291
291
 
292
- ## 📊 CLI Commands Reference
292
+ > **Primary Interface**: Use GitHub labels in PR interface. CLI is mainly for maintainers debugging or developing Showtime itself.
293
293
 
294
- ### Core Commands
294
+ ### Debugging Commands
295
295
  ```bash
296
- showtime start 1234 # Create environment (with dry-run options)
297
- showtime stop 1234 # Delete environment
298
- showtime status 1234 # Show environment status
299
- showtime list # List all environments across org
300
- showtime labels # Complete label reference guide
296
+ showtime list # Monitor all environments
297
+ showtime status 1234 # Debug specific environment
298
+ showtime labels # Complete label reference
299
+ showtime test-lifecycle 1234 # Full workflow simulation
301
300
  ```
302
301
 
303
- ### Testing & Development
302
+ ### Manual Operations (Advanced)
304
303
  ```bash
305
- showtime start 1234 --dry-run-aws # Mock AWS, real GitHub labels
306
- showtime test-lifecycle 1234 --real-github # Full workflow simulation
307
- showtime handle-trigger 1234 --dry-run-aws # Simulate GitHub Actions
304
+ showtime start 1234 # Manually create environment
305
+ showtime start 1234 --sha abc123f # Create environment (specific SHA)
306
+ showtime stop 1234 # Manually delete environment
307
+ showtime sync 1234 # Force sync to desired state
308
+ showtime cleanup --respect-ttl # Manual cleanup
308
309
  ```
309
310
 
310
- ### Advanced Operations
311
+ ### GitHub Actions Commands
311
312
  ```bash
312
- showtime cleanup --older-than 48h # Clean up old environments
313
- showtime list --status running --user maxime # Filter environments
313
+ showtime handle-trigger 1234 # Process trigger labels (called by GHA)
314
+ showtime cleanup --older-than 48h # Scheduled cleanup (called by GHA)
314
315
  ```
315
316
 
316
317
  ## 🎪 Benefits for Superset
@@ -319,7 +320,7 @@ showtime list --status running --user maxime # Filter environments
319
320
  - **🎯 Simple workflow** - Just add/remove GitHub labels
320
321
  - **👀 Visual feedback** - See environment status in PR labels
321
322
  - **⚡ Automatic updates** - New commits update environments automatically
322
- - **🔧 Live configuration** - Enable/disable feature flags without rebuilding
323
+ - **🔧 Configuration testing** - Test config changes through code commits
323
324
 
324
325
  ### For Maintainers
325
326
  - **📊 Complete visibility** - `showtime list` shows all environments