Repository navigation
0.2.0
Release Notes
The first four changes below can change what an existing project sends or
requires; read them before upgrading.
Changed
- The server needs Python 3.7 or later. Ulak sends its helpers over SSH
without installing anything. A command that synchronizes stops before
sending anything if the server lackspython3;ulak doctorreports it. - A file edited on both ends is held as a conflict instead of last write
winning. Sync compares both copies with the content the two ends last
agreed on. A file changed on both is kept on both and named in a warning,
and a file deleted here is not deleted there if the server changed it.
Before there is agreed content,[sync] no_historydecides:send(the
default) sends this machine's copy and names each file it sent;hold
keeps both.ULAK_SYNC_NO_HISTORYsets it too. .gitignoreis no longer read, because Docker does not read it either.
Mounted directories sync whole except.git,.DS_Storeand Ulak's
temporary files; build contexts are still filtered by.dockerignore. Use
[sync] excludeto keep paths local;[sync] includeoverrides both.[sync]paths are relative to the Compose project directory, not to
the workspace anchor;../reaches a sibling. Projects whose anchor is the
project directory are unaffected.- Saves, deletions and small server output travel over one persistent SSH
channel; large files and new directories still use rsync. A full sync
compares both ends by directory digests and hands rsync only what differs.
On Linux servers with Python 3.9 or later, files the stack writes come back
shortly after they change. - Pulled files land through directories held open from the project root, so
a directory swapped for a symlink cannot redirect them. - The background service picks up
[sync]changes without a restart.
Added
ulak ui(beta): a full-screen terminal dashboard for the server's Docker.
It shows containers grouped by Compose project with live CPU and memory,
merged stack logs with search, inspect, stats, images, volumes, networks
and this machine's live stacks. Keys and layout may still change; see
docs/dashboard.md.ulak status,sync,doctorandcleantake a stack's Compose project
name and work from any directory;ulak statusalone shows every stack
declared in the checkout. Writename@serverwhen two servers have a stack
of that name; seedocs/stacks.md.--rawon those four commands prints suggested commands in full instead of
by stack name.
Fixed
- A file saved during a sync no longer becomes a permanent conflict: it is
sent as it is then, or, if it changes while being read, waits for the next
sync. - A directory a pull brings home keeps the server's mode, so later pushes no
longer fail on directories the SSH user does not own. - A profile that stays inside the project keeps the wider layout the
workspace already uses, instead of asking to run again on every run. - After a reinstall, the service warns that it is still running the build it
started from.
Install ulak 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/syy/ulak/releases/download/v0.2.0/ulak-installer.sh | shInstall prebuilt binaries via Homebrew
brew install syy/tap/ulakDownload ulak 0.2.0
| File | Platform | Checksum |
|---|---|---|
| ulak-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ulak-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| ulak-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ulak-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |