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