* Support remote VM names in --disk command-line argument
* tart set: introduce "--disk" to support replacing VM's disk contents
* Complete the code comment
For macOS this brings up a dialog, asking the user if they are sure
they want to shut down, which makes this less useful for automated
graceful shutdowns, but it may behave better on Linux, and there
might be ways to instruct macOS to not ask the user, so it's still
a nice feature, and aligns with the SIGUSR1 for suspend, and SIGINT
for non-graceful shutdown.
* Drop Monterey Support
People will still be able to run and SSH into Monterey VMs or use VNC but pointing devices/keyboard won't work.
Fixes#841
* Fixed x86 build
* Give Virtualization.framework a chance to stop the VM on tart stop
We were letting the CancellationError bubble up all the way until
it terminated app, which meant we didn't hit the shutdown code
in run(), stopping the VM and the network.
We now catch CancellationError and proceed to gracefully shut down.
We only stop the VM if it's still running, as a VM that has been
stopped via the menu can't be stopped again.
* Gracefully shut down VM when Tart is quit via menu
Normally the quit action will result in AppKit calling exit(),
but we want to gracefully shut down the VM, so we use the same
path as for closing of the VM window, namely signal our own
process with SIGINT or SIGUSR1.
If that doesn't work we let AppKit terminate as before.
This fixes the "Warning: NSActivity <_NSActivityAssertion:
0x600001f785a0> was ended multiple times" warning seen on
the console when quitting Tart via the menu.
* Activate Tart after application finishes launching
This ensures that the VM window has been shown by the time we
activate, so that we consistently activate and bring the VM
window to the front.
* add VM completion for run command
* add VM completion for stop command
* create ShellCompletions utilities
* add shell completions to some commands
* add shell completion for fqn command
* run command: fix tiny typo
* add shell completion for get command
* more shell completions
* remove unnecessary `try`
* refactor ShellCompletions file
The URLSession async/await functions do not report progress through
the normal URLSessionTaskDelegate callbacks, as reported in:
https://developer.apple.com/forums/thread/723015
We don't want to use URLSession.bytes, as that results in a much
slower download speed compared to URLSession.download, but we can
work around the lack of progress callbacks by observing the
progress on the URLSessionTask itself.
Fixes#767
We wrap the installation with a withTaskCancellationHandler, which
ensures that the SIGINT signal handling code in main() will trigger
a cancellation of the installer.
As the VZMacOSInstaller must be both created and interacted with
on the VM's queue, which in our case is the main queue, we need
to move the logic to a separate function tagged with @MainActor.
This makes sense either way, as it cleans up the code a bit.
* Improve macOS app integration
Tart is now a proper application bundle, with the name and icon
declared in the Info.plist, which we were missing.
This also allows us to declare the app as LSBackgroundOnly
as a default, which means that 'tart create' and similar
background commands will not show the application icon in
the dock, while 'tart run' will, thanks to it overriding
the activation policy of the app.
For now the logic of creating the Tart.app bundle is duplicated
between the CI packaging scripts and the run-signed.sh script.
Now that these scripts are growing, it makes sense to look
at whether we can share the logic somehow, e.g. by building
the application bundle directly during build, and packaging
that, instead of creating it as a post install step.
* Integration tests: fix DockerContainer import
To work around the breaking change in 4.0.0,
see 383b12e9d6.
* .cirrus.yml(Release (Dry Run)): no need to install Sentry CLI
---------
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
Right now we show only actual size of files on disk which excludes empty blocks of the recently introduced sparced format in #671. This makes impossible to get info about disk size that we just set via `tart set`.
Here is an example of `tart list` output before the change:
```
Source Name Size State
local sonoma-base 22 stopped
local sonoma-vanilla 18 stopped
local sonoma-xcode 67 stopped
local ubuntu 1 stopped
oci ghcr.io/cirruslabs/macos-sonoma-base:latest 22 stopped
oci ghcr.io/cirruslabs/macos-sonoma-base@sha256:16c1593bbaf787b20b3c0bc094c5b6baf71c937d22c2e4596da85ac55c92e6cc 22 stopped
oci ghcr.io/cirruslabs/macos-sonoma-vanilla:14.3 17 stopped
oci ghcr.io/cirruslabs/macos-sonoma-vanilla@sha256:23c4e853d48d00a4333346d66a32b2b5aad900cc0dc10e7ecb9dbe67b6f587f4 17 stopped
oci ghcr.io/cirruslabs/macos-sonoma-xcode:latest 67 stopped
oci ghcr.io/cirruslabs/macos-sonoma-xcode@sha256:d0cb8d01424a68b89e0f16f5371bf2152b2c115bd886341a6ba8da42121d1f41 67 stopped
oci ghcr.io/cirruslabs/ubuntu:22.04 1 stopped
oci ghcr.io/cirruslabs/ubuntu@sha256:037763feb7a15d6077edeb7a097738c34313637d16036764b4c196d28d8b429c 1 stopped
```
And here is the output after the change:
```
Source Name Disk Size State
local sonoma-base 50 22 stopped
local sonoma-vanilla 50 18 stopped
local sonoma-xcode 90 67 stopped
local ubuntu 20 1 stopped
oci ghcr.io/cirruslabs/macos-sonoma-base:latest 50 22 stopped
oci ghcr.io/cirruslabs/macos-sonoma-base@sha256:16c1593bbaf787b20b3c0bc094c5b6baf71c937d22c2e4596da85ac55c92e6cc 50 22 stopped
oci ghcr.io/cirruslabs/macos-sonoma-vanilla:14.3 50 17 stopped
oci ghcr.io/cirruslabs/macos-sonoma-vanilla@sha256:23c4e853d48d00a4333346d66a32b2b5aad900cc0dc10e7ecb9dbe67b6f587f4 50 17 stopped
oci ghcr.io/cirruslabs/macos-sonoma-xcode:latest 90 67 stopped
oci ghcr.io/cirruslabs/macos-sonoma-xcode@sha256:d0cb8d01424a68b89e0f16f5371bf2152b2c115bd886341a6ba8da42121d1f41 90 67 stopped
oci ghcr.io/cirruslabs/ubuntu:22.04 20 1 stopped
oci ghcr.io/cirruslabs/ubuntu@sha256:037763feb7a15d6077edeb7a097738c34313637d16036764b4c196d28d8b429c 20 1 stopped
```
Additionally, `tart get` will print actual size with a 3 decimal point precision which will help to track growth in disk images for our templates.
`tart get` before:
```
CPU Memory Disk Display State
4 8192 67 1024x768 stopped
```
`tart get` after:
```
CPU Memory Disk Size Display State
4 8192 90 67.333 1024x768 stopped
```
From a discussion in #728 it appeared that having both `--graphics` and `--no-graphics` is a bit confusing.
`--graphics` was introduced in #248 to support having both VNC and UI for debugging Packer plugin in cirruslabs/packer-plugin-tart#21. This is because `--vnc` flag has a side effect of hiding UI which I think was wrong in retrospective. One can run `tart run --vnc --no-graphics`. In most of the cases this is automated via Alfred or something like that.
Now we have so many arguments that IMO it's worth to remove `--graphics` for overall consistency in arguments: everything is enabled by default and can be disabled via `--no-*` flags.
* Build x86 binary
To support Linux VMs on Intel aka x86_64
* Fixed paths and formatting
* Unique IDs
* Fixed Goreleaser
* Skip creation integration test for now
* import
* Reenable create test
* Revert "Reenable create test"
This reverts commit 4c947c1f0e.
* Reenable create test
* tart create --linux: allow scaling VM down to 1 CPU and 256 MiB
* Revert "tart create --linux: allow scaling VM down to 1 CPU and 256 MiB"
This reverts commit 7a31443eea.
* Check minimum CPU and memory sizes in "tart set"