Skip to content

feat: TOS release upload + GitHub-free install path for memory plugins#2575

Merged
ZaynJarvis merged 5 commits into
volcengine:mainfrom
t0saki:feat/release-tos-upload
Jun 15, 2026
Merged

feat: TOS release upload + GitHub-free install path for memory plugins#2575
ZaynJarvis merged 5 commits into
volcengine:mainfrom
t0saki:feat/release-tos-upload

Conversation

@t0saki

@t0saki t0saki commented Jun 12, 2026

Copy link
Copy Markdown
Collaborator

Description

Two related changes that together give users behind the GFW a stable, GitHub-free way to install the memory plugins.

  1. Release → TOS upload (release-tos.yml): on every published GitHub Release, upload the source zip and both plugins' installers to Volcengine TOS (bucket ovrelease), so users who can't reach raw.githubusercontent.com have a China-reachable mirror — same way the repo already serves cli/install.sh.
  2. GitHub-free install path: the existing one-liner installers stall at their step-3 git clone github.com/.... Both install.sh now accept OPENVIKING_REPO_ARCHIVE_URL (fetch the source from a zip instead of cloning), and a per-plugin tos-install.sh bootstrap wires the TOS mirror so the whole flow runs without GitHub.

China one-liners:

bash <(curl -fsSL https://ovrelease.tos-cn-beijing.volces.com/claude-code-memory-plugin/tos-install.sh)
bash <(curl -fsSL https://ovrelease.tos-cn-beijing.volces.com/codex-memory-plugin/tos-install.sh)

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test update

Changes Made

  • New workflow .github/workflows/release-tos.yml (20. Release TOS Upload): triggers on release: published (skips cli* tags) or manual dispatch with a tag input for backfills. Reuses the existing TOS_ACCESS_KEY / _SECRET_KEY / _REGION / _ENDPOINT secrets plus a new TOS_RELEASE_BUCKET. Uploads to versioned releases/<tag>/ (immutable) and stable root paths (no-cache); the stable zip is a server-side CopyObject from the versioned key rather than a second cross-border upload. Missing secrets skip gracefully (fork-friendly); real upload errors fail the run.
  • Both setup-helper/install.sh learn OPENVIKING_REPO_ARCHIVE_URL: when set, step 3 fetches + unzips the source instead of git clone. A .openviking-archive-source marker keeps re-runs idempotent and refuses to clobber a git checkout or unrelated data at REPO_DIR. The GitHub default path is unchanged.
  • New setup-helper/tos-install.sh per plugin: defaults the archive URL to the TOS latest zip, downloads the real install.sh to a temp file (off the stdin pipe, so prompts stay interactive), and delegates. OPENVIKING_TOS_BASE overrides the mirror.

Testing

  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have tested this on the following platforms:
    • Linux (workflow on GitHub-hosted runner)
    • macOS (installers + bootstrap)
    • Windows

actionlint clean. The workflow was exercised on this repo via a temporary branch-scoped push trigger (only 20. Release TOS Upload fired — no other workflows, no tags created): it checked out the branch tip, built the zip, and uploaded the source zip + both install.sh + both tos-install.sh to TOS, with the server-side copy for the stable zip.

Real end-to-end, against live TOS with zero GitHub access (sandboxed env -i + temp HOME, no claude/codex on PATH):

  • bash <(curl -fsSL .../claude-code-memory-plugin/tos-install.sh) → downloads the installer + source zip from TOS, lays out the tree (sentinel present, .git absent), adds the rc source-hook, preserves existing ovcli.conf. Idempotent on re-run; a pre-existing non-sentinel REPO_DIR is refused with its contents intact.
  • bash <(curl -fsSL .../codex-memory-plugin/tos-install.sh) → same source path, then builds the marketplace + plugin cache, sets enabled = true + plugin_hooks = true in config.toml, and renders the /mcp URL into .mcp.json.

Checklist

  • My code follows the project's coding style
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Additional Notes

Requires a TOS_RELEASE_BUCKET repo secret (already configured = ovrelease). Updating the README / docs one-liners to point at the TOS bootstrap is intentionally a follow-up, once the path has run through a real release. wrapper.sh and friends are not uploaded separately — they ship inside the source zip.

t0saki added 2 commits June 11, 2026 11:47
Add a standalone workflow (20. Release TOS Upload) that runs on release
publish (or manual dispatch with a tag for backfill) and uploads:

- the source archive to releases/<tag>/ and releases/latest/
- both memory-plugin install.sh scripts to versioned paths and to
  stable root paths for a China-reachable one-liner URL

Reuses the existing TOS secrets (AK/SK/region/endpoint) with a new
TOS_RELEASE_BUCKET secret so release artifacts stay out of the docs
bucket. Missing secrets skip gracefully (fork-friendly); real upload
failures fail the workflow.
@github-actions

Copy link
Copy Markdown

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 1 🔵⚪⚪⚪⚪
🏅 Score: 95
🧪 No relevant tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ No major issues detected

@github-actions

Copy link
Copy Markdown

PR Code Suggestions ✨

No code suggestions found for the PR.

Domestic users can't reach github.com / raw.githubusercontent.com, so the
existing one-liner installers stall at their step-3 `git clone`. Add a
GitHub-free path that sources everything from Volcengine TOS:

- Both install.sh learn OPENVIKING_REPO_ARCHIVE_URL: when set, fetch the
  source from a zip (curl + unzip) instead of git clone. A
  .openviking-archive-source marker makes re-runs idempotent and refuses
  to clobber a git checkout or unrelated data at REPO_DIR.
- New setup-helper/tos-install.sh bootstrap per plugin: sets the TOS
  archive URL, downloads the real install.sh from TOS to a temp file
  (kept off the stdin pipe so prompts stay interactive), and delegates.
- release-tos.yml uploads both tos-install.sh alongside install.sh.

One-liner for users behind the GFW:
  bash <(curl -fsSL https://ovrelease.tos-cn-beijing.volces.com/claude-code-memory-plugin/tos-install.sh)

The GitHub default path is unchanged; archive mode only activates when
OPENVIKING_REPO_ARCHIVE_URL is set.
@t0saki t0saki changed the title ci: upload source zip and plugin installers to TOS on release feat: TOS release upload + GitHub-free install path for memory plugins Jun 15, 2026
t0saki added 2 commits June 15, 2026 13:33
Main agent-integration docs (zh/en, claude-code + codex) keep the GitHub
one-liner and add the TOS equivalent for regions where GitHub is hard to
reach. The CDN integration cards switch their install one-liner to the TOS
bootstrap only, since that gallery is served where GitHub raw is unreliable.

@ZaynJarvis ZaynJarvis left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

@ZaynJarvis ZaynJarvis merged commit aca58bf into volcengine:main Jun 15, 2026
7 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in OpenViking project Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants