<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/ansible-roles/mattertimesync, branch main</title>
<subtitle>Ansible roles for nth.io infrastructure
</subtitle>
<id>https://src.nth.io/luke/ansible-roles/atom?h=main</id>
<link rel='self' href='https://src.nth.io/luke/ansible-roles/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/'/>
<updated>2026-07-29T02:11:08Z</updated>
<entry>
<title>Rename mattertimesync role to mattertimectl (build + controller)</title>
<updated>2026-07-29T02:11:08Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-29T02:11:08Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=207bff9cb9773e3e0ef7fe7114e4b1aa70ffd4b6'/>
<id>urn:sha1:207bff9cb9773e3e0ef7fe7114e4b1aa70ffd4b6</id>
<content type='text'>
- Rename role dir and all vars from mattertimesync to mattertimectl
- Rename the server subrole to controller
- Build via cargo instead of npm; run the binary directly (no node)
- Default fabricLabel to "Matter Time Controller"
</content>
</entry>
<entry>
<title>Add fabricLabel to mattertimesync config</title>
<updated>2026-07-27T15:59:00Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-27T15:59:00Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=a55c5e9d35530d03fa8c52ceef5d2457827f0851'/>
<id>urn:sha1:a55c5e9d35530d03fa8c52ceef5d2457827f0851</id>
<content type='text'>
Renders the new mattertimesync fabricLabel field (the label other Matter
ecosystems display for this controller, e.g. the Apple Home Connected
Services subtitle) with the app default. Labels must be unique per
device, so instance overrides should not reuse another admin's label.
</content>
</entry>
<entry>
<title>build roles: create build_work_dir and redirect caches per-role</title>
<updated>2026-07-26T21:46:21Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T21:46:21Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=0dfd81ca1696053b366a39cab02e54205a09fb20'/>
<id>urn:sha1:0dfd81ca1696053b366a39cab02e54205a09fb20</id>
<content type='text'>
Each build role now creates build_work_dir itself and sets its own toolchain's
cache env (GOPATH/GOCACHE/GOMODCACHE, CARGO_HOME, npm cache, MIX/HEX) on its
build tasks, so the roles are self-contained instead of relying on a play-level
environment and pre_task.
</content>
</entry>
<entry>
<title>build roles: force real tarballs for single-file artifacts</title>
<updated>2026-07-26T21:31:56Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T21:31:56Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=28c1fc8ea39f0fdb244f08f386ed81a2c68c0f5c'/>
<id>urn:sha1:28c1fc8ea39f0fdb244f08f386ed81a2c68c0f5c</id>
<content type='text'>
community.general.archive (&gt;=10) compresses a lone file into a bare .gz instead
of a tarball, so the mattertimesync/bin/nostr artifacts failed the server-side
unarchive. Set force_archive: true so the archive module emits a real
single-member .tar.gz, consistent with the multi-file dendrite/pleroma builds.
</content>
</entry>
<entry>
<title>build roles: stage checkouts + artifacts under build_work_dir</title>
<updated>2026-07-26T21:05:40Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T21:05:40Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=a173d5c8f149b4dde505fd4ab5257fb4cbc6911e'/>
<id>urn:sha1:a173d5c8f149b4dde505fd4ab5257fb4cbc6911e</id>
<content type='text'>
Move every build role's working dir off /tmp (the SD card) to {{build_work_dir}},
which the playbook points at the SSD on the build host. nostr and pleroma stage
their artifacts inside their own build dirs so the shared work dir can't collide,
while preserving the archive top-level names (relayer, release) that the server
roles depend on.
</content>
</entry>
<entry>
<title>mattertimesync: add build + server roles</title>
<updated>2026-07-26T16:49:11Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T16:49:11Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=1566ed593907c829827237aad924c3f527723218'/>
<id>urn:sha1:1566ed593907c829827237aad924c3f527723218</id>
<content type='text'>
Build role compiles the tagged source on the build host (npm ci + npm run
bundle) into a versioned mattertimesync-&lt;ver&gt;.tar.gz in build_srv_dir. Server
role installs the single bundled .mjs, creates the mattertimesync service user
and a 0700 storage dir for the Matter fabric keys, templates config.json, and
runs a hardened oneshot sync via a systemd timer. Both roles depend on the
nodejs role for Node &gt;=20.
</content>
</entry>
</feed>
