Skip to content

ci: revive the BSD workflows - #335

Open
neilpang wants to merge 6 commits into
tmate-io:masterfrom
neilpang:vm-v1
Open

ci: revive the BSD workflows#335
neilpang wants to merge 6 commits into
tmate-io:masterfrom
neilpang:vm-v1

Conversation

@neilpang

Copy link
Copy Markdown
Contributor

The BSD workflows have not built anything since GitHub retired the
macos-12 runner. They still asked for it, so each job queued for 24
hours and was cancelled: on 985ab61 the FreeBSD job reports
labels=macos-12 with no runner, started 2026-07-29T06:22:10Z and
completed exactly a day later with conclusion=cancelled, while the
Ubuntu job on the same commit picked up a runner and passed. The
checks were there; nothing was being compiled behind them.

Turning them back on surfaced everything that had drifted underneath
in the meantime. Four commits, one problem each.

  1. ci: revive the BSD workflows

vmactions v0 needed macOS for nested virtualisation; v1 runs the guest
under QEMU on a Linux runner, so runs-on becomes ubuntu-latest, which
is what the action's README asks for. release: is pinned to the major
version only, so the jobs follow the newest 15.x, 7.x, 11.x and 6.x
instead of freezing onto an image that will eventually be withdrawn the
way macos-12 was.

The package lists had drifted too. Every name below was checked
against that OS's own package database, in a VM of the same release the
job uses:

FreeBSD 15.1, DragonFly 6.4
"pkg: No packages available to install matching 'msgpack'"
The C library is packaged as msgpack-c.

OpenBSD 7.9
"Can't find automake-1.16.3 / autoconf-2.71 / pkgconf"
pkg_info -Q lists automake 1.16.5p0, 1.17, 1.18.1 and autoconf up
to 2.72p0. AUTOMAKE_VERSION and AUTOCONF_VERSION select which
wrapper runs, so they move with the packages. pkgconf has no
standalone package any more; pkg-config 2.4.3 ships in base at
/usr/bin/pkg-config.

NetBSD 11.0
"NetBSD/x86_64 9.0 (pkg) vs. NetBSD/x86_64 11.0 (this host)"
"missing required library: /usr/lib/libcrypto.so.14"
The image's /etc/pkg_install.conf lists three PKG_PATH entries and
the last is a 9.0 set, so anything absent from the first two falls
through to it and installs a 9.0 binary. Pointing PKG_PATH at the
running release installs all seven packages cleanly.

  1. configure: accept msgpack-c as well as msgpack

With the packages installed, configure still failed on OpenBSD and
NetBSD:

checking for msgpack >= 1.1.0... no
configure: error: "msgpack >= 1.1.0 not found"

msgpack-c 4.x renamed its pkg-config module. Which name exists depends
on the platform:

FreeBSD 15.1   msgpack.pc and msgpack-c.pc, both 6.1.0
OpenBSD 7.9    msgpack-c.pc only, 6.0.0
NetBSD 11.0    msgpack-c.pc only, 6.1.0
Ubuntu         msgpack.pc (the current check passes there)

OpenBSD's own port carries a patch that renames the check outright, but
doing that upstream would break the platforms that only ship the old
name -- Ubuntu among them. Checking msgpack-c first and falling back to
msgpack covers both eras and all of them. autoreconf -i still exits 0
and the generated configure contains both checks.

  1. ci: build when the build system changes

The workflows trigger on **.c, *.h, compat/ and their own file, so a
change to configure.ac or Makefile.am builds nothing. Those two are the
build system; a mistake in either breaks every platform at once. Commit
2 changes configure.ac, and without this no job would have run against
it.

  1. ci: install the missing macOS dependencies

The macOS job was already failing on master before any of this:

checking for libevent... no
configure: error: "libevent not found"

It installed automake, msgpack and libssh, while the Ubuntu and FreeBSD
jobs also install libevent, libtool, autoconf and pkg-config. With
those added the build completes, and make install then needs sudo for
/usr/local/share/man/man1, the same as the Ubuntu job already does:

install: /usr/local/share/man/man1/INS@n6DoTE: Permission denied

Verification

All six workflows pass on the branch. The BSD four and Ubuntu were
verified at 1dc5062 and macOS at c02570f:

FreeBSD  DragonflyBSD  NetBSD  OpenBSD  Ubuntu  MacOS   all green

The logs show real work rather than a no-op: 133 CC invocations and a
CCLD tmate on macOS, and the BSD jobs finish in 1.5 to 2 minutes each
where they previously sat in the queue for a day.

neilpang added 6 commits August 20, 2026 16:37
The four BSD jobs have not actually run since GitHub retired the
macos-12 runner.  They still asked for it, so each one queued for 24
hours and was then cancelled: on 985ab61 the FreeBSD job reports
labels=macos-12 and no runner, started 2026-07-29T06:22:10Z and
completed exactly a day later with conclusion=cancelled, while the
Ubuntu job on the same commit picked up a runner and passed.  The
checks looked present but nothing was being built.

Moving to vmactions v1 fixes that.  v0 needed macOS for nested
virtualisation; v1 runs the guest under QEMU on a Linux runner, so
runs-on becomes ubuntu-latest, which is what the action's README asks
for.  release: is pinned to the major version only, so the jobs follow
the newest 15.x, 7.x, 11.x and 6.x rather than freezing onto an image
that will eventually be withdrawn the way macos-12 was.

With the jobs running again, four years of package drift surfaced.
Every name below was checked against that OS's own package database in
a local VM of the same release the job uses:

  FreeBSD 15.1, DragonFly 6.4
      msgpack does not exist; the C library is msgpack-c.
      "pkg: No packages available to install matching 'msgpack'"

  OpenBSD 7.9
      automake-1.16.3 and autoconf-2.71 are gone.  pkg_info -Q lists
      automake 1.16.5p0, 1.17 and 1.18.1, and autoconf up to 2.72p0.
      AUTOMAKE_VERSION and AUTOCONF_VERSION have to match whichever is
      installed, so they move to 1.18 and 2.72 with the packages.
      pkgconf has no standalone package any more and is dropped:
      pkg-config 2.4.3 ships in base at /usr/bin/pkg-config.

  NetBSD 11.0
      pkg_add pulled libssh-0.114 built for NetBSD 9.0, which wants a
      libcrypto this host does not have:
        "NetBSD/x86_64 9.0 (pkg) vs. NetBSD/x86_64 11.0 (this host)"
        "missing required library: /usr/lib/libcrypto.so.14"
      The image's /etc/pkg_install.conf lists three PKG_PATH entries
      and the last one is a 9.0 set, so anything missing from the first
      two falls through to it.  Setting PKG_PATH to the running release
      installs all seven packages cleanly.

Also bumps actions/checkout from v2 to v7 in these four files.
MacOS.yml and Ubuntu.yml still use v2 and are left alone; the MacOS
job's failure is unrelated to this change and predates it.
msgpack-c 4.x renamed its pkg-config module from msgpack to msgpack-c.
Which name is available depends on the platform, and no single name
covers all of them:

    FreeBSD 15.1   msgpack.pc and msgpack-c.pc, both 6.1.0
    OpenBSD 7.9    msgpack-c.pc only, 6.0.0
    NetBSD 11.0    msgpack-c.pc only, 6.1.0
    Ubuntu         msgpack.pc (the current check passes there)

So configure fails on OpenBSD and NetBSD with

    checking for msgpack >= 1.1.0... no
    configure: error: "msgpack >= 1.1.0 not found"

even though the library is installed.  OpenBSD's own port carries a
patch that renames the check outright, but doing that upstream would
break the platforms that only ship the old name.  Checking msgpack-c
first and falling back to msgpack covers both eras and all four.

Verified with pkg-config --modversion in a VM of each release, and
autoreconf -i still exits 0 with the generated configure containing
both checks.
The workflows trigger on **.c, **.h, compat/* and their own file, so a
change to configure.ac or Makefile.am builds nothing.  Those two are
the build system: a mistake in either breaks every platform at once,
which is exactly the case worth catching early.

The previous commit changes configure.ac and, without this, no job
would have run against it.
The macOS job has been failing at configure:

    checking for libevent... no
    checking for library containing event_init... no
    configure: error: "libevent not found"

It installs automake, msgpack and libssh, while the Ubuntu and FreeBSD
jobs also install libevent, libtool, autoconf and pkg-config.  libevent
is the first of those configure looks for, so that is where it stops;
the others are added too rather than waiting to hit them one at a time.

This predates the BSD work in this branch: the macOS job is already
failing on master at 985ab61.

Also bumps actions/checkout to v7 here, matching the other workflows.
cache-after-prepare caches the VM image again after the prepare step
installs the packages, so later runs skip the package downloads and
keep working when an OS package mirror is down.
The ports tree removed sysutils/tmate (a916bade, 2026-08-28), so the
patch URLs this job fetched from master now return 404 and the build
dies at the first one.  Fetch them from the last commit that still
carries them instead.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant