Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wCS6W-001zy6-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Apr 2026 00:58:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCS6U-0099JS-1q for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Apr 2026 00:58:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wCS6U-0099JK-0W for pgsql-hackers@lists.postgresql.org; Tue, 14 Apr 2026 00:58:11 +0000 Received: from mail-dl1-x122c.google.com ([2607:f8b0:4864:20::122c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCS6S-00000000tLZ-2VW0 for pgsql-hackers@postgresql.org; Tue, 14 Apr 2026 00:58:10 +0000 Received: by mail-dl1-x122c.google.com with SMTP id a92af1059eb24-124a7216c9cso292458c88.0 for ; Mon, 13 Apr 2026 17:58:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776128287; cv=none; d=google.com; s=arc-20240605; b=RPiR5FkVL9xL5XtZvdJNwc/SREMUb68AC8A77X0RKPiIS7kFjb8L9uBtmFnDY+mPMg yNtQFm1dN6pNPInWn55rpwe7rrjiK5ka9hsf3CQ6ZZRN61CWJnEvf7ZA65VPO1HqMc+o Q7gZd4DeENSUSE1ENpHXotHO9YEKtdhiFozVhVD+4I66GJ9+AJYdRbuw4dQI5JwOPZMI 1c+ZFKxrlnQX1mfZOxDJFoB49bGc24rLGTm39KHPHgJ8Lpynt9JCIQue9bWuC0X3S4FW H1LVyK/0P9CwPspxX7LMHNfPiigf+YrlFbtSvGTHxyPnr7KDs1yCfYvwvdWdIXVfChvW wuLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=0yKu29Ix5fsaqoEBk+GuvlmNo19+HzOR2AB2nxXnTGU=; fh=4HTtPN6UClZIFtI48KJsBK7cFW+vk4U55kQCxrFCSyI=; b=Qe0vmaR3oYYcR5kq3czw2fUrfyE5xpOL+9rwc1gKg/Q+nbxlY7Z2zxS/Nce2d4ooOP U5xYFVZIhScEV19LknX1QnDaSYF1R+sOpKX/Btzviu87h+yc/A1LUyRpFfeJmkJa694f 43tGnOHM6xbLzh7sQnbm+0pIcPDJR0K9bw8znZV54Gt7JMTjc+MVBvH3Gd3ebr0wGdMF XoeBXOZo4YnnvaSRR2GoWFnJU1v5DEVHP7mZPFNCCHk0J7fd1D+2d/vIH06Xxhvq+1SC r0n0j4okEDlgDVTxp90gLHW5wptEv8D6MrHK9JFjKgDXXqzRnFXYQ4TRgq2FQGDUScOP /CYg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776128287; x=1776733087; darn=postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=0yKu29Ix5fsaqoEBk+GuvlmNo19+HzOR2AB2nxXnTGU=; b=sEdR/DndnvNbpVdiawy1AyM4j9ADrM/77sMxtAeLUsE58t+6Xbtec/3d/mu3Rndq0S mPb1PRpLIsc9nlMla7gMbfNp8aDiG9CtIqQun1kODRVIjKsPUB4dClmhzfskgpo3g3s6 rjIC9z6MlqyFB4aKdrNWOBGNtH0EMBCDMd9hJYWSifxEWb84Os4r3+nOSYxXn5I5u1// EfjWEXulBDEbRTkjU0UYi835R+o9nTSe+vQQMLd9Ka2d7C+lDrHB5RiK2jZKCWdYwGEn PFpOd2oPc9JvpIiqjt6tTqK8XS3GxbuEI/ORj7PSV11UILmrk+gh21knOBQtyZXKEHKM k7VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776128287; x=1776733087; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0yKu29Ix5fsaqoEBk+GuvlmNo19+HzOR2AB2nxXnTGU=; b=VKf9DSTO8B+vIStl6PgvkYOTtmxIprV8T7H4U2HYQtlvsqjHNycFjaT0QUG1S+B84i KqnYo72aC4cau2DM+EP14U1RcoshGRdp0kb2yc32boNA5z2tHPmDcLdl1X6CCV/IUSYG wHNDKT/Gvvt1dF005VniZ9BC3QKytRyz6Y97BvB6ZisOTgOe/e0Bc8BNfsaxNpJeG+R5 aSopb5YjxeJthaAhOlbFfh/4grkA/59KNv2cszqiEZ/9c5T36PrcEgksXTgAWhegCjkm GgHTRqJPx9+06t5E7u/Y/N6c8kLH7xR4ofPPDhWQyCeD8mQCsglDNVQ4pFlo0E4seXdV LWBw== X-Forwarded-Encrypted: i=1; AFNElJ+PjNHbHeZwZDHfWmGKgCVj1aJYNbiip5OtsDm8cJ5THbX2nen6BXm5DQiP8fEatgykD0yCyNOuwod66K2D@postgresql.org X-Gm-Message-State: AOJu0Yzq6vHM4HVDmwy0fD8snTfoOs+LEYDA4sb0cpvAi7Yp5uAyH7uB Y2G+VTXxVBcLvEzIEUcBGhx5KWMtVssMf2rByrm2tAkyIHm3bYzYPhk+jMYqOm1kU2BHIjiy2RS WVof4Iy0/OqOrCDUampzucElV1utt+aE= X-Gm-Gg: AeBDievXC5jp3d0QG9MtJSnb9qxuajjLEkK3I3BDCii2F+p2oyBD7mEsbvKaM4CKiBB 8dpmkZdt+wOEZL+jzmFmdzvcQ3BdJTR0QPgFQMipuKLtobCadKPrluJz67dm2N/J74jGXHWjZ6M aqj6KqHnw9tCEJ9x+LoawqYJ5ZGtuqGoTN6xqHSV2t7pORFwvKJZp3c9Fa+sJsG0Si0JGbO273f SD5+jnFDdRhHH+TZlA+LnpWPsLtgxvlIw1JDBAoRKrwC6WpN3ffTC1fcHcEEa4KU90tsHFR5GnX yv1VVQDpLoGPT/NNbQAFdCNYIGjkW58HVrKfoZieREOyIZ2SEv0MoPgRBS68Y9lt X-Received: by 2002:a05:7300:8c85:b0:2d4:62f0:b2e1 with SMTP id 5a478bee46e88-2d5831e2803mr3269772eec.0.1776128287197; Mon, 13 Apr 2026 17:58:07 -0700 (PDT) MIME-Version: 1.0 References: <3ydjipcr7kbss57nvi67noplncqhesl5eyb6wgol4ccjxynspv@yatlykpribmm> <35678580-2db4-4b4f-883a-c4e9bddf501c@pgbackrest.org> In-Reply-To: <35678580-2db4-4b4f-883a-c4e9bddf501c@pgbackrest.org> From: Thomas Munro Date: Tue, 14 Apr 2026 12:57:27 +1200 X-Gm-Features: AQROBzAlNl0lC4uLkZ6kw04M8AOYKSx3lDJbqaIZ3RYT8rdfrAyLvUo3p3RCReQ Message-ID: Subject: Re: Heads Up: cirrus-ci is shutting down June 1st To: David Steele Cc: Andres Freund , pgsql-hackers@postgresql.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, Apr 13, 2026 at 11:53=E2=80=AFPM David Steele wrote: > On 4/10/26 06:29, Thomas Munro wrote: > > Nested virtualisation to the rescue? > > > > https://github.com/cross-platform-actions/action > > I used this to migrate our FreeBSD tests [1] and it worked out OK. The > only downside is it doesn't look like you can split out steps so all the > commands end up logged together. - name: Run Test uses: cross-platform-actions/action@v1.0.0 with: operating_system: freebsd version: ${{matrix.os.version}} run: | uname -a sudo pkg update && sudo pkg upgrade -y libiconv && sudo pkg install -y bash git postgresql-libpqxx pkgconf libxml2 gmake perl5 libyaml p5-YAML-LibYAML rsync meson cd .. && perl ${GITHUB_WORKSPACE?}/test/test.pl --vm-max=3D2 --no-coverage --no-valgrind --module=3Dcommand --test=3Dbackup --test=3Dinfo --test=3Darchive-push Nice! I guess the problems with this are: 1. It has to install the packages every time because it's not yet using a pre-prepared image. 2. It has no ccache memory. 3. It has lost all that user-friendly stuff like artefact archival/browsing, core file debugging etc. 4. IIRC the log URLs are not "public", you have to have to be logged into an account to view them. (That 4th point was one of Cirrus's unique advantages at the time we selected it. We wanted to be able to share URLs for discussion on the mailing list without requiring everyone to be a GitHub user.) Perhaps for point 1, we could publish fast-start qemu images for Debian, FreeBSD, NetBSD, OpenBSD*. The pg-vm-images repo that Andres and Bilal maintain currently uploads images to Google Cloud's image repository where Cirrus VMs can boot from them, but it could instead publish qemu images to our own public URLs. I'm picturing a bunch of images available as https://ci.postgresql.org/images/qemu/arm64/{freebsd-15,debian-13,...}-with= -postgresql-dependencies.img. The point of per-arch variants would be to match common hosts for fast kernel hypervisor support, eg on a Mac you want arm64, though you could still run amd64 slowly if you need to. Could even do ppc and riscv with emulation. Qemu images should hopefully be usable in many different environments: 1. We could run them locally with some one-button command, and also have images you can log into and hack on if you want. 2. We could run all of them or just the license-encumbered ones on public clouds (not through a CI service) with some one-button command, if you have an account. 3. We could use them in people's private GitHub/GitLab/... accounts as you showed, just add image_url=3Dhttps://ci.postgresql.org/images/qemu/.... 4. Cfbot could do any of those things, not sure what would be best. For the license-encumbered OSes, we could at least make disk images or archives containing a MacPorts installation or bunch-of-installed-libraries-for-Windows, but not including the OS. Just mount/unpack as /opt or C:\pg-packages or whatever, I guess, if you can figure out how to get a VM running ... somewhere. Perhaps there is some way to make project-owned resources (MacMinis, Windows VMs) available to our community too, but IDK how that would work. Some random half-baked thoughts about the ccache, browsing, etc problems: 1. Local qemu: we could use overlay images so that your downloaded copy of X-with-postgres-dependencies.img remains read-only. Create a new empty overlay image for each clean run, and if you need to inspect logs, core files, you can just log in before the next run wipes it. 2. Local qemu: we could mount a separate disk image as /cache that survives between runs and can be wiped any time. 3. Public CI system like GitHub actions: I suppose we could run our own ccache, artefact, log hosting service that it could push to... that was something I already wondered about under Cirrus due to various disk space and retention problems... but I'm quite hesitant to get tangled up in running "public" services and unsure how you'd control access. I would at least like to think about trying to make cfbot capitalism-proof. I may be underestimating the difficulty, but I keep wondering if cfbot should at least be able to do everything itself, with some combination of local qemu, qemu-on-project-Mac-fleet, and public cloud VMs controlled directly. It doesn't really *need* to depend on ephemeral venture capital-powered CI companies, it was just nice to make it use the exact same CI setup as you could use for yourself in your GitHub account. I'm imagining that it would still push branches to GitHub, since that's a nice interface to browse code on, and I suppose it might even be possible to publish our own minimalist GitHub plugin that allows cfbot to push its green/red result indicators to it since that's clearly something that external providers can do (as well as pushing them to the commitfest UI as now). But if you clicked them, you'd be taken to a really primitive cfbot web interface where you could browse logs and artefacts retained for N days. In other words, an extremely cut down and limited "let's-make-our-own-CI" project, which doesn't have to tackle the much harder "let's-make-our-own-semi-public-CI-platform" project. I like the idea of at least having such a mode as an insurance policy anyway, but I'm not sure what nitty gritty details might make it hard to pull off... In this thought experiment, people could continue to work separately on making personal CI work in various ways, GitHub, GitLab, whatever else, and local, and all ways of doing it would be using the same scripts and VM images. * ... and AFAIK we could add illumos to the set if we wanted, in the past a couple of us tried to get that going but ran into ... I think it was driver problems? ... when using GCP VMs, but it definitely works in qemu VMs as that cross-platform-actions project shows. Every OS project makes sure it can boot in qemu. Even AIX can boot in qemu, if you have a license.