Releases: OmnyGrid/omnystore
Releases · OmnyGrid/omnystore
Release list
v1.0.0 — Initial release
A complete release management and software distribution platform in pure Dart —
a lightweight GitHub Releases or Artifactory you can embed, run as a server, or
federate across nodes.
final store = OmnyStore(/* repositories, storage, clock, ids */);
final release = await store.publishRelease(
packageReference: 'omnyagent',
version: Version.parse('1.4.0'),
);
await store.attachAsset(
releaseId: release.id,
name: 'omnyagent-macos-arm64.tar.gz',
data: file.openRead(),
platform: 'macos-arm64',
);
final update = await store.checkForUpdates(
packageReference: 'omnyagent',
currentVersion: Version.parse('1.3.0'),
platform: Platforms.current,
);Core SDK
- Immutable, JSON-serialisable models with value equality:
Organization,
Project,Package,Release,Asset,DownloadRecord,DownloadStats,
AssetLocation,ProviderDescriptor,UpdateInfo. ReleaseChannel(dev/beta/release) derived from a version's
pre-release tag, with inclusive-downward stability ordering.OmnyStore: the full lifecycle — create, publish, attach, promote, yank,
delete, download, record, check for updates — with injectedClock,
IdGeneratorandLogger, and no global state.OmnyStoreApi: one contract implemented by the embedded store, the
federating hub and the HTTP client, so code moves between them unchanged.- Sealed
OmnyStoreExceptionhierarchy with stable error codes, structured
details, and reconstruction from the wire.
Storage
ObjectStorageport with four adapters: in-memory, local directory (atomic
writes, checksum sidecars, incomplete-upload sweeping), AWS S3 (and any
S3-compatible service) with SigV4 presigning, and Google Cloud Storage with
V4 signing from a service-account key.- Seven repository ports with in-memory and write-through JSON-file adapters.
- SHA-256 computed while streaming on every upload, verified on download. An
update system that hands a client bytes it cannot verify is a malware
delivery channel waiting to happen, so the digest is not optional.
Hub and nodes
OmnyStoreHub: organization-to-provider routing, aggregation with
natural-key deduplication, and explicit, verified, idempotent replication.OmnyStoreNode: a storage provider that dials a hub outbound, so it works
behind NAT. It serves several organizations, and an organization may be
served by several nodes.- Three data planes — presigned, direct redirect, and a chunked relay over the
control channel — chosen from what each provider can actually do. - Node admission policy and protocol-version checking.
Server, client and CLI
- REST API on OmnyHub:
/api/v1plus an
unversioned/health, CORS, ranged downloads with206, redirect-or-stream
artifact serving, optional TLS, and the node endpoint — all on one port. OmnyStoreClient: web-compatible (nodart:io), rebuilding the server's
typed exceptions from the error envelope.UpdateCheckerwith change-only polling;DownloadManagerwith resume,
retry and mandatory checksum verification.omnystoreCLI: server, node, org, project, package, release, asset,
download, check-update and providers — against a remote server or a local
directory, with--jsonoutput and meaningful exit codes.
Multi-architecture releases
One release carries builds for as many platforms as you publish, and clients
get their own:
omnystore release publish --package omnyagent --version 1.4.0 \
--asset build/agent.dmg:macos-arm64:installer \
--asset build/agent.tar.gz:macos-arm64:archive \
--asset build/agent-linux-x64.tar.gz:linux-x64
omnystore download --package omnyagent # this machine
omnystore download --package omnyagent --platform linux-x64,macos-arm64
omnystore download --package omnyagent --platform all -o dist/
omnystore download --package omnyagent --kind installerPlatforms.currentreports this process'sos-archtoken, and both
downloadandcheck-updatedefault to it — so an artifact is fetched for
the machine asking, never for another architecture. Aliases other toolchains
use (darwin-x86_64) resolve to the same artifact.--platformtakes one target, a list, orallfor a whole release bundle.
Every selection is resolved before the first byte is fetched, so a typo in
the third of four platforms fails immediately instead of leaving half a
bundle on disk. Each artifact is checksum-verified individually.AssetKindsis the single vocabulary forinstaller,archive,
checksums,signatureandsbom, read by both the update service and the
CLI's--kindfilter — so neither can offer a signature file as the thing
to install.
Documentation and tests
- Twenty runnable examples, an architecture overview, and REST, CLI, client,
federation, storage and workflow guides. - 785 tests at 88.6% line coverage: unit, integration over real sockets, the
federation protocol end to end, one conformance suite run against all four
OmnyStoreApiimplementations, AWS's published SigV4 vectors, and real RSA
signature verification.
Requirements
Dart SDK ^3.10.9. Apache 2.0.