Skip to main content

Getting started

Install a binary for your runner's operating system and architecture from Releases, and put stemma (stemma.exe on Windows) on your PATH. To use the current source checkout, see development.

A catalog repository can pin the release with Mise instead, so local runs and CI install the same verified binary:

mise use github:woodleighschool/stemma
mise lock

Commit the Mise configuration and mise.lock.

The runner is the computer executing Stemma. It can prepare software for a different operating system; see runtime requirements.

Create a catalog​

Our catalog is a starting point with software definitions and plugins. See starting a catalog for its structure, or create a minimal one below.

This walkthrough prepares Chrome for a local Munki repository. It needs no service credentials and does not install Chrome on the runner. For Windows and Intune, use the same command sequence with the Intune example.

Create a directory and initialise Git:

mkdir my-catalog
cd my-catalog
git init
mkdir software

Save this as stemma.yaml:

apiVersion: stemma/v1alpha1
kind: Project
metadata:
name: my-catalog
spec:
imports:
- software/**/*.yaml
destinations:
munki:
operation: munki
config:
path: munki-repo

Save this as software/chrome.yaml:

apiVersion: stemma/v1alpha1
kind: MacSoftware
metadata:
name: chrome
spec:
source:
url: https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg
application:
bundle_id: com.google.Chrome
destinations:
munki:
pkginfo:
catalogs:
- testing
description: Google Chrome.

Add munki-repo/ to .gitignore; it will contain this walkthrough's published repository. Downloads and prepared artifacts use the system's user cache directory by default. See cache and offline runs for inspection and overrides.

Prepare and review​

Run from the catalog:

stemma validate
stemma update
git diff -- stemma.lock
stemma prepare
stemma plan

validate checks the documents and operation contracts without credentials or downloads. update downloads the installer and writes its lock document under stemma.lock/. A new document is untracked: open it directly as well as checking git status. prepare builds what the lock pins and inspects it.

plan reads the destination and reports the changes it would make. It can fetch locked inputs into an empty cache, but does not write to the destination. It is the dry run.

The selected bundle supplies application metadata. You do not need to repeat its version and bundle identifier as separate extraction steps.

Commit stemma.yaml, software/ and stemma.lock/ when the inputs are right.

Publish​

stemma apply

For this example, publication writes pkginfo, installer content and catalogs under munki-repo/. It does not enrol or target a device. Publishing to an existing repository can affect clients already using it; destination configuration defines that behaviour.

Run stemma plan again to see whether anything remains to reconcile. apply re-reads destination state; it does not replay a saved plan.

Pick up a new version​

stemma update MacSoftware/chrome
stemma prepare MacSoftware/chrome
git diff -- stemma.lock
stemma plan MacSoftware/chrome

update checks upstream again and records what it finds. Review and commit the new lock before applying. See sources and updates for local changes, cold caches and URLs whose content changes in place.