Skip to content

chore(release): promote staging to production - #2915

Merged
RemiBonnet merged 3 commits into
mainfrom
staging
Aug 28, 2026
Merged

chore(release): promote staging to production#2915
RemiBonnet merged 3 commits into
mainfrom
staging

Conversation

@RemiBonnet

@RemiBonnet RemiBonnet commented Aug 28, 2026

Copy link
Copy Markdown
Member

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.


Summary by cubic

Opens the production promotion path from staging to main. Merging this PR triggers semantic-release, then the existing production deployment workflow.

Use a merge commit, not squash, so the original conventional commits are preserved for semantic-release.

Includes

  • Agent task scheduling for agentic workflows.
  • Environment variables in the Terraform creation flow.
  • Blueprint prerelease (RC) tag handling in the service list and header.
  • qovery-typescript-axios bumped to 1.1.962.

Written for commit 1feda76. Summary will update on new commits.

Review in cubic

RemiBonnet and others added 3 commits August 27, 2026 16:52
* feat(agent-task): add workflow scheduling

* fix(agent-task): align schedule form states

* fix(agent-task): group schedule with service information
* feat(terraform): add environment variables to creation flow

* fix(terraform): make creation retries safe

* fix(terraform): resume creation from completed steps

* fix(terraform): reconcile creation retries

* fix(terraform): surface retry update errors

* fix(terraform): narrow service payload type

* fix(terraform): allow empty environment variables

* fix(terraform): align environment variables step

* fix(terraform): space environment variable sections

* fix(terraform): group environment variable heading

* fix(terraform): show creation progress

* fix(terraform): restore creation button feedback

* fix(terraform): rename summary variables section

* fix(terraform): skip empty variable import

* fix(job): allow empty creation variables

* fix(terraform): create environment variables directly

* fix(terraform): use shared variable import
* fix(blueprint): handle services pinned to an unpublished catalog tag

What:
Stop the service overview from being replaced by the generic error page when
the blueprint update check fails, and surface an orange "RC test" badge in the
services table "Target version" cell for services running a prerelease
blueprint version.

Why:
The service-catalog CI tags every pull request that touches a blueprint with a
throwaway prerelease `{PROVIDER}/{service}/{major}/{version}-pr{PR}.{sha}-rc`,
which is deliberately absent from catalog.json. `GET /blueprint/{id}/update` is
the only endpoint that reports a blueprint service's tag, and q-core answers
404 (`Catalog entry not found`) or 502 (`manifest not found`) for those tags.
react-query v4 makes a suspense query throw on error, and the overview header
had no boundary between it and the organization layout, so a single unresolved
tag blanked the whole page. The same failure left the table cell with no
version and no badge, giving no hint that the service runs a test build.

Notes:
- The badge keys off the tag only, never off the failure. A 404 also covers a
  released tag whose major has been retired from the catalog (HELM/redis/7),
  and flagging those as prereleases was wrong.
- When the update check cannot answer, a terraform blueprint's tag is still
  readable: the engine pins the generated service to it as its git branch
  (lib/blueprint/terraform/main.j2.tf). A helm blueprint's generated service
  has no git source and no other field carrying the tag, so a prerelease on a
  blueprint the catalog does not know at all goes unflagged there — it renders
  as it does today rather than guessing.
- The update badge is suppressed for prereleases: the pin is a throwaway, and
  "updating" it to the released tag is misleading. For the same reason a helm
  prerelease loses its "deploy another version" action — the tag is deleted
  when the pull request closes.
- `retry: false` on the update query: a catalog resolution failure is
  deterministic, and the retries delayed the overview's suspense fallback.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(blueprint): tighten prerelease detection and review follow-ups

What:
Match the full prerelease marker instead of the `-rc` ending, keep bounded
retries for non-404 update-check failures, make the RC badge reachable by
keyboard, and drop the "deploy another version" action on a helm blueprint
whose update check cannot answer.

Why:
Four issues raised in review, all confirmed:
- catalog-gen releases whatever version a manifest declares — its own comment
  spells out that `1.2.3-rc` is a legal release — so `endsWith('-rc')` would
  have replaced a published blueprint's update badge with the RC one. The CI
  marker is `-pr{PR}.{short_sha}-rc` (validate.yml), which is what now matches.
- `retry: false` applied to every failure, so a transient error dropped update
  data from the service list and pushed the suspense update flow straight to
  its error state. Only the deterministic 404 skips retries now.
- The badge is a span, so Radix had no focusable trigger and the explanation
  was mouse-only.
- A helm blueprint on a prerelease tag is undetectable when the update check
  404s (its generated service carries no tag anywhere), and it was still being
  offered "deploy another version" on a pin whose tag disappears with its pull
  request. The chart version now renders read-only in that state.

Notes:
- The read-only fallback is deliberately not limited to prereleases: from the
  console there is no way to tell one from a retired major, and withholding a
  version-changing action under that uncertainty beats guessing a label — the
  mistake the previous revision made.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(blueprint): stop the helm chart version waiting on the update check

What:
Render a helm blueprint service's chart version immediately again, and cut the
update check's retry to a single 500ms attempt instead of two exponential ones.

Why:
The "Target version" cell got noticeably slower for helm blueprint services.
Their chart version comes off the service payload and used to paint with the
list, but the prerelease check put a skeleton in front of it: every row waited
on `GET /blueprint/{id}/update`, which fetches catalog.json and two manifests
from GitHub before it answers. The check can only ever downgrade what the
console already knows, so it no longer gates the render — it swaps the badge in
once it answers, and the loading state disappears.

The retry made the other half of it: for a tag whose manifest is gone the API
answers 502, not 404, so the failure path took two retries at the default 1s/2s
backoff — about three seconds of skeleton before settling.

Notes:
- Helm blueprint rows still issue one update check each, which is new: it is the
  only way to recognise a prerelease there, since their generated service
  carries no tag. It is off the render path now, but on a list with many such
  services it is still N extra calls to a slow endpoint.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(blueprint): withhold the helm deploy action while the update check runs

What:
Treat the in-flight update check like a failed one in the helm blueprint
version slot: the chart version still renders immediately, but its "deploy
another version" action only appears once the check confirms the service is on
a published tag.

Why:
The slot only withheld the action on failure, so during the request a service
pinned to a prerelease still offered it. In flight the console knows exactly as
little as it does on failure, and this is not a brief window — the endpoint
reads catalog.json plus two manifests from GitHub before answering, and the pin
it may be about to reveal is a tag that disappears when its pull request
closes.

Notes:
- This does not bring back the delay fixed in the previous commit: the version
  is local data and still paints with the list. Only the action waits.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* refactor(blueprint): address naming and placement review points

What:
Rename the `useErrorBoundary` prop to `throwOnError`, move
`useBlueprintUpdateState` into its own folder under `hooks/`, and rename
`BlueprintHelmVersionSlot` to `BlueprintChartVersionSlot`.

Why:
- `use` is React's prefix for hooks, and the prop is not one. `throwOnError` is
  also what react-query calls the same option from v5 on, so the rename lines up
  with the eventual upgrade. It still maps to `useErrorBoundary` at the useQuery
  call, which is v4's name for it.
- The hook was declared inline in a cell component, where the repo keeps every
  other hook in `hooks/<name>/<name>.ts` and exports it from the lib index.
- "Helm" read as the catalog's `HELM/` provider directory, which is not what
  selects this path: q-core derives the service type from the manifest's engine
  spec (Blueprint.serviceTypeFrom), so a blueprint under any provider whose
  qbm.yml declares a helm engine produces a Helm service and lands here. The
  component renders a chart version, which is what its name now says, and the
  comment states the actual rule.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(blueprint): stop trusting a cached update check after it starts failing

What:
Drop the cached update response once the check errors, resolve the tag from the
service's own pinned branch in that state, and route the overview header
through the same hook instead of reading the query directly.

Why:
react-query keeps the last successful `data` when a refetch fails (query.js
reducer spreads state on 'error'), so a service kept answering from the tag it
used to be on. `update-service-rc` repoints a live service onto a prerelease
tag the catalog cannot resolve, which is exactly the case that then 404s on the
next background refetch: the stale `current_tag` masked the prerelease branch,
so the service under test showed no RC badge and kept an "Update available"
action pointing at a `latest_tag` computed for a tag it is no longer on.

Notes:
- The overview header had the same exposure through its own `useBlueprintUpdate`
  call. Sharing the hook keeps the rule in one place rather than repeating a
  subtle guard at each call site.
- The hook now returns the resolved tag, so the version keeps rendering off the
  pinned branch when the check cannot answer, instead of disappearing with the
  dropped response.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(blueprint): only read the pinned branch when it is shaped like a tag

What:
Add `isBlueprintTag` and gate the local-tag fallback on it, so a branch that is
not `{PROVIDER}/{service}/{major}/{version}` is ignored rather than read.

Why:
Both tag accessors are positional — `getBlueprintServiceVersion` takes the
second-to-last segment — so a three-segment branch such as `AWS/s3/1.2.3` would
have rendered `vs3`, and a plain branch name would have rendered the repository
owner. Wrong output is worse than none, and unlike `current_tag` the branch is
read off the service rather than handed over by an API that already validated
it. The shape checked here is the one q-core enforces before it will read a tag
at all.

Notes:
- This should not fire in practice: the engine writes the blueprint tag verbatim
  as the branch, q-core rejects any tag that is not four segments, and the
  console blocks editing the git source of a blueprint-backed service. The guard
  is for when one of those stops holding.
- It covers the list cell as well as the header — both resolve their tag through
  the same hook.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Rémi Bonnet <bonnet.rem@gmail.com>
Co-authored-by: Rémi Bonnet <rbonnet@qovery.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@RemiBonnet
RemiBonnet merged commit a6e9fb7 into main Aug 28, 2026
7 checks passed
@RemiBonnet

Copy link
Copy Markdown
Member Author

🎉 This PR is included in version 1.345.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

@codecov

codecov Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 36.22047% with 81 lines in your changes missing coverage. Please review.
✅ Project coverage is 48.49%. Comparing base (4064d1c) to head (1feda76).
⚠️ Report is 26 commits behind head on main.

Files with missing lines Patch % Lines
...raform-creation-flow/step-summary/step-summary.tsx 0.00% 42 Missing ⚠️
...vironment-variables/step-environment-variables.tsx 0.00% 19 Missing ⚠️
...ntic-workflow/agentic-workflow-schedule-fields.tsx 66.66% 2 Missing and 2 partials ⚠️
.../lib/flow-create-variable/flow-create-variable.tsx 33.33% 3 Missing and 1 partial ⚠️
...ic-workflow-settings/agentic-workflow-settings.tsx 75.00% 0 Missing and 3 partials ⚠️
...hooks/use-blueprint-update/use-blueprint-update.ts 0.00% 3 Missing ⚠️
...erraform-creation-flow/terraform-creation-flow.tsx 0.00% 2 Missing ⚠️
...w-configuration/agentic-workflow-configuration.tsx 0.00% 2 Missing ⚠️
...rm-creation-flow/step-variables/step-variables.tsx 0.00% 1 Missing ⚠️
...e-list/service-list-cells/service-version-cell.tsx 90.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2915      +/-   ##
==========================================
+ Coverage   46.70%   48.49%   +1.78%     
==========================================
  Files         507     1303     +796     
  Lines       13749    28117   +14368     
  Branches     4184     8215    +4031     
==========================================
+ Hits         6421    13634    +7213     
- Misses       6203    12187    +5984     
- Partials     1125     2296    +1171     
Flag Coverage Δ
unittests 48.49% <36.22%> (+1.78%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants