Author SHA1 Message Date
Chris Tsang 7bd82853b7 Linux 2026-09-26 23:37:16 +01:00
VTracer Release Bot 9c382e22dd Publish desktop updater 1.0.0-alpha.4.app.188 2026-09-26 23:36:52 +01:00
VTracer Release Bot 86d6fbc1f5 Publish desktop updater 1.0.0-alpha.4.app.188 2026-09-26 23:36:15 +01:00
Chris Tsang 64ae1af938 Linux 2026-09-20 12:24:23 +01:00
VTracer Release Bot 78ea5b1bd4 Publish desktop updater 1.0.0-alpha.4.app.180 2026-09-20 12:23:36 +01:00
VTracer Release Bot 6cd73918ed Publish desktop updater 1.0.0-alpha.4.app.180 2026-09-20 12:22:56 +01:00
Chris Tsang c73c1c574d Linux 2026-09-17 19:37:45 +01:00
VTracer Release Bot 5f6c2169ed Publish desktop updater 1.0.0-alpha.4.app.173 2026-09-17 19:33:46 +01:00
VTracer Release Bot 04d520a31f Publish desktop updater 1.0.0-alpha.4.app.173 2026-09-17 19:27:24 +01:00
Chris Tsang 26c08d885b Windows 2026-09-16 11:21:50 +01:00
Chris Tsang d176da74a4 Linux 2026-09-16 00:14:17 +01:00
VTracer Release Bot 8bde21b7a6 Publish desktop updater 1.0.0-alpha.4.app.166 2026-09-16 00:13:39 +01:00
VTracer Release Bot d9345bde31 Publish desktop updater 1.0.0-alpha.4.app.166 2026-09-16 00:07:35 +01:00
Chris Tsang 262e65e283 Linux 2026-09-12 15:54:00 +01:00
VTracer Release Bot 7c3a13bb97 Publish desktop updater 1.0.0-alpha.4.app.161 2026-09-12 15:23:50 +01:00
VTracer Release Bot 183950eb55 Publish desktop updater 1.0.0-alpha.4.app.161 2026-09-12 15:23:12 +01:00
Chris Tsang 272866beb3 Linux 2026-09-09 22:32:49 +01:00
VTracer Release Bot 2bc01424cd Publish desktop updater 1.0.0-alpha.4.app.151 2026-09-09 22:32:04 +01:00
VTracer Release Bot f85b8f5813 Publish desktop updater 1.0.0-alpha.4.app.151 2026-09-09 22:10:40 +01:00
Chris Tsang aa0ae083e8 Linux 2026-09-09 17:28:49 +01:00
VTracer Release Bot 4aedd6d808 Publish desktop updater 1.0.0-alpha.4.app.148 2026-09-09 17:25:59 +01:00
VTracer Release Bot 1a4e5314b2 Publish desktop updater 1.0.0-alpha.4.app.148 2026-09-09 15:17:12 +01:00
Chris Tsang 642721e85e Linux 2026-09-09 11:10:39 +01:00
VTracer Release Bot a67cdebac4 Publish desktop updater 1.0.0-alpha.4.app.146 2026-09-09 11:08:32 +01:00
VTracer Release Bot fbbbbbaaae Publish desktop updater 1.0.0-alpha.4.app.146 2026-09-08 23:32:36 +01:00
VTracer Release Bot 5eb956aa2a Publish desktop updater 1.0.0-alpha.4.app.144 2026-09-08 22:42:12 +01:00
Chris Tsang d797c0c934 Linux 2026-09-08 21:57:35 +01:00
VTracer Release Bot a9355f03c0 Publish desktop updater 1.0.0-alpha.4.app.143 2026-09-08 21:56:16 +01:00
VTracer Release Bot e3e28b5170 Publish desktop updater 1.0.0-alpha.4.app.143 2026-09-08 21:55:50 +01:00
Chris Tsang 25fdc6f817 Linux 2026-09-07 12:02:20 +01:00
VTracer Release Bot f8c54afa18 Publish desktop updater 1.0.0-alpha.4.app.135 2026-09-07 11:56:07 +01:00
VTracer Release Bot adb5055f7b Publish desktop updater 1.0.0-alpha.4.app.135 2026-09-07 11:51:56 +01:00
Chris Tsang 0e17e64e51 Linux 2026-09-07 00:50:45 +01:00
VTracer Release Bot 870d5aef49 Publish desktop updater 1.0.0-alpha.4.app.133 2026-09-07 00:44:27 +01:00
VTracer Release Bot 015f7f5baa Publish desktop updater 1.0.0-alpha.4.app.133 2026-09-07 00:42:47 +01:00
Chris Tsang 04ceaff5ed Publish desktop updater 1.0.0-alpha.4.app.118 2026-08-31 22:55:22 +01:00
VTracer Release Bot 4b77efdaae Publish desktop updater 1.0.0-alpha.4.app.118 2026-08-31 22:54:26 +01:00
VTracer Release Bot a05158aedf Publish desktop updater 1.0.0-alpha.4.app.118 2026-08-31 22:40:15 +01:00
Chris Tsang 01833619be Publish desktop updater 1.0.0-alpha.4.app.116 2026-08-29 22:21:14 +01:00
VTracer Release Bot 15d6f3bbda Publish desktop updater 1.0.0-alpha.4.app.116 2026-08-29 22:18:11 +01:00
VTracer Release Bot 037003134d Publish desktop updater 1.0.0-alpha.4.app.116 2026-08-29 22:17:43 +01:00
VTracer Release Bot 142a2987cb Publish desktop updater 1.0.0-alpha.3.app.59 2026-08-14 17:39:52 +01:00
VTracer Release Bot 034ce42de0 Publish desktop updater 1.0.0-alpha.3.app.59 2026-08-14 17:36:46 +01:00
VTracer Release Bot f78c77be21 Publish desktop updater 1.0.0-alpha.3.app.59 2026-08-14 17:21:56 +01:00
VTracer Release Bot 65218f7f93 Publish desktop updater 1.0.0-alpha.3.app.59 2026-08-14 16:48:51 +01:00
VTracer Release Bot 657177bda1 Publish desktop updater 1.0.0-alpha.3.app.59 2026-08-14 16:45:39 +01:00
VTracer Release Bot cee28b09b8 Publish desktop updater 1.0.0-alpha.3.app.58 2026-08-14 16:09:18 +01:00
VTracer Release Bot 8ac000c213 Publish desktop updater 1.0.0-alpha.3 2026-08-13 16:39:28 +01:00
VTracer Release Bot f17908803d Publish desktop updater 1.0.0-alpha.3 2026-08-13 16:35:46 +01:00
VTracer Release Bot b17f3565c9 Publish desktop updater 1.0.0-alpha.3 2026-08-13 16:06:01 +01:00
VTracer Release Bot 2a82a81a27 Publish desktop updater 1.0.0-alpha.3 2026-08-13 16:05:29 +01:00
VTracer Release Bot dac83cdcf6 Publish desktop updater 1.0.0-alpha.3 2026-08-13 15:52:40 +01:00
VTracer Release Bot 14665d771f Publish desktop updater 1.0.0-alpha.3 2026-08-13 15:12:34 +01:00
VTracer Release Bot 71858aec47 Publish desktop updater 1.0.0-alpha.3 2026-08-13 15:05:55 +01:00
VTracer Release Bot 539354c4b2 Publish desktop updater 1.0.0-alpha.3 2026-08-13 14:51:20 +01:00
VTracer Release Bot 552bc1b8dd Publish desktop updater 1.0.0-alpha.3 2026-08-13 13:28:40 +01:00
VTracer Release Bot e8dce3b972 Publish desktop updater 1.0.0-alpha.3 2026-08-08 21:44:06 +01:00
VTracer Release Bot 8d5dd9bdc1 Publish desktop updater 1.0.0-alpha.3 2026-08-08 20:20:24 +01:00
VTracer Release Bot 71b7210525 Publish desktop updater 1.0.0-alpha.3 2026-08-07 11:33:21 +01:00
VTracer Release Bot 19d4e48cb2 Publish desktop updater 1.0.0-alpha.3 2026-08-02 01:31:23 +01:00
VTracer Release Bot daa866862b Publish desktop updater 1.0.0-alpha.3 2026-08-02 01:15:17 +01:00
3 changed files with 146 additions and 3 deletions
+3 -3
View File
@@ -8,11 +8,11 @@
</p> </p>
<h3> <h3>
<a href="https://www.visioncortex.org/vtracer-docs">Article</a> <a href="https://github.com/visioncortex/vtracer/releases">Releases</a>
<span> | </span> <span> | </span>
<a href="https://www.visioncortex.org/vtracer/">Web App</a> <a href="https://www.visioncortex.org/vtracer/">Web App</a>
<span> | </span> <span> | </span>
<a href="https://github.com/visioncortex/vtracer/releases">Download</a> <a href="https://github.com/visioncortex/vtracer/releases/download/1.0.0-alpha.3/VTracer_1.0.0-alpha.3_x64-setup.exe">Windows App</a>
</h3> </h3>
<p> <p>
@@ -46,7 +46,7 @@ VTracer is originally designed for processing high resolution scans of historic
Technical descriptions of the [tracing algorithm](https://www.visioncortex.org/vtracer-docs) and [clustering algorithm](https://www.visioncortex.org/impression-docs). Technical descriptions of the [tracing algorithm](https://www.visioncortex.org/vtracer-docs) and [clustering algorithm](https://www.visioncortex.org/impression-docs).
## Desktop App (coming soon) ## Desktop App
![screenshot](docs/images/desktop-app.png) ![screenshot](docs/images/desktop-app.png)
+19
View File
@@ -0,0 +1,19 @@
{
"version": "1.0.0-alpha.4.app.188",
"notes": "VTracer 1.0.0-alpha.4 - Build 188 (7d8094c1)",
"pub_date": "2026-09-26T22:36:52.224Z",
"platforms": {
"windows-x86_64": {
"url": "https://github.com/visioncortex/vtracer/releases/download/1.0.0-alpha.4/VTracer_1.0.0-alpha.4_x64-setup.exe",
"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSUENOK1VhM1NxTVdYbGZxOHgweFV0aHNya2t2bXNOQU90eHZpeVQ4WlFtdWd3eVR1T0tJcm5GSDhlcFhJK1VIRTdCaXZQUThvUGN2ZVhrNHpGN1h2VTRzdjJ1OExaRkFRPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzkwNDYyMTAyCWZpbGU6VlRyYWNlcl8xLjAuMC1hbHBoYS40LmFwcC4xODhfeDY0LXNldHVwLmV4ZQpRV3NEYWNGRjBHbms0SXVUYjJ3T1dsSE1jSkZ1QVdkTDR2NGdTV3JjQUJSdENKWVRwcFdna0lLMjFuY3ZCS1FwamJsRTIwdFpEL05pMUppbzkzb1REdz09Cg=="
},
"macos-universal": {
"url": "https://github.com/visioncortex/vtracer/releases/download/1.0.0-alpha.4/VTracer_1.0.0-alpha.4_universal.app.tar.gz",
"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSUENOK1VhM1NxTVJnVXhWaWpSUmNaODhES1VRcldBdEhnVks4akIxcHllaHZySG1MVE9vQTcwR1FyZVh3K2hDK1FkSjZEb0N1WmtJb2RUMDJMSjduVHV0Y2xjdG9GR0FvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzkwNDYyMDgwCWZpbGU6VlRyYWNlci5hcHAudGFyLmd6Ck1zMDJYNGUzM25PUTh6b2RKSk4yQ1Q5REdvUHdnRTRUOXhKdW5LSFVFR0x0dlk0Z2gvWU1adHFHVkk5UGJ1SHFyZGJPVk9HRnk5OEFJZU8yOUF1QkFRPT0K"
},
"linux-x86_64": {
"url": "https://github.com/visioncortex/vtracer/releases/download/1.0.0-alpha.4/VTracer_1.0.0-alpha.4_x64.AppImage",
"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSUENOK1VhM1NxTVcyazd3K2c4c1FFWFlCWXR5djMxbEFMWVdrTVNlSUNsN0RkcDhGeWxFZzNmQ2ZTYjFIcktLUmpvSU95VXVCWE9lbmxsLzZqREpLUHdCUWZBaCt1U3dZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg5MjI0Mzc1CWZpbGU6VlRyYWNlcl8xLjAuMC1hbHBoYS40LmFwcC4xNjNfYW1kNjQuQXBwSW1hZ2UKbnhFZGxscEFBakFqWlhqemVuZThEL3dhRHVyZW9GNE51Qmh2SUVZWTE3V2gzdlFRMjlrRkxIMjZRTlFRemttREt4Q0ZESVlvZ2tnQnFvOVBMY09kQkE9PQo="
}
}
}
+124
View File
@@ -0,0 +1,124 @@
#!/usr/bin/env bash
#
# Publish the current version of vtracer to every surface. Idempotent: each
# step is skipped if it is already done, so it is safe to re-run after a
# partial or interrupted release.
#
# Surfaces:
# - git push master, push tag (the tag push triggers the PyPI wheels)
# - crates.io vtracer, then vtracer-cli; and vtracer-bench (independent)
# - npm @visioncortex/vtracer
# - GitHub a release from the tag, marked latest (triggers the binaries)
#
# Prerequisites (all in your own shell — this cannot run in a sandbox):
# cargo login • npm login • gh auth login
# version already bumped + committed on master.
#
# Usage: ./scripts/publish.sh # confirm, then publish what's missing
# ./scripts/publish.sh --dry # checks + build/test only, no publish
#
set -euo pipefail
cd "$(dirname "$0")/.."
DRY=0
[ "${1:-}" = "--dry" ] && DRY=1
VERSION=$(grep -m1 '^version = ' Cargo.toml | sed -E 's/.*"([^"]+)".*/\1/')
TAG="$VERSION"
say() { printf '\n\033[1;36m==> %s\033[0m\n' "$*"; }
skip() { printf ' \033[2m· %s\033[0m\n' "$*"; }
# --- availability probes (used to skip already-done steps) -------------------
crate_published() { # crate, version
# crates.io rejects requests without a User-Agent (403), and `curl -f` hides
# that as an empty body — so the UA is mandatory or this never matches.
curl -fsS -H "User-Agent: vtracer-publish (github.com/visioncortex/vtracer)" \
"https://crates.io/api/v1/crates/$1/$2" 2>/dev/null | grep -q "\"num\":\"$2\""
}
npm_published() { # pkg@version
npm view "$1" version >/dev/null 2>&1
}
gh_release_exists() { gh release view "$1" >/dev/null 2>&1; }
say "Publishing vtracer $VERSION (dry-run: $DRY)"
# --- preconditions -----------------------------------------------------------
say "Checking preconditions"
[ "$(git rev-parse --abbrev-ref HEAD)" = master ] || { echo "!! not on master"; exit 1; }
[ -z "$(git status --porcelain --untracked-files=no)" ] || { echo "!! tracked files have uncommitted changes — commit first"; exit 1; }
for tool in cargo npm gh curl; do command -v "$tool" >/dev/null || { echo "!! missing: $tool"; exit 1; }; done
# The version we publish comes from Cargo.toml at HEAD; the tag only marks the
# release commit for CI, so it need not be at HEAD (a later commit such as this
# script is fine). Guard only against the genuinely wrong case: a tag whose own
# commit carries a different version than the one we're about to publish.
if git rev-parse "refs/tags/$TAG" >/dev/null 2>&1; then
tag_ver=$(git show "$TAG:Cargo.toml" 2>/dev/null | grep -m1 '^version = ' | sed -E 's/.*"([^"]+)".*/\1/')
[ "$tag_ver" = "$VERSION" ] || { echo "!! tag $TAG marks version $tag_ver, but HEAD is $VERSION"; exit 1; }
skip "tag $TAG already exists (marks $VERSION)"
fi
# --- build + test (always, even on --dry) ------------------------------------
say "Building + testing"
cargo test --workspace
cargo build --release -p vtracer-cli
( cd nodejs && npm run build )
if [ "$DRY" = 1 ]; then say "Dry run complete — checks passed, nothing published."; exit 0; fi
# --- confirm -----------------------------------------------------------------
printf '\nPublish vtracer %s (git, crates.io, npm, GitHub)? Steps already done are skipped. [y/N] ' "$VERSION"
read -r reply
[ "$reply" = y ] || [ "$reply" = Y ] || { echo "aborted."; exit 1; }
# --- 1. git: push master, then the tag (tag push triggers the PyPI wheels) ---
say "git: push master + tag"
git push origin master
git rev-parse "refs/tags/$TAG" >/dev/null 2>&1 || git tag "$TAG"
git push origin "$TAG"
# --- 2. crates.io: core first, then the CLI that depends on it ---------------
if crate_published vtracer "$VERSION"; then
skip "crates.io vtracer $VERSION already published"
else
say "crates.io: publishing vtracer"
cargo publish -p vtracer
printf ' waiting for the index'
until crate_published vtracer "$VERSION"; do printf '.'; sleep 10; done; echo
fi
if crate_published vtracer-cli "$VERSION"; then
skip "crates.io vtracer-cli $VERSION already published"
else
say "crates.io: publishing vtracer-cli"
cargo publish -p vtracer-cli
fi
# vtracer-bench depends only on registry crates (not vtracer), so order is free.
if crate_published vtracer-bench "$VERSION"; then
skip "crates.io vtracer-bench $VERSION already published"
else
say "crates.io: publishing vtracer-bench"
cargo publish -p vtracer-bench
fi
# --- 3. npm ------------------------------------------------------------------
# Published to the default `latest` tag, matching the earlier alpha releases.
# For a prerelease you may prefer: ( cd nodejs && npm publish --tag next )
if npm_published "@visioncortex/vtracer@$VERSION"; then
skip "npm @visioncortex/vtracer@$VERSION already published"
else
say "npm: publishing @visioncortex/vtracer"
( cd nodejs && npm publish )
fi
# --- 4. GitHub release (its creation triggers the binary build workflow) -----
if gh_release_exists "$TAG"; then
skip "GitHub release $TAG already exists"
else
say "GitHub: creating release $TAG"
NOTES=$(awk -v h="## $VERSION" 'index($0,h)==1{f=1;next} /^## /&&f{exit} f' CHANGELOG.md)
# --latest: mark as the latest release (gh would otherwise treat an -alpha
# tag as a prerelease and not promote it).
gh release create "$TAG" --latest --title "$TAG" --notes "${NOTES:-Release $VERSION}"
fi
say "Done. crates.io + npm up to date; PyPI wheels build from the tag; binaries build from the release."