chore(release): promote staging to production - #2904
Merged
Merged
Conversation
* feat(terraform): move variables to service variables tab * fix(terraform): align variables tab layout * fix(terraform): move save action outside variables panel * fix(terraform): refine variables tab integration * refactor(terraform): keep variables table styling flexible * chore(terraform): document variables action portal * fix(terraform): refine variables tab actions
…ed (#2901) * feat(services): improve delete flow when service has been been deployed * fix(services): handle uninstall errors without masking modal failures - Propagate confirmation modal deletion failures - Log errors from the post-close removal modal action * test(services): restore mocks after each service action test
* feat(envs): add bulk stop action Update stop confirmation modal * Add missing aria-labels to checkboxes * Add unit test * UI improvements * fix(envs): preserve checkbox focus on selection - Render environment sections directly to avoid remounts - Add regression coverage for checkbox focus * feat(envs): add success toast for bulk stop - Suppress per-environment success notifications during bulk stops - Show a single success toast after stopping selected environments - Add coverage for notification behavior * Fix unit test
* fix(blueprint): render every preview outcome instead of spinning forever What: The blueprint update preview now settles on an explicit outcome (pending / diff / no-changes / error / cancelled / timeout) instead of a raw output string plus three booleans. The hook matches all four BlueprintPreviewResult variants exhaustively, treats a diff with a blank payload as "no changes", surfaces the error frame's message, fails fast when the socket closes before any frame, and bounds the wait with a 12-minute watchdog. The step component renders one branch per outcome and gates "Confirm & deploy update" on a successful preview. Why: The websocket contract sends exactly one frame then closes, and it has four variants. The hook only handled `diff` and dropped `error`, `cancelled` and `timeout` through a catch-all, so the component — which keyed its render on whether the raw output string was non-empty — showed the loading skeleton forever in all three cases, and in the empty-diff case too. Confirm was gated on "a message arrived" rather than on the outcome, so it went live while the skeleton was still animating. A failed preview was therefore indistinguishable from one still running, and the user could deploy anyway. Notes: Verified by reproducing first: a temporary spec asserting the broken behaviour (skeleton rendered + Confirm enabled for error/cancelled/timeout and for an empty diff) passed against the unfixed code and fails against this change. The watchdog is 12min, deliberately above the gateway's own 11min limit, so the server's timeout frame wins in the normal case and the watchdog only catches a socket that dies without delivering anything. onOpen is gone: `pending` is now the initial state, so there was nothing left for it to set. This is the console half of a wider fix. The backend still needs two changes to make failures fast rather than merely visible: q-core's preview broker reads only `message.fullDetails` in its `Diff` branch, so engine errors — which arrive at step `Diff` with the text in `error.userLogMessage` — are skipped, and it ignores the engine's `Terminated` step, so a run that ends without a diff waits out the full 10-minute consumer timeout. Separately, the engine's DIFF path drops the resolved timeout and runs `terraform plan` unbounded. * fix(blueprint): center preview outcome messages and contain fake timers in specs What: The raw output container is now a flex column, and the no-changes and failure branches fill it with `flex-1` instead of `h-full`. The failure block carries `font-sans` on its wrapper instead of on the summary span alone. Both preview specs restore real timers in `afterEach` rather than on the last line of the fake-timer test. Why: `h-full` resolves a percentage height against the parent's height, and the container only sets `min-h-[180px]`, leaving its height `auto`. The percentage collapsed to the content height, so `justify-center` had no free space to work with: measured in Chromium, the child was 20px tall with 173px of dead space under it, top-aligning the message in the 180px band. Everything in the failure block except the summary line also inherited `font-mono` from the container. In the specs, `jest.useRealTimers()` sat after the final assertion, so a failing assertion would leave fake timers installed for every later test in the file. Notes: Verified in Chromium: the branch content is now 180px tall with symmetric 13px gaps. The diff branch is unaffected — its `pre` keeps its full height inside the fixed-height container and still scrolls, and its bottom padding is now honored, which flex scroll containers do and block ones truncate. --------- Co-authored-by: Rémi Bonnet <bonnet.rem@gmail.com> Co-authored-by: Rémi Bonnet <rbonnet@qovery.com>
* feat(billing): grant full product access during free trial Trial organizations no longer need a credit card to create managed clusters. Billing screens now surface an "Activate my plan" CTA that opens the Pylon ask-for-activation form, alongside the existing self-service credit card management. New organizations are created on the Business plan by default so trial access matches this scope. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(billing): display the org's real plan in the trial activation banner Now that new organizations are created on the Business plan by default, the billing details banner can read the actual plan again instead of hardcoding "Business plan". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(billing): address cubic review findings on PR #2902 - Always show "Activate my plan" during an active trial in billing summary, even when a credit card is already on file — "Cancel free trial" now renders alongside it instead of replacing it, since activation still requires a Qovery rep regardless of the card. - Align settings-billing-details' isInActiveFreeTrial with the same 90-day upper bound used by useClusterCreationRestriction. - Cover the "Activate my plan" click flow and the trial boundary in settings-billing-details tests. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(billing): mirror the 90-day trial cap in billing summary The previous fix aligned settings-billing-details' trial check with useClusterCreationRestriction's 90-day upper bound but left settings-billing-summary unbounded, so the two pages disagreed again for remaining_trial_day > 90. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * refactor(billing): extract the 90-day trial window into a shared util The remainingTrialDay > 0 && <= 90 check was duplicated in four places (both use-cluster-creation-restriction hooks, billing details, billing summary) and had already drifted twice across review rounds. Extracted TRIAL_MAX_DAY and isActiveFreeTrial() to @qovery/shared/util-js as the single source of truth. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Member
Author
|
🎉 This PR is included in version 1.343.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #2904 +/- ##
==========================================
- Coverage 49.29% 48.46% -0.84%
==========================================
Files 849 1272 +423
Lines 21194 27590 +6396
Branches 6443 8114 +1671
==========================================
+ Hits 10448 13372 +2924
- Misses 8932 11952 +3020
- Partials 1814 2266 +452
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
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.
Opens the production promotion path from staging to main. Merging this PR triggers semantic-release, then the existing production deployment workflow.
Do not squash this PR. Use a merge commit to preserve the original conventional commits for semantic-release.