Deploy: sync live web build + refuse to deploy an uncommitted dist/ - #53
Merged
Conversation
Co-Authored-By: Claude <noreply@anthropic.com>
The FTP mirror pushes whatever is on disk, so an uncommitted build was silently putting the live site ahead of git (main pointed at the old assets/index-CqRheZeQ.js while the web served index-BZ-fNYow.js). deploy_ftp.py now verifies dist/ is clean against HEAD and refuses to upload otherwise, keeping the deployed artifact reproducible from the repo. --allow-dirty remains as an explicit emergency override. Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
Greptile SummaryThis PR synchronizes the committed web build with the deployed site and strengthens FTP deployment validation so every uploaded artifact must exist at HEAD.
Confidence Score: 5/5The PR appears safe to merge. The previously reported ignored-artifact bypass is closed because every local upload path must now exist at HEAD before FTP activity begins, and no blocking failure remains. Important Files Changed
|
Uncommitted dependency bump that shipped inside the deployed bundle; fold it in so the repo fully reproduces the live build. Co-Authored-By: Claude <noreply@anthropic.com>
The FTP uploader ships whatever is on disk, but git ignores dist/assets/. A new content-hashed bundle there never appears in the porcelain status, so the previous status-only check passed clean while the uncommitted file still went over FTP. The guard now requires every file it will upload to exist at HEAD, closing the gap between the filesystem artifact set and the committed one. Co-Authored-By: Claude <noreply@anthropic.com>
Owner
Author
The widget conformance rules ran only in validateBundleCompatibility, whose findings land in bundle.metadata.compatibility - a presentation surface. Every deploy path gates on validateFileMap -> validateDartFile, which never saw them, so a widget with `required this.value` was labelled BLOCKING in the review and deployed anyway. The sibling rules added alongside these - the CustomAction return type and the CodeFile name match - are wired into both places. The widget rules only got the review half. Adds getBlockingWidgetErrors() and calls it from validateDartFile for CodeType.WIDGET, so all three deploy paths refuse the file. Errors only: asset-without-anchor stays a warning and still deploys, since a broken image path is a defect on device, not a file the project cannot compile. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
What
Two commits that get the repo back in agreement with the live site and stop the drift from recurring.
build: rebuild dist to match deployed customcode.connectio.com.au— the deployed bundle (assets/index-BZ-fNYow.js) was sitting in the working tree uncommitted whilemainstill pointed atassets/index-CqRheZeQ.js.mainno longer reproduced what's actually live. This lands the deployeddist/(index.html+ the forced-add of the current hashed bundle, per the existing convention).fix: refuse to deploy an uncommitted dist/—scripts/deploy_ftp.pynow checksgit status --porcelain -- dist/and refuses to upload if the build isn't committed, so the web can never drift ahead of git again.--allow-dirtyremains as an explicit emergency override.Why it happened
The FTP mirror pushes whatever is in the on-disk
dist/— git is not involved. A build + deploy with no intervening commit put the live site ahead of the repo. Verified live:customcode.connectio.com.auservesindex-BZ-fNYow.jswith SHA-2561f3a4fe9…cf0516, identical to the committed build.Verified
dist/(exit 1, no upload) and passes with--allow-dirty.Note:
package.json/package-lockcarry an uncommittedposthog-js^1.353.0 → ^1.415.7bump unrelated to this change — left out deliberately; decide separately.🤖 Generated with Claude Code