Building LlamaTree

How to build, run, test, package and release LlamaTree from source, and how the app is put together. This page is for people working on LlamaTree itself; to install and use it, start with Getting started.

Building

cd web; npm ci; cd ..                                   # once: xterm.js + Monaco
dotnet run --project src\LlamaTree -f net10.0-windows   # the Windows app
dotnet test                                             # tests

On macOS and Linux:

(cd web && npm ci)                  # once: xterm.js + Monaco
dotnet run --project src/LlamaTree
dotnet test

macOS and Linux

Run from source as above; GitHub Actions also builds and tests every push on Windows, Linux and macOS and keeps a self-contained build of each (LlamaTree-osx-arm64, -osx-x64, -linux-x64) on the run for two weeks. Releases carry Linux packages (see Linux), made by tools/package-linux.cs from publish.ps1 (on Windows, with no Linux tools); there's no macOS app bundle yet, and a macOS copy doesn't update itself: Check for updates says when a new version is out and links its release.

Installer

winget install JRSoftware.InnoSetup   # once
.\publish.ps1                         # -> artifacts\LlamaTree-Setup-<version>.exe
.\publish.ps1 -SkipInstaller          # -> artifacts\publish\ (portable folder only)

Releasing

Signed releases are built by azure-pipelines.yml on the Azure DevOps agent with the company's code signing token:

  1. Bump <Version> in LlamaTree.csproj and merge to main.
  2. In Azure DevOps, run the pipeline on main (or on a tag v<version>) with Create the GitHub release ticked. Untick it for a trial run that only builds and signs, keeping the installer on the run's Artifacts.
  3. The pipeline runs publish.ps1 -Sign, which signs LlamaTree.exe/.dll, setup and its uninstaller as Llamachant Technology Ltd (picked from the certificate store by subject, as the NuGet signing does), timestamps them with Sectigo's server, and fails unless each carries a valid, timestamped signature from that publisher. It then creates a draft GitHub release with the installer, the Linux packages and the two install scripts from tools/install (which the one-line installs fetch from the latest release, so keep their names).
  4. Write the release notes on the draft and publish it: that's what makes the in-app updater offer the new version. The updater shows everything above the notes' Install heading, and needs the installer named LlamaTree-Setup-<version>.exe on a v<version> tag (Linux copies update from the .deb, .rpm and .tar.gz under the names publish.ps1 gives them).

This page is docs/building.md from LlamaTree v1.3.0. Spotted a mistake? Edit it on GitHub.