Versions

NAME

App::Ariza::Versions - the pinned component versions every ariza artefact is built against

SYNOPSIS


use App::Ariza::Versions;

my $v = App::Ariza::Versions.load;          # ariza's shipped resources/versions.toml

say $v.rakudo-version;                       # 2026.07   (bundled runtime)
say $v.rakudo-revision;                      # 01
say $v.rakudo-tag;                           # 2026.07-01
say $v.sqlcipher;                            # 4.14.0    (advisory — see below)

.note for $v.warnings;                       # unrecognised keys, if any

# An alternate pin set (tests, experiments):
my $alt = App::Ariza::Versions.load('/tmp/versions.toml'.IO);

DESCRIPTION

Everything ariza produces — a bundle, a generated installer, a CI workflow — quotes version numbers of software ariza does not own: a Rakudo release, a SQLCipher build. Those numbers live in exactly one file, resources/versions.toml, so that bumping a pin regenerates every app's artefacts in lockstep and nothing can drift.

This class is that file, parsed. It holds no logic beyond parsing: consumers ask it for a string and put the string where it belongs.

THE FILE


sqlcipher = "4.14.0"

[rakudo]
version  = "2026.07"
revision = "01"

The SQLCipher pin is advisory

sqlcipher is the version ariza expects, not one it can enforce. A bundle's SQLCipher comes from the build machine's package manager (App::Ariza::Native) — there is no ariza-operated mirror, because SQLCipher's ABI does not move often enough to justify release infrastructure of its own — and a package manager ships what it ships. So a staged library whose version differs from this pin warns and the build continues, and the manifest records the version that was actually staged with the pin alongside it.

One flat pin, one nested

sqlcipher and [rakudo] are not shaped the same, and the shapes are not interchangeable:

  • sqlcipher is a flat pin — a single string, compared against whatever the build machine's package manager actually staged. See above.

  • [rakudo] is a table, because the runtime a bundle embeds needs two coordinates, version and revision, not one. revision disambiguates rebuilds of the same upstream release — a repackaged runtime, a patched MoarVM — without pretending upstream cut a new version. rakudo-tag joins the two as version-revision.

Unknown keys warn; wrong types die

The house rule, shared with App::Ariza::Config and App::Shigur::Config: an unrecognised key at any level is collected into warnings and parsing continues, so a pin file written for a newer ariza still loads in an older one (and vice versa). A key whose value is the wrong type dies immediately, naming the dotted path and the expected shape — "ariza: rakudo.version must be a string" — because a mistyped pin would otherwise be silently baked into an artefact.

Keys beginning with // are ignored entirely, without a warning. TOML has real comments, so this convention is redundant here; it is kept because every ariza config file behaves the same way, and a config author should never have to remember which file format they are in.

METHODS

load(IO() $path = resource('versions.toml') --> App::Ariza::Versions)

Parse a pin file. The default is ariza's own shipped copy, located through App::Ariza::Resources so it works installed and from a checkout alike.

Dies if the file is missing, unreadable, not valid TOML, or not a TOML table — each with its own message naming the path, so an unreadable file is never confused with a malformed one.

An empty (or whitespace-only) file is not an error: an empty document is a valid, empty TOML table, and every pin comes back undefined. Config::TOML rejects it outright, so load short-circuits before handing it over rather than reporting a legal file as malformed.

warnings(--> List)

Human-readable strings naming every unrecognised key found while loading. Empty when the file was clean.

path(--> IO::Path)

The file this instance was loaded from. Useful in error messages from consumers ("pin X missing from {$v.path}").

sqlcipher

The flat top-level pin, as a string. Undefined Str if absent from the file.

rakudo-version / rakudo-revision / rakudo-tag

The [rakudo] table's two keys, and the version-revision join of them. rakudo-tag is the undefined Str unless both halves are present.

AUTHOR

Matt Doughty

COPYRIGHT AND LICENSE

Copyright 2026 Matt Doughty

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

App::Ariza v0.2.4

bundler and distribution tool for Raku terminal apps

Authors

  • Matt Doughty

License

Artistic-2.0

Dependencies

Config::TOML:ver<0.1.3+>:auth<zef:raku-community-modules>JSON::Fast:ver<0.19+>:auth<cpan:TIMOTIMO>Template::Jinja2:ver<0.3.0+>:auth<zef:apogee>

Test Dependencies

Provides

  • App::Ariza
  • App::Ariza::Bundle
  • App::Ariza::CI
  • App::Ariza::Config
  • App::Ariza::Installer
  • App::Ariza::Launcher
  • App::Ariza::Licensing
  • App::Ariza::Native
  • App::Ariza::Platform
  • App::Ariza::Rakudo
  • App::Ariza::Resources
  • App::Ariza::Runner
  • App::Ariza::Site
  • App::Ariza::Smoke
  • App::Ariza::Tools
  • App::Ariza::Update
  • App::Ariza::Versions

The Camelia image is copyright 2009 by Larry Wall. "Raku" is a trademark of the Yet Another Society. All rights reserved.

Built with Podlite — the markup and publishing tools behind this site.