Changelog

July 30, 2026 ยท View on GitHub

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

Added

  • Add support for FreeBSD on RISC-V 64 (riscv64)

Changed

  • OpenBSD on ARM64 now boots with the same EDK II UEFI firmware (uefi.fd) as every other ARM64 guest, instead of a separate Linaro UEFI build. The QEMU machine type for OpenBSD on ARM64 is now virt,acpi=off, which makes the kernel fall back to the device tree instead of hanging during ACPI attach. This removes the dependency on the Linaro release server, which no longer exists

Fixed

  • Don't log the Tearing down VM group when shutdown_vm is false, since the VM is not being torn down in that case (#109)

1.3.0 - 2026-06-22

Added

  • Add support for FreeBSD 15.1 (#153)

  • Add a --environment-variables post-flag to the cpa.sh custom shell for forwarding additional environment variables to the VM on a per-step basis, without having to declare them on the Start VM step via the environment_variables input (#145):

    - name: Run a command with extra environment variables
      shell: cpa.sh {0} --environment-variables MY_ENV1 MY_ENV2
      env:
        MY_ENV1: value1
        MY_ENV2: value2
      run: echo "$MY_ENV1 $MY_ENV2"
    

1.2.0 - 2026-05-30

Added

  • Add support for OpenBSD 7.9 (#144)

Changed

  • Updated QEMU to 10.2.3

Security

  • Bump resources to a release that use immutable releases, providing integrity verification for downloaded artifacts (#147)

1.1.0 - 2026-05-17

Added

  • Add support for DragonFly BSD (#19)

  • Add support for MidnightBSD (#102)

  • Add support for FreeBSD 14.4 (#122)

  • Add support for OmniOS r151058

  • New syntax for multiple steps (#83). Instead of invoking the action multiple times it's now possible to use a custom shell when running commands:

    jobs:
      custom-shell:
        runs-on: ubuntu-latest
        defaults:
          run:
            shell: cpa.sh {0}
    
        steps:
          - name: Start VM
            uses: cross-platform-actions/action@master
            with:
              operating_system: freebsd
              architecture: x86-64
              version: '15.0'
    
          - name: Run command using custom shell
            run: '[ "`uname`" = FreeBSD ]'
    

    Each custom-shell step automatically synchronizes files in both directions: runner-to-vm before the step runs and vm-to-runner after. Pass --sync-files DIRECTION after the file argument to change this (both (default), none (skip sync), runner-to-vm, or vm-to-runner), or use cpa.sh --sync-files standalone to sync on demand without running a command:

    - name: Sync files from runner to VM
      run: cpa.sh --sync-files runner-to-vm
    
  • Reboot mode for rebooting the VM and waiting for it to come back up (#103, #118). cpa.sh --reboot issues the reboot and blocks until the VM is reachable again:

    - name: Reboot VM
      run: cpa.sh --reboot
    

Security

  • Bump builders to releases that use immutable releases, providing integrity verification for downloaded artifacts (#140)

Deprecated

  • The run input parameter has been deprecated and is now optional. Use the custom shell (shell: cpa.sh {0}) in subsequent steps to run commands in the virtual machine instead.

  • The shutdown_vm input parameter has been deprecated and will be removed in a future release. There is no replacement. When unset, it now defaults to true if the run parameter is provided (preserving the legacy behavior) and false otherwise (so the VM stays alive across subsequent custom-shell steps without needing to specify it).

1.0.0 - 2026-04-12

Fixed

  • Fix #108: Fix file ownership on Haiku after rsync, resolving git safe.directory errors

Changed

  • Breaking: Update the requirement of Node for running this action from version 20 to 24.

Removed

  • Breaking: Remove support for running on macOS runners. Only Linux runners (e.g. ubuntu-latest) are now supported. This was deprecated in v0.25.0.
  • Breaking: Remove the Xhyve hypervisor and the hypervisor input parameter. QEMU is now the only supported hypervisor. These were deprecated in v0.25.0.

0.32.0 - 2025-12-21

Added

  • Add support for OmniOS

0.31.0 - 2025-12-15

Added

  • Add support for FreeBSD 15.0 (#114)

Fixed

  • Fix empty hostname (#113)

0.30.0 - 2025-11-04

Added

  • Document how to report a security vulnerability
  • Add support for OpenBSD 7.8 (#112)

Security

0.29.0 - 2025-07-22

Added

Fixed

  • Fix file sync on Haiku (#104)

0.28.0 - 2025-05-19

Added

0.27.0 - 2025-01-22

Added

  • Add support for NetBSD 10.1 (#95)

0.26.0 - 2024-04-12

Added

  • Add support for FreeBSD 13.4
  • Add support for OpenBSD 7.6 (openbsd-builder#20)
  • Add support for FreeBSD 14.2

0.25.0 - 2024-07-11

Added

  • Add support for NetBSD 9.4
  • Add support for FreeBSD 14.1

Deprecated

  • Support for macOS runners has been deprecated and will be removed in a future release. The reason for using macOS runners in the past has been because of the support for hardware accelerated nested virtualization using the Hypervisor framework. Since the creation of this action, the Ubuntu runners have been upgraded with better performance and added support for hardware accelerated nested virtualization using KVM. QEMU is also more stable when using KVM compared to the Hypervisor framework. Please use the ubuntu-latest runner instead.

  • The Xhyve hypervisor has been deprecated and will be removed in a future release. QEMU will be the only available hypervisor. The reason being maintenance of the Xhyve hypervisor seemed to have stopped. It's also starting to become next to impossible to build on later versions of macOS. Please switch to the QEMU hypervisor by switching to the ubuntu-latest runner.

  • The hypervisor input parameter has been deprecated will be removed in a future release. The reason being support for the Xhyve hypervisor has been deprecated, making this input parameter redundant. Please remove the use of the hypervisor input parameter and switch to the ubuntu-latest runner.

0.24.0 - 2024-04-12

Added

  • Add support for FreeBSD 13.3
  • Add support for NetBSD 10.0
  • Add support for NetBSD ARM64 (#55)
  • Add support for OpenBSD 7.5 (openbsd-builder#16)

0.23.0 - 2024-02-18

Added

  • Add support for FreeBSD 14.0 (#74)
  • Add post run step that prints the VM output
  • Support hardware accelerated virtualization on Linux runners (#47)

Fixed

  • OpenBSD VM fails during "Initializing VM" with QEMU on macOS (#73)
  • Use same options for rsync in both directions (#76)

Changed

  • Update qemu to 8.2.0 for CVTPS2PD fix (#78)

0.22.0 - 2023-12-27

Added

  • Added support for using the action in multiple steps in the same job (#26). All the inputs need to be the same for all steps, except for the following inputs: sync_files, shutdown_vm and run.

  • Added support for specifying that the VM should not shutdown after the action has run. This adds a new input parameter: shutdown_vm. When set to false, this will hopefully mitigate very frequent freezing of VM during teardown (#61, #72).

Changed

  • Always terminate VM instead of shutting down. This is more efficient and this will hopefully mitigate very frequent freezing of VM during teardown (#61, #72).

  • Use unsafe as the cache mode for QEMU disks. This should improve performance (#67).

0.21.1 - 2023-11-03

Fixed

  • FreeBSD jobs occasionally fail when ejecting the disk (#64)

0.21.0 - 2023-10-26

Added

0.20.0 - 2023-10-24

Added

  • Add support for disabling file syncing (#65). This adds a new input parameter, sync_files. It allows to specify which directions files should be synced. From the runner to the VM, from the VM to the runner, both or none.

0.19.1 - 2023-10-07

Fixed

  • NetBSD - VM doesn't start (#62)

0.19.0 - 2023-08-17

Changed

  • VMs running via QEMU only expose SSE and SSE2 CPU features (#60). This changes the machine to q35 and the cpu to max, for x86-64 using the QEMU hypervisor. This adds more CPU features like AVX and AVX2.

0.18.0 - 2023-08-04

Added

  • Add support for custom image URLs (#13)
  • Add architecture alias for x86-64: x64 (#58)

0.17.0 - 2023-07-25

Changed

0.16.0 - 2023-07-21

Added

  • Add support for FreeBSD ARM64 (#55)

0.15.0 - 2023-06-12

Changed

0.14.0 - 2023-04-31

Added

  • Add support for NetBSD 9.3 (#53)

0.13.0 - 2023-04-28

Added

0.12.0 - 2023-04-15

Added

  • Add support for OpenBSD 7.3

0.11.0 - 2023-04-03

Added

  • Add support for selecting hypervisor (#50)
  • Add support for NetBSD on macOS runners (#28)
  • Support for configuring memory (#16)
  • Support for configuring CPU core count (#16)

Changed

  • Use output groups to hide all output except the run command (No output is removed, just hidden by default) (#49)
  • Remove support for IPv6 for NetBSD (#46)
  • Increased default memory to 13GB on macOS runner and to 6GB on Linux runners (#16)
  • Increased default CPU core count to 3 on macOS runner and to 2 on Linux runners (#16)
  • Changed from two CPU sockets to one CPU socket (#16)

Fixed

  • NetBSD - very slow network (#46)
  • Action doesn't terminate when command fails (#21)

0.10.0 - 2023-01-24

Added

0.9.0 - 2023-01-16

Added

  • Add support for FreeBSD 13.1
  • Add support for FreeBSD 12.4

0.8.0 - 2023-01-13

Added

Changed

  • Bump QEMU to 7.2

0.7.0 - 2022-12-25

Added

  • Add support for OpenBSD ARM64
  • Add support for running on macOS 12 hosts

Changed

  • Run action using Node 16. This fixes a deprecation message
  • Strip resource binaries to reduce space

Fixed

  • Error in /home/runner/.ssh/config (#14)

0.6.2 - 2022-07-06

Fixed

  • v0.6.1 only works if debug mode is enabled (#12)

0.6.1 - 2022-07-03

Changed

  • Only print files synced in debug mode (#11)

0.6.0 - 2022-06-14

Added

0.5.0 - 2022-05-31

Added

  • Add support for running OpenBSD on Linux (#9)

0.4.0 - 2022-05-10

Added

  • Add support for running FreeBSD on Linux (#8)

0.3.1 - 2021-12-06

Fixed

  • Missing QEMU dependency glib (#5)

0.3.0 - 2021-11-13

Added

  • Added support for NetBSD (#1)

0.2.0 - 2021-09-04

Added

  • Added support for FreeBSD 13.0
  • Added support for OpenBSD 6.9

0.0.2 - 2021-06-22

Added

  • Added branding to the GitHub action in the marketplace

0.0.1 - 2021-06-02

Added

  • Initial release