Skip to content

Conversation

@daneden
Copy link
Owner

@daneden daneden commented Jan 9, 2026

Summary

This release includes significant enhancements across deployment actions, navigation architecture, authentication, widgets, and overall code quality.

Deployment Actions

  • Promote to Production: Support for promoting staged/preview deployments to production
  • Instant Rollback: Quickly restore a previous production deployment
  • Toolbar Actions Menu: All deployment actions (promote, redeploy, delete/cancel) in a clean toolbar menu
  • Menu bar commands: Native Deployment menu with keyboard shortcuts in macOS and iPadOS
Action Shortcut
Promote to Production ⇧⌘P
Redeploy ⇧⌘R
Instant Rollback ⌥⇧⌘R
Delete Deployment ⌘⌫
Cancel Deployment ⌘.

Navigation & Architecture

  • Refactored navigation architecture with improved split view support
  • Refactored SwiftUI data flow using Environment for downward flow and FocusedValues for upward flow to Commands
  • Simplified onboarding sheet logic

Authentication

  • Refactored VercelSession to use TokenStore for improved token management
  • Shared keychain app group for widget authentication
  • Keychain access after first device unlock with automatic token migration
  • Improved account management on macOS

Data Models

  • Simplified VercelDeployment Codable conformance with intermediate RawDeployment struct
  • Refactored Vercel data models for cleaner code
  • Added Equatable conformance to VercelRepositoryLink

Widgets

  • Proper deep linking from widgets and notifications
  • Widget push token support for timeline refresh
  • WidgetNetworkManager class for cleaner networking code
  • Changed refresh policy to .never to allow app-controlled timeline refreshing
  • Fixed duplicate widget registration in bundle
  • Fixed lock screen circular widget design

UI/UX Improvements

  • Added build duration display
  • Added git commit author avatar and attribution to deployments
  • Animation improvements using EllipticalGradient
  • Various design fixes and enhancements
  • Improved project loading reliability and performance

Code Quality

  • Extracted DeploymentActionsService for API action methods
  • Created ConfirmableActionButton for reusable confirmation dialogs
  • Unified DeploymentActionMenuContent shared by toolbar and menu bar
  • Removed unused/legacy code

Test plan

  • Test deployment actions: promote, redeploy, instant rollback, delete, cancel
  • Verify macOS menu bar Deployment menu and keyboard shortcuts
  • Test navigation between projects and deployments on iOS and macOS
  • Verify authentication flow and account switching
  • Test widget deep linking and timeline refresh
  • Verify keychain token migration works correctly
  • Check commit author attribution displays correctly

🤖 Generated with Claude Code

claude and others added 8 commits January 9, 2026 15:27
This commit implements the feature requested in issue #113 to allow
promoting staged deployments directly to production without rebuilding.

Changes:
- Updated UI to display "Staging" label with icon for staging deployments
- Added new "Promote to production" button that appears for staging deployments
- Implemented promoteStagingToProduction() function that uses PATCH request
  to /v13/deployments/{id}/promote endpoint
- Maintained existing promote behavior for preview deployments (rebuild & promote)

The new feature distinguishes between:
- Staging deployments: Promoted directly using PATCH /promote endpoint
- Preview deployments: Rebuilt and promoted using POST /deployments with promote action

Fixes #113
This commit adds the ability to instantly rollback to previous production
deployments, complementing the staging promotion feature.

Changes:
- Added "Instant rollback" button for production deployments in ready state
- Implemented instantRollback() function using PATCH /promote endpoint
- Added confirmation dialog with appropriate messaging
- Uses same API endpoint as staging promotion (PATCH /v13/deployments/{id}/promote)

The instant rollback feature allows users to quickly restore a previous
production deployment without rebuilding, useful for emergency rollbacks
and deployment management.
Updated the promotion and rollback features to use the correct Vercel API
endpoint as documented at:
https://docs.vercel.com/docs/rest-api/reference/endpoints/projects/points-all-production-domains-for-a-project-to-the-given-deploy

Changes:
- Extended VercelAPI.Path.projects to support version parameter (defaults to v9 for backward compatibility)
- Updated promoteStagingToProduction() to use: PATCH /v10/projects/{projectName}/promote/{deploymentId}
- Updated instantRollback() to use: PATCH /v10/projects/{projectName}/promote/{deploymentId}
- Previous incorrect endpoint was: PATCH /v13/deployments/{id}/promote

The correct endpoint is under projects, not deployments, and uses the project
name along with the deployment ID in the path.
Extract deployment action methods into DeploymentActionsService and
create ConfirmableActionButton for reusable confirmation dialogs.
This reduces DeploymentDetails from ~280 lines to ~140 lines.

- Add DeploymentActionsService with all async API methods
- Add ConfirmableActionButton for button + confirmation pattern
- Simplify DeploymentDetails view to use new components

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add DeploymentActionsMenu component for toolbar actions
- Add macOS Deployment menu bar with keyboard shortcuts
- Use focusedSceneValue to share deployment context with menu commands
- Simplify DeploymentDetailView by moving actions to toolbar
- Add Equatable conformance to VercelRepositoryLink for onChange support

Keyboard shortcuts (macOS):
- ⇧⌘P: Promote to Production
- ⇧⌘R: Redeploy
- ⌥⇧⌘R: Instant Rollback
- ⌘⌫: Delete Deployment
- ⌘.: Cancel Deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@daneden daneden changed the title Add support for promoting staged deployments to production Enhance deployment actions with toolbar menu and macOS menu bar support Jan 12, 2026
daneden and others added 21 commits January 12, 2026 19:11
- Create unified AppFocusedState observable class for deployment context
- Add DeploymentAction enum with metadata (label, icon, shortcut, availability)
- Extract shared DeploymentActionMenuContent used by both toolbar and menu bar
- Simplify DeploymentActionsMenu and DeploymentCommands to use shared components

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change isCurrentProduction to computed property in AppFocusedState
- Remove stored isCurrentProduction parameter from DeploymentDetailView
- Compute isCurrentProduction in DeploymentActionConfirmationsModifier
- Simplify call sites by deriving value from deployment.id == project.targets?.production?.id

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove unnecessary @State and .task sync for presentOnboardingView.
Since the sheet has interactiveDismissDisabled(), it can only be
dismissed by adding an account, which naturally makes accounts.isEmpty
false.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
#Conflicts:
#	Shared/Views/Deployments/DeploymentListRowView.swift
#	Zeitgeist.xcodeproj/project.pbxproj
- Replace @observable AppFocusedState with separate FocusedValues
- Use Environment for downward data flow (project to DeploymentDetailView)
- Use FocusedValues for upward flow to Commands (account, project, deployment)
- Each view only sets the focused value it knows about
- Commands always visible, disabled when no deployment selected

Data flow:
- Environment: ProjectDetailView → DeploymentDetailView (project)
- FocusedValues: All views → DeploymentCommands (for menu bar)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@daneden daneden changed the title Enhance deployment actions with toolbar menu and macOS menu bar support v3.3.1: Deployment actions, navigation refactor, widget improvements, and auth enhancements Jan 16, 2026
@daneden daneden changed the title v3.3.1: Deployment actions, navigation refactor, widget improvements, and auth enhancements v3.4: Deployment actions, navigation refactor, widget improvements, and auth enhancements Jan 16, 2026
@daneden daneden merged commit bf3da92 into release/v3.4 Feb 2, 2026
1 check was pending
@daneden daneden deleted the claude/promote-production-deployment-h8VX1 branch February 2, 2026 12:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants