* feat(workflows): add COS upload functionality for release assets
- Implemented a new workflow to upload GitHub Release assets to COS.
- Updated existing workflows to trigger the upload process after release creation.
- Enhanced documentation within workflows to clarify asset handling and upload procedures.
* fix(workflows): update COS upload paths in workflows and scripts
- Changed asset upload paths in multiple workflow files to use the new format: `octop/release/<version>/`.
- Updated documentation comments to reflect the new upload structure for clarity.
- Adjusted the upload script to align with the updated path conventions.
* fix(workflows): upload to COS after skipped package jobs
GitHub skips a later reusable workflow when an earlier job in the chain was skipped, even if the release job succeeded. Attach-only desktop runs and FnOS native skips hit that path.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): pin the published coscli v1.0.9 checksum
The linux-amd64 asset hash no longer matches the value baked into the upload script, so COS uploads stop before any object is sent.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): upload release files to COS concurrently
A sequential coscli loop left each multi-hundred-megabyte package waiting on the previous one. Start every file at once and fail the job if any upload fails.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): stream coscli process logs during release upload
Process logs were disabled, so a running upload showed no throughput. Write one log per file and follow it on stdout.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): keep per-file coscli configs named .yaml
coscli rejects a config path that does not end in .yaml. Parallel uploads appended the package name after that suffix, so every file failed before transfer.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): keep Python wheel and sdist off COS
Those packages already go to PyPI and the GitHub Release. COS should only receive desktop installers and FnOS packages.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): read COS release settings from secrets
Reusable workflows only see secrets that callers pass explicitly. Bucket, region, and endpoint now travel with the existing COS credentials.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the Docker/native wizards on an account-only flow, fail native start
when 8089 never comes up, and vendor harness storage_errors so current
Octop can boot against PyPI harness 1.0.0.
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(release): add download links generation for GitHub releases
- Introduced a new script `release_download_links.py` to generate markdown for download links based on version tags.
- Updated the release workflow to append download links to the release notes if not already present.
* refactor(release): update download section headings and links for consistency
- Changed section titles in the release notes from Chinese to English for clarity.
- Updated download link labels in the `release_download_links.py` script to use English terms.
- Adjusted unit tests to reflect the updated headings in the download section.
Dispatching FnOS or develop-sync must fail the Release workflow when gh workflow
run fails, instead of continue-on-error hiding a missed cascade. Desktop package
attaches whenever release_tag is set, so a develop rebuild does not need a
second attach_from_run hop, and attach-only runs use a separate concurrency
group. Sync listens only to workflow_dispatch so it cannot double-fire.
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
The FnOS FPK workflow kept a stray env block when the rolling-release step was
removed, so GitHub rejected the whole file and Release's dispatch failed with
"'env' is already defined" — silently, because that job is continue-on-error.
CI also ran the full suite three times per release (release PR, main push, sync
PR) on identical trees. Drop the main push build, since PR checks already run on
the merge result, and skip the post-release sync PR, which is auto-merged before
its checks even start.
Release now passes the tag to the sync workflow so the branch is named after the
version instead of the constant "manual", which every release force-pushed over.
Co-authored-by: Cursor <cursoragent@cursor.com>
* ci: publish Docker to GHCR+Hub and auto-build FnOS after Release
Cascade FnOS FPK from Release (reuse GHCR image and release wheel), keep
Docker Hub sync, and fix workflow_dispatch version tags for Auto Tag.
Co-authored-by: Cursor <cursoragent@cursor.com>
* ci: cascade desktop package with release and tighten triggers
Stop running the six-platform desktop matrix on every branch push.
Auto Tag dispatches Octop Desktop alongside Release and Docker so
artifacts attach to the same v* GitHub Release.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Bring v0.9.18 version files/CHANGELOG from main; resolve uv.lock.
Also fix Release sync-develop to pass --repo so gh works without checkout.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): trigger Sync Main Into Develop via workflow_run
GITHUB_TOKEN-created GitHub Releases do not fire sibling release workflows.
Listen for Release workflow completion instead, and allow manual dispatch.
* chore: release 0.9.17 (#120)
* fix: align sync paths with main and keep Release→Sync dispatch
---------
Auto Tag starts Release with GITHUB_TOKEN workflow_dispatch; in that
chain, workflow_run and release:published never started Sync. Cascade
explicitly after GitHub Release is created.
GITHUB_TOKEN tag pushes do not cascade to other workflows. After
pushing v*, explicitly workflow_dispatch Release and Docker Publish.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: tolerate connector kind drift when resolving chat popup logos
getConnectorLogo now falls back to a normalized kind (lower-case,\nunderscore/hyphen unified) so connector instances created before the\ncatalog kind was finalized still resolve their logo in the chat picker\ninstead of showing a placeholder.
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
* chore: release 0.9.8
* fix: align dashboard tool labels with backend; bump harness-agent to 0.9.8
---------
Co-authored-by: jubaoliang <jubaoliang@tencent.com>