mirror of
https://github.com/visioncortex/vtracer.git
synced 2026-09-28 23:11:21 -07:00
Compare commits
64
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cd9b29c70 | ||
|
|
8e49f415af | ||
|
|
1ce4e06e72 | ||
|
|
7bd82853b7 | ||
|
|
9c382e22dd | ||
|
|
86d6fbc1f5 | ||
|
|
64ae1af938 | ||
|
|
78ea5b1bd4 | ||
|
|
6cd73918ed | ||
|
|
c73c1c574d | ||
|
|
5f6c2169ed | ||
|
|
04d520a31f | ||
|
|
26c08d885b | ||
|
|
d176da74a4 | ||
|
|
8bde21b7a6 | ||
|
|
d9345bde31 | ||
|
|
262e65e283 | ||
|
|
7c3a13bb97 | ||
|
|
183950eb55 | ||
|
|
272866beb3 | ||
|
|
2bc01424cd | ||
|
|
f85b8f5813 | ||
|
|
aa0ae083e8 | ||
|
|
4aedd6d808 | ||
|
|
1a4e5314b2 | ||
|
|
642721e85e | ||
|
|
a67cdebac4 | ||
|
|
fbbbbbaaae | ||
|
|
5eb956aa2a | ||
|
|
d797c0c934 | ||
|
|
a9355f03c0 | ||
|
|
e3e28b5170 | ||
|
|
25fdc6f817 | ||
|
|
f8c54afa18 | ||
|
|
adb5055f7b | ||
|
|
0e17e64e51 | ||
|
|
870d5aef49 | ||
|
|
015f7f5baa | ||
|
|
04ceaff5ed | ||
|
|
4b77efdaae | ||
|
|
a05158aedf | ||
|
|
01833619be | ||
|
|
15d6f3bbda | ||
|
|
037003134d | ||
|
|
142a2987cb | ||
|
|
034ce42de0 | ||
|
|
f78c77be21 | ||
|
|
65218f7f93 | ||
|
|
657177bda1 | ||
|
|
cee28b09b8 | ||
|
|
8ac000c213 | ||
|
|
f17908803d | ||
|
|
b17f3565c9 | ||
|
|
2a82a81a27 | ||
|
|
dac83cdcf6 | ||
|
|
14665d771f | ||
|
|
71858aec47 | ||
|
|
539354c4b2 | ||
|
|
552bc1b8dd | ||
|
|
e8dce3b972 | ||
|
|
8d5dd9bdc1 | ||
|
|
71b7210525 | ||
|
|
19d4e48cb2 | ||
|
|
daa866862b |
@@ -8,11 +8,11 @@
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
<a href="https://www.visioncortex.org/vtracer-docs">Article</a>
|
||||
<a href="https://github.com/visioncortex/vtracer/releases">Releases</a>
|
||||
<span> | </span>
|
||||
<a href="https://www.visioncortex.org/vtracer/">Web App</a>
|
||||
<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>
|
||||
|
||||
<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).
|
||||
|
||||
## Desktop App (coming soon)
|
||||
## Desktop App
|
||||
|
||||

|
||||
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"version": "1.0.0-alpha.4.app.197",
|
||||
"notes": "VTracer 1.0.0-alpha.4 - Build 197 (02f8e617)",
|
||||
"pub_date": "2026-09-28T22:17:31.953Z",
|
||||
"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": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSUENOK1VhM1NxTWRZR0hEQWptand0cERyRVlEbW1qV1F3LzlxNXZNSVBFUldmb2FoNGNpY3AzT29FeElNSmhla1NvcjZTVXZaR09qQzI3aW1HekQ2b0dwdzZ1RnJlL0FZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzkwNjMyNDc1CWZpbGU6VlRyYWNlcl8xLjAuMC1hbHBoYS40LmFwcC4xOTdfeDY0LXNldHVwLmV4ZQpXSG1ucGRON01kQzRNYk5RdktpMXE3bStPSHM5ZE9kK2NwY20zT0xnQklYQnI5cjcwYWsxSnhBNzdYOXVHM3Z5K0JUQ0c2VVlsT2RpOXhqU0N0WDRCUT09Cg=="
|
||||
},
|
||||
"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": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSUENOK1VhM1NxTWZvV1BvM1dYTWJXZXZxc3FqWDJ3cmRPbkZsMmhjWUtBUUM3N2R1TDhodDJwMVFSZmd4a2R4U0RDWHVVSUpSSzM3c3gvNzczN0V1dHREc2wzK2g1QVFZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzkwNjMxMTU0CWZpbGU6VlRyYWNlci5hcHAudGFyLmd6CjJtWWpVcUJFZWY5bk9TV1ZZckJnTzFzL3p6RWdxY2Uxbi9OcWt1a0g2U1YvWmZvTnIyemc4RCt0VjZBajBKY2gzQnZXMkREVVo0Mm9HU3FvM3NUVURRPT0K"
|
||||
},
|
||||
"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="
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+124
@@ -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."
|
||||
Reference in New Issue
Block a user