I've just released version 0.0.27 of mgmt!

> 854 files changed, 28882 insertions(+), 16049 deletions(-)

This is rather large release, as I'm not making regular releases unless there's
a specific ask. Most folks that are playing with mgmt are using `git master`.

With that, here are a few highlights from the release:

* Type unification is now extremely fast for all scenarios.

* Added a modules/ directory with shared mcl code for everyone to use. This
includes code for virtualization, cups, shorewall, dhcp, routers, and more!

* New core mgmt commands including setup, firstboot, and docs were added!

* The provisioner got lots of improvements including handoff, and iPXE support.

And much more...


DOWNLOAD

Prebuilt binaries are available here for this release:
https://github.com/purpleidea/mgmt/releases/tag/0.0.27

They can also be found on the Fedora mirror:
https://dl.fedoraproject.org/pub/alt/purpleidea/mgmt/releases/0.0.27/


NEWS

* Primary community channel is now on Matrix. IRC is deprecated until someone
wants to run a bridge for us.

* Type unification is now textbook, and blazingly (linearly) fast. The large
programs I'm writing now unify in under 200ms. Most small programs typically
unify in ~5ms.

* Resource and edge names are always lists of strings now unless they're static.

* We're up to golang 1.23 now. Older versions may still work.

* Our type system now supports unification variables like ?1, ?2 and so on.

* I fixed a bug in my contrib.sh script which omitted the Co-authored-by people!
This means Samuel Gélineau might have previously been missed in past release
notes which is tragic, since he has been by far the most important contributor
to mgmt.

* Made toposort deterministic which fixes some spurious non-determinism.

* Added the iterator filter function. (An important core primitive.)

* Cleaned up the output of many resources to make logs more useful / less noisy.

* Added constants, although I plan to change this to a `const` import package.

* Added the list and map core packages.

* Catch $ in metaparams to make the obvious bug cases easier for users to avoid.

* Consul is now behind a build tag for now, since it's non-free. We'll remove it
eventually if there isn't a suitable free replacement.

* Added mcl modules directory with a good initial set of interesting code.

* Added the the "vardir" API to our "local" package. This is a helpful primitive
which I use in almost every module that I write.

* Added a gzip resource!

* Added a tar resource!

* We moved the template() function to the golang.template namespace. This makes
it clear what kind of template it is and de-emphasizes our "love" for it as the
blessed template engine at least for now.

* Added a sysctl resource!

* Added a virt-builder resource for building images. We can now automate virtual
machines really elegantly.

* A bunch of core functions were added including stuff in net, strings, deploy,
and more!

* The local package got a neat "pool" function. There are lots of possibilities
to use this in creative ways!

* The GAPI/deploy code got more testing and we found some edge cases and patched
them. You can now deploy in all sorts of creative ways and things should work
as expected!

* Added a resource for archiving a deploy. This is deploy:tar and helps with
bootstrapping new machines.

* Found a sneaky DHCP bug and fixed it!

* Added mgmt setup and firstboot commands! This helps bootstrap things without
needing to re-implement that logic everywhere as bash too!

* Added a "docs" command for generating resources and function documentation!

* The provisioner got lots of improvements including handoff, and iPXE support.

* New mcl modules include shorewall, dhcp, cups, some meta modules, misc modules
and more!

* Added a BMC resource in case you want to automate your server hardware.

* We now allow multiple star (*) imports although it's not recommended.

* Hostname handoff is now also part of the provisioner.

* Fixed two type unification corner cases with magic struct functions.

* Added iPXE support to the provisioner.

* Added pprof support to make it easy to generate performance information.

* Added anonymous function calling. These are occasionally useful, and now the
language has them. They were fun and concise to implement!

* We're looking for help writing Amazon, Google, DigitalOcean, Hetzner, etc,
resources if anyone is interested, reach out to us. Particularly if there is
support from those organizations as well.

* Many other bug fixes, changes, etc...

* See the git log for more NEWS, and for anything notable I left out!


BUGS/TODO

* Function values getting _passed_ to resources doesn't work yet, but it's not a
blocker, but it would definitely be useful. We're looking into it.

* Function graphs are unnecessarily dynamic. We might make them more static so
that we don't need as many transactions. This is really a compiler optimization
and not a bug, but it's something important we'd like to have.

* Running two Txn's during the same pause would be really helpful. I'm not sure
how much of a performance improvement we'd get from this, but it would sure be
interesting to build. If you want to build a fancy synchronization primitive,
then let us know! Again this is not a bug.

* The arm64 version doesn't support augeas, so it was built with:
GOTAGS='noaugeas' to get the build out.


TALKS

After FOSDEM/CfgMgmtCamp 2025, I don't have anything planned until CfgMgmtCamp
2026. If you'd like to book me for a private event, or sponsor my travel for
your conference, please let me know.


PARTNER PROGRAM

Interest in the partner program has been limited to small individuals with no
real corporate backing, so its been officially discontinued for now. If you're
interested in partnering with us and receiving support, mgmt products early
access to releases, bug fixes, support, and many other goodies, please sign-up
today: https://bit.ly/mgmt-partner-program


MISC

Our mailing list host (Red Hat) is no longer letting non-Red Hat employees use
their infrastructure. We're looking for a new home. I've opened a ticket with
Freedesktop. If you have any sway with them or other recommendations, please let
me know:
https://gitlab.freedesktop.org/freedesktop/freedesktop/-/issues/1082

We're still looking for new contributors, and while there are easy, medium and
hard issues available! You're also welcome to suggest your own! Please join us
in #mgmtconfig on Libera IRC or Matrix (preferred) and ping us if you'd like
help getting started! For details please see:

https://github.com/purpleidea/mgmt/blob/master/docs/faq.md#how-do-i-contribute-to-the-project-if-i-dont-know-golang

Many tagged #mgmtlove issues exist:
https://github.com/purpleidea/mgmt/issues?q=is%3Aissue+is%3Aopen+label%3Amgmtlove

Although asking in matrix is the best way to find something to work on.


MENTORING

We offer mentoring for new golang/mgmt hackers who want to get involved. This is
fun and friendly! You get to improve your skills, and we get some patches in
return. Ping me off-list for details.


THANKS

Thanks (alphabetically) to everyone who contributed to the latest release:
Cian Yong Leow, Felix Frank, James Shubin, Joe Groocock, Julian Rüth, Omar Al-Shuha, Samuel Gélineau, xlai89
We had 8 unique committers since 0.0.26, and have had 96 overall.
Run 'git log 0.0.26..0.0.27' to see what has changed since 0.0.26


Happy hacking,
James
@purpleidea
