Skip to content

v1.0.0 — Initial release

Latest

Choose a tag to compare

@gmpassos gmpassos released this 16 Aug 06:47
2fe2dc6

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 injected Clock,
    IdGenerator and Logger, 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 OmnyStoreException hierarchy with stable error codes, structured
    details, and reconstruction from the wire.

Storage

  • ObjectStorage port 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/v1 plus an
    unversioned /health, CORS, ranged downloads with 206, redirect-or-stream
    artifact serving, optional TLS, and the node endpoint — all on one port.
  • OmnyStoreClient: web-compatible (no dart:io), rebuilding the server's
    typed exceptions from the error envelope.
  • UpdateChecker with change-only polling; DownloadManager with resume,
    retry and mandatory checksum verification.
  • omnystore CLI: server, node, org, project, package, release, asset,
    download, check-update and providers — against a remote server or a local
    directory, with --json output 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 installer
  • Platforms.current reports this process's os-arch token, and both
    download and check-update default 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.
  • --platform takes one target, a list, or all for 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.
  • AssetKinds is the single vocabulary for installer, archive,
    checksums, signature and sbom, read by both the update service and the
    CLI's --kind filter — 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
    OmnyStoreApi implementations, AWS's published SigV4 vectors, and real RSA
    signature verification.

Requirements

Dart SDK ^3.10.9. Apache 2.0.