Projects

A project is a thing that is manifested in a series of releases, each release assigned a unique version. In the Cranko model, each projects’ source materials are tracked in a repository.

We will sometimes refer to projects as “software,“ but it’s worth emphasizing that there’s no reason that a project has to consist of computer source code. It could be a website, a data product, or whatever else. A project might be associated with some kind of external publishing framework, like an npm package or a Rust crate, but it doesn’t have to be.

Prefixing

Cranko associates each project with a certain prefix inside the repository file tree. These prefixes can overlap somewhat: for instance, it is very common that a repository contains a main project at its root, and sub-projects within subdirectories of that root.

By default, Cranko assumes that files inside of a project’s prefix “belong” to that project, except when those files “belong” to a project rooted in a more specific prefix. This mapping is used to assess which commits affect which projects: if a project is rooted in crates/log_util, and a commit alters the file crates/log_util/src/color.rs, that commit is categorized as affecting that project. A single commit may affect zero, one, or many projects. Cranko uses this analysis to suggest which projects may be ready for release.