fix: re-sync SSH deploy keys when updating site source control#1083
Open
urufudev wants to merge 3 commits into
Open
fix: re-sync SSH deploy keys when updating site source control#1083urufudev wants to merge 3 commits into
urufudev wants to merge 3 commits into
Conversation
Member
|
@urufudev thanks for the PR. I'd appreceate test coverage for this |
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes deploy-key drift when a site's Source Control provider/token is changed: the old provider's deploy key is removed and the existing site SSH key is re-registered with the new provider, with the resulting deploy_key_id persisted in type_data so DeleteSite can clean it up later.
Changes:
- In
UpdateSourceControl::update, attempt to delete the previous deploy key, swap source control (and unset the cached relation), then re-register the SSH key on the new provider and store the newdeploy_key_id. - Failures in the old-key deletion and new-key registration are caught and logged via
Log::warningrather than aborting the update. - Adds three feature tests covering old-key deletion, new-key registration, and resilience when the old-key deletion fails; also makes minor formatting-only edits to existing tests.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| app/Actions/Site/UpdateSourceControl.php | Adds delete-old / re-register-new deploy key logic around the existing source control swap, with try/catch + logging. |
| tests/Feature/SitesTest.php | Adds three tests for the new behavior; also reformats Http::fake calls and arrow-function spacing in existing tests. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+31
to
+43
| try { | ||
| if ($site->sourceControl && isset($site->type_data['deploy_key_id'])) { | ||
| $site->sourceControl->provider()->deleteDeployKey( | ||
| $site->type_data['deploy_key_id'], | ||
| $site->repository, | ||
| ); | ||
| } | ||
| } catch (Throwable $e) { | ||
| Log::warning('Failed to delete previous deploy key during source control update', [ | ||
| 'site' => $site->id, | ||
| 'error' => $e->getMessage(), | ||
| ]); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When a user updates the Source Control provider/token for an existing site (via Settings → Source Controls), the SSH deploy key is not automatically re-registered in the repository. This leads to Permission denied (publickey) errors during subsequent deployments.
This PR updates UpdateSourceControl.php to:
Changes:
Modified app/Actions/Site/UpdateSourceControl.php to include the logic for deleting the old key and creating the new one using the existing Site and SourceControl providers.
Verification: