Skip to content

ci(release): publish desktop releases directly to OSS - #971

Merged
tonyfettes merged 4 commits into
mainfrom
codex/publish-desktop-releases-via-oss
Aug 21, 2026
Merged

ci(release): publish desktop releases directly to OSS#971
tonyfettes merged 4 commits into
mainfrom
codex/publish-desktop-releases-via-oss

Conversation

@tonyfettes

@tonyfettes tonyfettes commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • upload the versioned ZIP, DMG, and Browser archive directly to OSS; upload only the Browser archive to openseek-api for same-origin /console/
  • send artifact filenames and SHA-256 digests to POST /desktop/releases/:version/publish; openseek-api generates and atomically replaces its own latest.json
  • keep /desktop/releases/latest.json on openseek-api and keep OSS limited to versioned artifacts, with no OSS manifest objects
  • allow provisional OSS artifacts to be replaced before API publication, then reuse the published bytes on a retry

Validation

  • bash -n desktop/scripts/publish-release.sh
  • shellcheck desktop/scripts/publish-release.sh
  • git diff --check
  • moon -C desktop fmt
  • moon -C desktop info
  • just check

@tonyfettes
tonyfettes marked this pull request as ready for review August 21, 2026 15:52

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bfa41c373e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/scripts/publish-release.sh Outdated
Comment on lines +70 to +74
ossutil cp --ignore-existing --region "$oss_region" \
--content-type "$content_type" \
--cache-control "public, max-age=31536000, immutable" \
--metadata "sha256=$local_sha" \
"$artifact" "$oss_destination"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve retryability before making version objects immutable

In the scheduled release-macos workflow, a failure after any artifact is uploaded but before latest.json is replaced causes the next run to rebuild the same version, because the version is still derived from the unchanged latest manifest. Those rebuilt artifacts are not byte-identical—most clearly, the browser tarball records fresh build timestamps—so --ignore-existing keeps the first run's object and the subsequent metadata comparison rejects the new local SHA. A transient failure late in publishing can therefore wedge every retry of that release version; reuse the original artifacts or permit replacement until the version manifest is published.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bde9559910

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/scripts/publish-release.sh Outdated
echo " to $oss_destination"
ossutil cp --force --region "$oss_region" \
--content-type "$content_type" \
--cache-control "public, max-age=31536000, immutable" \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Avoid immutable caching before sealing artifacts

When a run fails after an artifact is verified but before manifest.json is created, the verification request has already populated the CDN with the first upload under a one-year immutable cache policy. A retry's ossutil cp --force replaces only the OSS origin object, so the subsequent HEAD request can keep returning the cached old SHA and fail against the nondeterministic rebuild until the cache expires. Fresh evidence in this revision is that the new overwrite-based retry path still assigns provisional objects max-age=31536000, immutable; keep them uncached or publish each attempt under a unique URL until the manifest seals the bytes.

Useful? React with 👍 / 👎.

Comment thread .github/workflows/desktop-release.yml Outdated
Comment on lines +121 to +122
curl -fsSL "$OPENSEEK_RELEASES_ORIGIN/latest.json" 2>/dev/null ||
curl -fsSL "$OPENSEEK_API_ORIGIN/desktop/releases/latest.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject canonical-manifest outages after migration

After the first OSS publication, this script no longer updates the API-owned latest.json, so falling back on every CDN read failure can select a permanently stale pre-migration version. If the CDN recovers while the lengthy build is running, publish-release.sh finds that old version already sealed, republishes its old artifacts, and the workflow succeeds; the release-needed job then records the new head SHA as released and will not retry it. Restrict the migration fallback to a definitive missing-object response, rather than DNS, timeout, or 5xx failures.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 36dd8dceac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/scripts/publish-release.sh
@tonyfettes
tonyfettes force-pushed the codex/publish-desktop-releases-via-oss branch from 36dd8dc to 4c39054 Compare August 21, 2026 17:35
@tonyfettes
tonyfettes merged commit 965a0d6 into main Aug 21, 2026
4 checks passed
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.

1 participant