1 comment

[ 3.0 ms ] story [ 9.4 ms ] thread
publishing of one package is kinda easy, but still there are many questions for example if package already exists in the registry or hosted? package changed and needs publishing? package published or failed to do it? it becomes much more complex dealing with polyrepos and usually ends up using monorepo

so publishing becomes independent writes across registries and the only way to handle it is saga. the only record of publish - git tag. like this we can have whole model, we know when which packages changed, which need catch up, next version, whole versioning and releasing planning becomes deterministic since release is a pure function, so commiting and re running itself is a idempotent transaction legs execution.

i built dispat, this saga orchestrator, monorepo, solorepo, polyrepo - you choose any stack, any language, any cache, dispat chooses nothings but gives math guarantees, handles tags versioning and changelogs, locks releases using only git, no other state db clocks etc. handles commits and conflicts in mid release

the gif illustrates the concepts flow

this tool also lets you mange pre releases, run lint/test etc only on changed modules, its a polyglot tools that already works with 21 ecosystems (36 manifests types supported to write versions and read dependencies graph) dont worry about releasing focus only on development and release without leaving git

works with aqua cli and supports its manifests

the tool uses itself for releases (since first rc it builds dev build from checkout to release it self), and even first rc single job run released:

6 go packages (manifest, scanner, writer - standalone go lighweight pkg family for manifests reading/writing, ccme - parse my custom conventional commits monorepo extenstion parser, cli package and models available as standalone libraries as well) everything with updated go mods as go exptects with graph dependencies

6 cli binaries, linux, windows, mac, arm/amd64

8 docker images, ubuntu, debian, alpine, dind arm/amd64

npm package deployed to github pages to serve docs

everything with its own semver grouped versions, changelogs and github releases

now it also includes terraform without cache that automatically re applies if needed before docs site release, version spec files etc

docs: https://dispat.dev github: https://github.com/yohimik/dispat

as a standalone tool - crier render images, gifs and videos from html templates without chrome, only sinlge 30mb go binary and fanout publish to different social media using public apis. main use case - automated fancy release social media notification https://github.com/yohimik/crier

all open source, binaries mit licensed