Nikolay Edigaryev
cf49fd10b6
Print errors to stderr ( #504 )
2023-05-18 19:11:22 +04:00
Fedor Korotkov
8e11bbe1cd
Improve error reporting for unsupported host OS version ( #491 )
...
Fixes #489
2023-05-07 21:07:26 +04:00
Nikolay Edigaryev
6de31de6bf
tart login: trim newline characters at the end of --password-stdin ( #486 )
2023-05-04 14:02:46 +04:00
Nikolay Edigaryev
4f70d01dd6
Set User-Agent header for OCI HTTP requests ( #478 )
...
* Set User-Agent header for OCI HTTP requests
* IORegistry value is actually a NUL-terminated C string
* Use sysctl instead of IOKit
2023-04-28 18:02:57 +04:00
Nikolay Edigaryev
b03408f856
tart ip: wait for the VM to start if --wait was set ( #467 )
2023-04-10 10:37:00 +00:00
Nikolay Edigaryev
1d3aa5ac81
tart push: allow pushing OCI VMs from the cache too ( #465 )
...
* tart push: allow pushing OCI VMs from the cache too
* Check for RemoteName earlier
* Refactored pushing of OCI images under new tag (#466 )
* Refactored pushing of OCI images under new tag
* Fixed compilation
---------
Co-authored-by: Fedor Korotkov <fedor.korotkov@gmail.com>
2023-04-06 14:20:04 +00:00
Fedor Korotkov
261c1806df
Improve `tart ip` error message ( #464 )
...
Resolves #460
2023-04-05 18:19:39 +00:00
Fedor Korotkov
e1bb565c3b
UI improvements ( #459 )
2023-03-31 10:58:14 -04:00
Nikolay Edigaryev
9b26d30c42
tart import: fix import failing due to SIGBUS ( #458 )
2023-03-30 15:52:48 +04:00
Nikolay Edigaryev
e72fcd9b19
tart list: show if the VM is running or not ( #456 )
...
* tart list: show if the VM is running or not
* Boolean "running" field instead of "state", similarly to "tart get"
* Re-use VMDirectory.running() in "tart get"
2023-03-29 08:51:53 -04:00
Nikolay Edigaryev
33a51b7344
tart export: make export path optional ( #454 )
2023-03-27 16:59:57 +00:00
Fedor Korotkov
f62949b6f4
Option to pass externally created serial console ( #448 )
...
* Option to pass externally created serial console
See https://github.com/cirruslabs/tart/pull/364#issuecomment-1472111742 for details
* Fixed compilation
* Apply suggestions from code review
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
---------
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
2023-03-17 13:52:13 +00:00
Nikolay Edigaryev
d7561cab0b
Graceful Softnet termination ( #434 )
2023-03-16 18:37:46 +04:00
fedor
066f585c53
Reformatted Serial.swift
2023-03-16 10:22:27 -04:00
Peter Nguyen
d8ac36b3bd
support ZVirtioConsoleDevice for linux vm ( #364 )
...
* support ZVirtioConsoleDevice for linux vm, user can control the vm via serial port with screen command
* cleanup code, fix indent
* add --serial option to tart
* remove serial in vmconfig, fix Serial.swift
---------
Co-authored-by: peternguyen93 <peternguyen9321@gmail.com>
Co-authored-by: peter <peter@starlabs.sg>
2023-03-16 10:21:13 -04:00
Fedor Korotkov
4a454a3115
Allow to choose IP resolution strategy ( #446 )
...
Haven't seen any reports of the `arp` vs DHCP issues so I think it's reasonable to remove the warning and allow to customize the resolution strategy.
2023-03-16 17:41:54 +04:00
Fedor Korotkov
1f35a9b35e
Fixed error message for incorrect memory ( #426 )
2023-02-27 18:32:40 +04:00
Nikolay Edigaryev
2be5eedeb6
Try to set a SUID bit on Softnet using Sudo before failing ( #421 )
...
* Try to set a SUID bit on Softnet using Sudo before failing
* .cirrus.yml: switch to the new Mac machine
2023-02-17 08:50:57 +04:00
Fedor Korotkov
78f7ba8f80
Remove Reporting ( #411 )
2023-02-09 20:47:54 +04:00
Fedor Korotkov
b242f27f49
Ignore GC errors ( #405 )
...
* Ignore GC errors
Such errors are not critical
* Print GC error to stderr
2023-02-09 00:15:34 +04:00
Nikolay Edigaryev
b566d07bc4
Avoid URL.formatted() method ( #408 )
2023-02-08 06:52:01 -05:00
Fedor Korotkov
def779e20b
Report to Sentry instead of Puppy ( #402 )
...
Instead of logging locally let's report to Sentry.
2023-02-07 20:04:45 +04:00
Fedor Korotkov
b8ff7474c3
Removed `--with-softnet` flag ( #401 )
...
Fixes #276
2023-02-05 21:56:23 +04:00
Fedor Korotkov
f34aa5f072
JSON output for get and list commands ( #394 )
...
* JSON output for `get` and `list` commands
In the light of the upcoming `1.0.0` release and stabilizing of the API, let's introduce some breaking changes for the good.
Removed all the `--cpu`, `--memory`, `--disk` and `--display` flags and replaced with a single `--json` flag for machine-readable output.
Added `--json` option to the `list` command to output a single JSON list. Notably removed `--quite` flag since it seemed unnecessary.
Fixes #297
* Added Size to `list` output
Fixes #379
* Added running state to `get`
Fixes #393
* Better signature
* Updated tests
* More test fixes
2023-02-04 11:40:39 +04:00
Fedor Korotkov
ecc5de18be
Collect installation information ( #390 )
2023-02-02 06:12:28 -05:00
Nikolay Edigaryev
41af674a88
Introduce "tart import" and "tart export" commands ( #386 )
...
* Introduce "tart import" and "tart export" commands
* Use AppleArchive instead of ZIP and simply {ar,un}chive the VM dir
* Fix formatting
* Link to Apple's docs
* Print "importing..." and "exporting..." lines
2023-02-01 15:27:05 -05:00
Nikolay Edigaryev
ba4f00fa78
Fix ArgumentParser's exception printing ( #367 )
2022-12-21 18:06:01 +04:00
Nikolay Edigaryev
1380ece108
Use separate exception codes for better Sentry grouping ( #363 )
2022-12-19 17:40:55 +00:00
Fedor Korotkov
9cdb7087f2
Fixed --help ( #361 )
...
* Fixed --help
Apparently `--help` works via exceptions 🤷♂️
Fixes #360
* lint issue
2022-12-17 20:57:17 +04:00
Fedor Korotkov
828351a8fb
Report pull metrics to Sentry ( #354 )
...
* Report GC events to Sentry
* Formatting
* Use transactions for measuring pull duration on cache miss
* Fixed linting
* Explicitly enable capturing of failed requests
* Allow customizing tracesSampleRate
* bindToScope
* Measure compressed disk size
* Don't capture GC events
2022-12-15 16:53:34 -05:00
Nikolay Edigaryev
f9ac994e18
Fix inverted VMStorageOCI.link() logic ( #355 )
2022-12-15 21:18:33 +00:00
marc-48k
fdeaf979c2
Get command ( #353 )
...
* (wip) First pass at Get command.
* Adds validation in case multiple options are supplied.
2022-12-15 22:52:22 +04:00
Nikolay Edigaryev
d9f1c37cdd
Sentry integration ( #352 )
...
* Ditch Foundation.exit()'s where feasible
* Sentry integration
* SwiftFormat
* Upload symbols and sources to Sentry
* Use Sentry Releases
* Do not use ExitCode exceptions
* Clarify why we need CustomNSError extension
2022-12-15 13:50:21 +00:00
Fedor Korotkov
81253417a4
Optimal buffer sizes for Softnet socket ( #351 )
...
* Optimal buffer sizes for Softnet socket
* Formatting
2022-12-14 23:18:39 +04:00
marc-48k
c9caeab098
Filter tart list by source ( #349 )
...
* Adds Option to filter VMs by 'source'
* Tidy up columns for table on some Terminals
* Don't show headers if there's an error.
* Fixes linting errors.
* Update Sources/tart/Commands/List.swift
- removing the short name for now, as we don't know if we may need -s in the future
- removing the capitalization for the word "source" and adding an example instead
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
* source should be an Optional flag. Reverts header change.
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
2022-12-14 13:08:35 -05:00
Nikolay Edigaryev
15b26f78ae
Registry: include port when looking up credentials ( #346 )
2022-12-05 09:56:48 -05:00
Nikolay Edigaryev
31635e59d7
Don't swallow VZVirtualMachine.start() exceptions ( #343 )
...
* Don't swallow VZVirtualMachine.start() exceptions
* Rename task to startTask for clarity
* No need to use "self"
2022-12-01 14:03:21 -05:00
Nikolay Edigaryev
ad9c3c661e
Reformat code idents and introduce the SwiftFormat linter ( #339 )
...
* Package.swift: add SwiftFormat
Can be invoked with "swift package plugin swiftformat".
* $ swift package plugin swiftformat
* .cirrus.yml: run SwiftFormat
* SwiftFormat: exclude Sources/tart/OCI/Reference/Generated
2022-11-29 15:56:13 +00:00
Nikolay Edigaryev
c27d4a089c
OCI: WWW-Authenticate's scheme should be treated case-insensitive ( #336 )
2022-11-25 16:59:38 +04:00
Nikolay Edigaryev
70f9fcc12e
tart run: do not check --disk lock for read-only attachments ( #334 )
2022-11-22 22:37:48 -05:00
Nikolay Edigaryev
456ebc1c7b
Rosetta support ( #324 )
2022-11-21 12:56:27 -05:00
Nikolay Edigaryev
14cbc727ad
tart run: check if the disks are locked ( #333 )
2022-11-21 17:42:53 +04:00
Nikolay Edigaryev
c09cbefdd0
VZVirtualMachineDelegate implementation: show the error details ( #330 )
2022-11-18 18:51:26 +04:00
sheldonneuberger-sc
de993fbf6d
use 64bit int for memory ( #327 )
2022-11-16 14:52:28 -05:00
Nikolay Edigaryev
f08ddf3855
Fetch IPSWs via file ( #322 )
2022-11-15 10:01:52 +04:00
Nikolay Edigaryev
8524d93741
Integration tests ( #313 )
...
* Integration tests
* Set "HOMEBREW_NO_AUTO_UPDATE=1" for virtualenv installation step
* Use CIRRUS_WORKING_DIR as temporary directory if present
2022-11-14 13:24:51 -05:00
Nikolay Edigaryev
833c162187
tart stop: return a different exit code when VM is not running ( #321 )
...
See https://github.com/cirruslabs/tart/pull/316#issuecomment-1311556674 .
2022-11-11 14:20:21 -05:00
Fedor Korotkov
31ba71dad7
Option to provide registry credentials via environment variables ( #320 )
...
Fixes #124
2022-11-11 18:32:23 +04:00
Nikolay Edigaryev
5e77968989
Introduce "tart stop" ( #316 )
2022-11-11 07:59:22 +04:00
Evan Burkey
f37372da28
Implement Get command ( #309 )
2022-11-10 09:14:14 +04:00
Nikolay Edigaryev
e600d2f036
Improve UninitializedVMDirectoryError() ( #314 )
2022-11-09 20:49:35 -05:00
Nikolay Edigaryev
b21dbbe3a3
Fetcher: do not use cookies to avoid CSRF checks ( #312 )
...
* Fetcher: do not use cookies to avoid CSRF checks
* Explain why we disable cookies
* Rename getURLSession() → createURLSession() and move it below
2022-11-09 14:27:45 -05:00
Nikolay Edigaryev
ee0fbdd83d
OCI: pull blobs via file ( #306 )
...
* OCI: pull blobs via file
* Explain why we delete the downloaded file after opening a handle to it
* Further abstract away ways to fetch a URLRequest
* No need to cast HTTPURLResponse to HTTPURLResponse
* Fetcher: no need to be a delegate anymore
* Fetcher.fetch() can be made static
2022-11-09 19:36:41 +04:00
Nikolay Edigaryev
fb954b7cc1
tart list: support -q (or --quiet) for automation purposes ( #293 )
2022-11-02 11:49:45 -04:00
Pete Goldsmith
3d0d889c99
Remove whitespace ( #285 )
2022-10-22 08:17:42 -04:00
Nikolay Edigaryev
0e77f14dd7
OCI: always read channel until end ( #284 )
2022-10-18 11:44:14 -04:00
Nikolay Edigaryev
39e1b84423
Use URLSession.dataTask() with delegate instead of URLSession.bytes() ( #282 )
...
* Use URLSession.dataTask() with delegate instead of URLSession.bytes()
* Use URLSession.shared instead of creating a new one each time
2022-10-18 08:54:28 -04:00
Fedor Korotkov
af7530ee50
Relax status code acceptance ( #281 )
...
* Relax status code acceptance
Fixes #273
* added a comment
2022-10-17 21:42:25 +04:00
Nikolay Edigaryev
36bb68a72d
tart run: deprecate --with-softnet and introduce --net-softnet ( #274 )
2022-10-14 18:38:39 +04:00
Nikolay Edigaryev
afd707eedf
OCI reference parser: allow dashes in host name ( #275 )
2022-10-14 16:36:25 +04:00
Nikolay Edigaryev
c67efb88f3
Fix tart prune --cache-budget logic ( #272 )
2022-10-14 01:43:37 +04:00
Nikolay Edigaryev
667de2a199
Monitor Softnet process and throw if it terminates prematurely ( #270 )
2022-10-12 20:00:13 +04:00
Nikolay Edigaryev
44650e9713
Improve RemoteName parser ( #225 ) ( #269 )
...
* Improve RemoteName parser
* Remove Parsing import
* Permit namespace components to contain separators, but no more than one
* Add testNoPathTraversal
2022-10-11 22:59:44 +04:00
Nikolay Edigaryev
62ee42de3b
Plug URLSession.bytes() memory leak ( #267 )
2022-10-10 18:38:57 +04:00
Nikolay Edigaryev
89301d114e
Log cache pruning to $TART_HOME/tart.log ( #265 )
...
* Log cache pruning to $TART_HOME/tart.log
* Log zero capacities
2022-10-07 23:01:42 +04:00
Nikolay Edigaryev
dbb33d0651
Don't download IPSWs into memory ( #262 )
2022-10-06 20:33:34 +04:00
Nikolay Edigaryev
166e3e570f
Ditch AsyncHTTPClient in favor of URLSession ( #260 )
2022-10-05 00:39:36 +04:00
Nikolay Edigaryev
7a2c20ba30
tart create: support fetching URLs specified in the --from-ipsw option ( #256 )
...
* tart create: support fetching URLs specified in the --from-ipsw option
* Use x-amz-meta-digest-sha256 header to cache IPSWs
2022-09-27 23:36:18 +04:00
Nikolay Edigaryev
e90d53eceb
tart delete: allow removing multiple VMs at once ( #257 )
2022-09-27 10:30:44 -04:00
Nikolay Edigaryev
afbc2e0764
tart ip: keep waiting for the /var/db/dhcpd_leases file to appear ( #254 )
2022-09-22 10:24:14 -04:00
Fedor Korotkov
0229138bd5
Fixed wait delay for IP command ( #250 )
...
I initially wanted a one-second wait but made a human mistake.
Fixes #249
2022-09-19 21:44:14 +04:00
Nikolay Edigaryev
4d08e6365e
Set line-buffered output for stdout and introduce --graphics for tart run ( #248 )
...
* Set line-buffered output for stdout
* tart run: introduce --graphics
* Update Sources/tart/Commands/Run.swift
Co-authored-by: Pete Goldsmith <peter.n.goldsmith@gmail.com>
* Update Sources/tart/Commands/Run.swift
Co-authored-by: Pete Goldsmith <peter.n.goldsmith@gmail.com>
Co-authored-by: Pete Goldsmith <peter.n.goldsmith@gmail.com>
2022-09-19 21:43:37 +04:00
Nikolay Edigaryev
4e20ea8f72
tart run: introduce --net-bridged ( #245 )
...
* tart run: introduce --net-bridged
* tart.entitlements: add com.apple.vm.networking
2022-09-14 17:53:04 +04:00
Nikolay Edigaryev
678ce0a55a
Introduce "tart rename" command to rename VMs ( #246 )
...
* Introduce "tart rename" command to rename VMs
* Remove unused SystemConfiguration import
* Update Sources/tart/Commands/Rename.swift
Co-authored-by: Pete Goldsmith <peter.n.goldsmith@gmail.com>
Co-authored-by: Pete Goldsmith <peter.n.goldsmith@gmail.com>
2022-09-14 17:44:26 +04:00
Fedor Korotkov
6321d547cf
Improve available capacity checking ( #240 )
...
* Improve available capacity checking
* Fixed expression
2022-09-12 21:55:25 +04:00
Nikolay Edigaryev
f241e21614
Self-hosted temporary directory ( #238 )
2022-09-12 20:56:52 +04:00
Pete Goldsmith
87f29cc11f
Clarify requirements for `dir` argument ( #231 )
2022-09-07 09:02:46 -04:00
Pete Goldsmith
90d1393137
Handle tilde in path for directory share ( #233 )
...
* Expand Tilde in path
* Expand tilde in disk paths
2022-09-07 08:15:29 -04:00
Nikolay Edigaryev
625d431d10
Revert "Improve RemoteName parser ( #225 )" ( #230 )
...
This reverts commit ae7018c31f .
2022-09-06 22:13:30 +04:00
Nikolay Edigaryev
4648e1aea1
tart clone: clone VM and generate MAC under a file lock ( #215 )
...
* tart clone: clone VM and generate MAC under a file lock
* Lock concurrent "tart pull"'s for the same host
* Config: ensure Tart's home and cache directories always exist
2022-09-06 21:33:51 +04:00
Nikolay Edigaryev
ae7018c31f
Improve RemoteName parser ( #225 )
...
* Improve RemoteName parser
* Remove Parsing import
* Permit namespace components to contain separators, but no more than one
* Add testNoPathTraversal
2022-09-06 17:28:49 +04:00
Pete Goldsmith
e54c89da0c
Clarify if guest or host is unsupported ( #228 )
2022-09-06 09:23:41 -04:00
Nikolay Edigaryev
9a0ec3e6b0
Fix cache reclaimed bytes calculation ( #223 )
2022-09-01 16:12:48 -04:00
Fedor Korotkov
400f85a493
Check Tart Home for auto-pruning ( #220 )
...
Otherwise it's weird we check $TMP but prune $TART_HOME
2022-09-01 15:44:19 -04:00
Fedor Korotkov
0105280b5d
Support plaintext auths from Docker config ( #219 )
2022-09-01 23:10:52 +04:00
Nikolay Edigaryev
0cad2e454c
Directory sharing support ( #211 )
2022-08-30 10:26:16 +04:00
Nikolay Edigaryev
17dcf942c1
Terminate VM on GUI window close ( #210 )
2022-08-30 02:41:58 +04:00
Nikolay Edigaryev
6296df7c0c
Credential helpers: "credHelpers" map is optional in Docker's config ( #209 )
2022-08-29 16:38:51 -04:00
Fedor Korotkov
c54b140750
Support Docker Helpers ( #205 )
...
Fixes #167
2022-08-29 20:26:53 +04:00
Fedor Korotkov
048a5506df
Support trackpad on macOS and clipboard sharing on Linux ( #202 )
...
Fixes #66
Relates to #14 since fixes on Linux
2022-08-27 20:05:45 +04:00
Nikolay Edigaryev
195a4b3a72
Make UnsupportedOSError more user-friendly ( #192 )
...
* Make UnsupportedOSError more user-friendly
* tart prune: allow only specifying a --gc flag
2022-08-24 15:03:54 -04:00
Nikolay Edigaryev
59393df2e1
Linux support ( #190 )
...
* Linux support
* Support macOS 12
* Improve readability a bit
* Remove useless variable
2022-08-23 22:38:50 +04:00
Nikolay Edigaryev
732c8244a4
Run garbage collection after each symlink and expose --gc in tart prune ( #191 )
2022-08-23 17:31:02 +04:00
Nikolay Edigaryev
9e69c8c161
testGetAndSetAccessTime: fix flakiness ( #187 )
2022-08-18 14:42:54 -04:00
Nikolay Edigaryev
e4ac2275b9
tart ip: show a warning when DHCP lease and ARP cache entries mismatch ( #186 )
2022-08-18 22:25:02 +04:00
Nikolay Edigaryev
1a1f19e169
Implement garbage collection when deleting cached OCI VMs ( #185 )
...
* Properly calculate remotely-retrieved manifest digests
* Implement garbage collection when deleting cached OCI VMs
2022-08-18 17:13:06 +04:00
Nikolay Edigaryev
fea916dacc
OCI blob compression: fix Data memory leak when using InputFilter ( #183 )
...
* OCI blob compression: fix Data memory leak when using InputFilter
* Rename mappedDiskOffset to mappedDiskReadOffset
* Update progress.completedUnitCount differently
2022-08-17 12:57:39 -04:00
Nikolay Edigaryev
14059a1d6f
tart {pull,clone}: add missing --insecure support ( #181 )
...
Co-authored-by: Nikolay Edigaryev <edi@microsun.local>
2022-08-17 01:31:19 +04:00
Nikolay Edigaryev
440681320a
Introduce "tart prune" command ( #164 )
2022-08-12 16:43:04 +03:00
Fedor Korotkov
a80954c888
Do not include Content-Range for monolithic uploads ( #179 )
...
* Do not include Content-Range for monolithic uploads
Some registries still assumes it's a chunked upload and verifies the "chunk" size which is too big.
* Update Sources/tart/OCI/Registry.swift
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
2022-08-12 16:33:15 +03:00
Nikolay Edigaryev
cc8201dee6
OCI: support insecure registries and custom ports ( #174 )
2022-08-12 16:24:14 +03:00
Fedor Korotkov
2cab49b3f1
Use Ventura APIs for recovery mode ( #175 )
2022-08-12 08:02:44 +03:00
Fedor Korotkov
e2b7f12388
Support chunked uploads ( #159 )
...
* Support chunked uploads
* Rebase fixes
* Bump swift http client
2022-08-08 10:16:47 -04:00
Fedor Korotkov
617a5d02dc
Fixed potential infinity auth ( #173 )
...
Follow up to an attempt in #169
2022-08-08 16:50:13 +03:00
Nikolay Edigaryev
b83bce4544
tart login: read whole stdin contents instead of just a line ( #170 )
2022-08-02 16:52:35 +03:00
Nikolay Edigaryev
7d16516b6a
OCI: gcr.io fixes ( #169 )
...
* Make sure we don't craft an URLComponents with an empty query items
* Prevent auth() infinite loop
* OCI: ignore invalid RFC 3339 formatted dates
2022-08-01 19:24:11 -04:00
Nikolay Edigaryev
56ddd8df75
OCI's HTTP client: prevent the usage of NIO Transport Services ( #168 )
2022-08-01 18:17:50 -04:00
Fedor Korotkov
b1534a05d5
Configure audio devices to pass through the signal from/to the host ( #163 )
...
Fixes #161
2022-08-01 17:54:55 +03:00
Nikolay Edigaryev
f54e7c2cab
tart login: only store one credential per registry ( #162 )
2022-08-01 09:55:37 +03:00
Nikolay Edigaryev
85dfa961c9
tart run: introduce --disk option ( #156 )
...
* tart run: introduce --disk option
* Document how to create disks using Disk Utility
2022-07-26 09:25:23 -04:00
Nikolay Edigaryev
3a74fc35e6
Introduce TART_HOME ( #157 )
2022-07-25 17:01:46 +03:00
Nikolay Edigaryev
7bf7f890c4
tart run: return exit status 2 when VM is already running ( #155 )
2022-07-21 07:53:47 -04:00
Nikolay Edigaryev
48cd4b47e4
Move full-fledged VNC support to --experimental-vnc ( #154 )
2022-07-21 12:37:43 +03:00
Nikolay Edigaryev
c1dee4f9b2
Credentials: update Keychain entry if it already exists ( #149 )
2022-07-13 12:35:44 -04:00
Nikolay Edigaryev
52abb7589c
OCI: support Basic authentication scheme ( #145 )
...
* OCI: support Basic authentication scheme
* .isValid → .isValid()
* tart login: make --username optional
2022-07-08 16:36:00 +03:00
Nikolay Edigaryev
4386192161
tart login: introduce --username and --password-stdin flags ( #143 )
2022-07-05 16:32:20 +03:00
Nikolay Edigaryev
85429cea0a
Retrieve IP from DHCPD leases file instead of ARP cache ( #141 )
...
* Retrieve IP from DHCPD leases file instead of ARP cache
* Reference PLCache_read() from the retrieveRawLeases() parsing function
2022-06-30 17:58:52 +03:00
Nikolay Edigaryev
384abcd0bd
OCI: make sure annotations are sorted ( #138 )
2022-06-27 16:25:52 +03:00
Fedor Korotkov
92529afa23
Handle `tart run --no-graphics --vnc` properly ( #137 )
...
Let's start a VNC server but not force open Screen Sharing if `--no-graphics` is also passed.
2022-06-24 22:54:41 +03:00
Nikolay Edigaryev
e12f95878e
Softnet: an alternative to built-in NAT with better isolation ( #48 )
...
* Softnet: an alternative to built-in NAT with better isolation
* Softnet: increase socketpair(2) socket buffer sizes to 1 MiB
* Pass VM's FD and MAC address to the Softnet
* Softnet: implement graceful shutdown
* Bring back the dispatchMain() and task cancellation
* tart pull: check for cancellation when pulling response body
* Don't dispatchMain() in withTaskCancellationHandler()
* Move VNC URL opening logic into VNCWrapper.open()
2022-06-21 19:17:02 +03:00
Fedor Korotkov
7efef28250
Allow VNC for Recovery mode ( #134 )
2022-06-20 20:08:31 +03:00
Nikolay Edigaryev
1e90752ded
Full-fledged VNC support ( #126 )
2022-06-20 18:53:17 +03:00
Fedor Korotkov
2020324ef5
Fixed --no-graphics ( #132 )
...
Followup to #129 which broke CLI integration because `--no-graphics` option didn't wait for anything.
2022-06-20 10:28:10 -04:00
Nikolay Edigaryev
b581db5be4
OCI: make annotations optional ( #130 )
...
* OCI: make annotations optional
* Don't initialize annotations by default
2022-06-17 10:53:52 -04:00
Fedor Korotkov
89217c23a2
Fixes for Ventura ( #129 )
...
* Fixes for Ventura
Still a noob in SwiftUI and Swift concurrency, but it seems on Ventura a task group is not actually running on main or something. Either way I think this change simplifies things but launching a VM in a task and then just continuing with either VNC or built-in graphics.
* Check VM's state
2022-06-17 10:04:57 -04:00
Nikolay Edigaryev
f59ef2722d
OCI: store uncompressed disk size in manifest ( #128 )
2022-06-17 11:14:28 +03:00
Fedor Korotkov
7759c72a76
Don't use dispatchMain ( #123 )
2022-06-14 11:31:31 -04:00
Raymond
4cc8a9925a
accept larger disk size ( #122 )
2022-06-10 09:05:57 -04:00
Nikolay Edigaryev
b16bbf587a
Registry: log upload location when encountering blob pushing error ( #121 )
2022-06-08 17:23:16 +03:00
Fedor Korotkov
87733290e7
Smaller icon ( #116 )
...
Initially it wasn't fully following the [guidelines](https://developer.apple.com/design/human-interface-guidelines/macos/icons-and-images/app-icon/ ).
Fixes #112
2022-06-06 18:38:30 +03:00
Fedor Korotkov
c14b46adc3
Make sure VM directory exists before moving ( #111 )
2022-06-03 23:22:11 +03:00
Nikolay Edigaryev
63329ef363
Atomic tart {create,clone,pull} operations using rename(2) ( #109 )
...
* tart clone: always re-generate MAC-address
This is not really an issue for non-enterprise users[1].
[1]: https://github.com/cirruslabs/tart/issues/20#issuecomment-1136944455
* Atomic tart {create,clone,pull} operations using rename(2)
* Print a nicer error message when attempting to double-run a VM
* tart clone: bring back the old MAC-address generation logic
* Ensure VMDirectory.temporary() will be deleted on failure
2022-06-01 11:02:31 -04:00
Nikolay Edigaryev
5446164a36
tart pull: introduce --populate-cache flag ( #103 )
...
* tart pull: introduce --populate-cache flag
* VMStorageOCI: introduce cache() method
* Review comments (#107 )
* Rename SetCommand back to Set
Co-authored-by: Fedor Korotkov <fedor.korotkov@gmail.com>
2022-05-28 23:20:24 -04:00
Nikolay Edigaryev
f3068b9055
tart login: verify credentials ( #102 )
...
* tart login: verify credentials
* Make DictionaryCredentialsProvider fileprivate to Login.swift
2022-05-26 09:31:46 -04:00
Fedor Korotkov
afa6b7b46c
Auto-detect screen DPI ( #106 )
...
* Auto-detect screen DPI
Fixes #104
* Added a comment
2022-05-26 12:23:13 +03:00
Fedor Korotkov
d277fb2941
Added helpfull messages to run command ( #100 )
2022-05-23 11:29:35 -04:00
Fedor Korotkov
088cdc51a3
Option to run with VNC ( #97 )
...
* Option to run with VNC
So copy/paste is working. For example, `tart run --vnc latest`.
Related to 14
* Add VNC task first
* Indicate the wait
2022-05-23 16:49:15 +03:00
Fedor Korotkov
afb23a3e3a
Init HTTP client only if Registry is used ( #99 )
2022-05-21 00:26:43 +03:00
Fedor Korotkov
35904dc637
Async http client for pull/push ( #95 )
...
* Use async http client for pull/push
* Don't update progress too frequently
* Removed unused variable
* Rebased after added tests
2022-05-20 11:04:21 -04:00
Nikolay Edigaryev
fec803277d
Registry functional/integration tests ( #96 )
...
* Registry functional/integration tests
* Remove DockerClientSwift import
* Encodable, Decodable → Codable
2022-05-20 09:52:37 -04:00
Nikolay Edigaryev
54a321df7f
Sort "tart list" by default ( #94 )
2022-05-19 15:05:16 -04:00
Fedor Korotkov
0a257a1547
Option to run in recovery mode ( #91 )
...
* Option to run in recovery mode
* Fixed typo
* Use Dynamic package to call private APIs
* Improved comment
* Move options closer to invocation
2022-05-19 08:17:05 -04:00
Nikolay Edigaryev
60c15e3e49
tart list: fix heading order ( #90 )
2022-05-18 14:20:52 -04:00
Fedor Korotkov
a1bcbdbf0b
Bump default CPU cores ( #86 )
...
To prevent frustrations like #68
2022-05-18 18:12:45 +03:00
Nikolay Edigaryev
c2da3fd919
Support "tart --version" ( #81 )
...
* Support "tart --version"
* Move CI.swift patcher into a separate script
Otherwise it doesn't work in GoReleaser.
2022-05-17 10:40:21 -04:00
Fedor Korotkov
63a2793c32
Support upper case in remote names ( #79 )
2022-05-16 18:14:42 +03:00
Fedor Korotkov
0fc3d3d1f4
Add virtual sound devices ( #78 )
2022-05-16 17:21:21 +03:00
Nikolay Edigaryev
60b705478b
Handle Ctrl + C properly ( #73 )
...
* Terminate when Ctrl+C is encountered when entering credentials
* Handle Ctrl+C by catching SIGINT and converting it to task cancellation
* maxCharacters instead of (buf.count - 2)
* readStdinCredential: fix maxCharacters to be 255
* "user" variable should be named "credential"
2022-05-16 09:56:30 -04:00
Nikolay Edigaryev
fa9e3146c1
tart list: filter out uninitialized VM directories ( #76 )
2022-05-16 08:30:58 -04:00
Nikolay Edigaryev
3dfe8f870c
Provide more details when VM's network attachment disconnects ( #74 )
2022-05-16 08:23:34 -04:00
Fedor Korotkov
7afa446a73
Change default disk size upon creation ( #71 )
...
To help with frustrations like https://github.com/cirruslabs/tart/issues/44#issuecomment-1126831261
Experts will still use `--disk-size` flag to tailor disk size for their needs.
2022-05-16 09:44:31 +03:00
Nikolay Edigaryev
d1bed25023
tart pull: be more liberal when accepting local image as argument ( #70 )
...
* tart pull: be more liberal when accepting local image as argument
* Update Sources/tart/Commands/Pull.swift
Co-authored-by: Fedor Korotkov <fedor.korotkov@gmail.com>
* Single sentence and consistent capitalization
Co-authored-by: Fedor Korotkov <fedor.korotkov@gmail.com>
2022-05-15 18:03:15 -04:00
Nikolay Edigaryev
8554e56e4b
Registry: use issued_at field in the token response message ( #65 )
...
* Registry: use issued_at field in the token response message
* Configure JSONDecoder instead of the Decodable itself
2022-05-12 22:33:02 +03:00
Fedor Korotkov
24375c24f3
Print total size of compressed layers ( #60 )
...
Before pulling an image.
2022-05-10 16:20:52 -04:00
Fedor Korotkov
2f5a6790d8
Refactored registry token handling ( #57 )
...
* Refactored registry token handling
* Update Sources/tart/OCI/Registry.swift
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
* Target our dedicated M1 Mini
Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
2022-05-09 16:13:22 +03:00
Nikolay Edigaryev
f6acbe8fe5
Registry: invalidate expired tokens ( #55 )
2022-05-08 19:46:11 -04:00
Fedor Korotkov
efc9c74b6c
Report if an image already pulled ( #52 )
2022-05-06 17:06:28 -04:00
Nikolay Edigaryev
4a60c41dd3
Registry: provide response body on auth token request failure ( #51 )
...
* Registry: provide response body on auth token request failure
* Clone.swift: fix typo
2022-05-06 14:19:27 -04:00
Fedor Korotkov
f20a98bf01
Smart generation of new MAC addresses ( #45 )
...
* Introduce --new-mac-address flag for Clone command
Related to https://github.com/cirruslabs/tart/issues/20#issuecomment-1116732505
* Smart generation of new MAC addresses
2022-05-06 20:38:56 +03:00
Nikolay Edigaryev
d5e3a7718e
Registry: suport pulling public images ( #50 )
2022-05-06 20:30:04 +03:00
Nikolay Edigaryev
a4db60d656
Registry: don't loose query parameters on URL absolutization ( #47 )
...
* Registry: don't loose query parameters on URL absolutization
* Registry: throw a proper exception when Location header parsing fails
2022-05-06 09:03:58 -04:00
Fedor Korotkov
29e08220e4
Get OCI credentials only when needed ( #46 )
...
So we don't even request them for a public image
2022-05-06 02:12:38 +03:00
Fedor Korotkov
cdf4932aa3
Improved logging a bit ( #43 )
...
* Improved logging a bit
* Progress for all bytes
2022-05-05 10:43:09 -04:00
Nikolay Edigaryev
95316c0d67
Support pulling/pushing VMs to OCI-compatible registries ( #32 )
...
* Support pulling/pushing VMs to OCI-compatible registries
* Registry: rename request() to endpointRequest() for clarity
* Registry: include JSON details on HTTP status code mismatch errors
* .cirrus.yml: run tests
* Fix testDigest
* Registry: set Content-{Length,Type} headers when pushing blob
* Refactor Registry.auth() and enrich RegistryError.AuthFailed
* Remove useless comment
* Fix WWWAuthenticate a bit and add tests
* WWWAuthenticate: expect a Bearer scheme
* Registry.auth(): document the passing of ["scope", "service"] parameters
* Clarify unexpected HTTP code error when retrieving auth token
* Make RemoteName parser more relaxed for now
* tart clone: pull the VM if it's OCI-based first
* VMStorageOCI: ensure the old symbolic link is overwritten
* tart push: support multiple remote VM names
* Logging: push/pull progress
* Use 500 MB chunks (instead of 500 MiB) to evenly cut disk
...which also uses powers of 10.
* Credentials: only read credentials labeled "Tart Credentials"
2022-05-03 14:30:26 -04:00
Fedor Korotkov
4a5efefbc9
Embed AppIcon.png within binary ( #30 )
...
* Build product explicitly
Without it resources are not embedded in the executable
* Embed icon in code
2022-04-22 10:29:52 +03:00
Fedor Korotkov
f07ffed6c8
--wait option for IP command ( #29 )
2022-04-19 19:56:59 +03:00
Fedor Korotkov
d55e5457f9
Make the disk size configurable upon creation ( #26 )
...
* Make the disk size configurable upon creation
I haven't found a way to make a VM aware of a larger disk size. So I didn't add `--disk-size` option to `set` command.
* Fixed size so it's pretty in the UI
* Hidden option to resize disk for testing
2022-04-18 17:46:19 +03:00
Fedor Korotkov
ad2db1461f
Update App Icon ( #28 )
2022-04-17 13:52:54 +03:00
Fedor Korotkov
cc31388c1b
Renamed disk file ( #24 )
...
.img is a standard extension for disk images on macOS. With this extension clicking on the file in finder it will be open in Dick Utilities for inspection.
2022-04-14 22:49:38 +03:00
Fedor Korotkov
e100cc0d7f
Add App Icon ( #23 )
2022-04-14 13:23:21 -04:00
Fedor Korotkov
75b5d63387
Refactored UI ( #22 )
...
* Simplified crafting of a VM config
* Configure display
* Propagate VM name to the title
2022-04-13 16:42:27 -04:00
Nikolay Edigaryev
466c3c568a
Add ability to modify VM's configuration (number of CPUs and memory size) ( #16 )
...
* VMConfig: store minimum CPU count and memory size separately
* Add ability to modify VM's configuration
* Enforce minimum CPU and memory requirements
* VMConfig: remove migration logic
2022-04-11 13:39:34 +03:00
Fedor Korotkov
9f8d3017d9
Handle incomplete MAC address ( #15 )
2022-03-29 12:07:03 -04:00
Fedor Korotkov
49d430b3c4
Update dependencies and styles ( #12 )
...
* Update deps and .editorconfig
* run config
2022-03-24 18:54:49 +03:00
Fedor Korotkov
dc1e502404
Logger ( #11 )
...
* Log progress
* ProgressObserver
* Reverted run configuration
* Cache *.ipsw files
* Use fraction
* Use datatask and pre-create cache folder
2022-03-22 22:17:23 -04:00
Fedor Korotkov
483627904c
Swift package simplified ( #7 )
...
* Convert project to a Swift Package
* SwiftEntitlementsPlugin
* Include .swiftpm
* Removed plugin
* Run configuration to run signed binary
* Cirrus CI Configuration
* Fixed worker label
2022-03-07 11:46:49 -05:00
Nikolay Edigaryev
13f2366754
Add ability to clone VMs ( #9 )
2022-02-23 23:45:21 +03:00
Nikolay Edigaryev
7a67deab81
Introduce "tart ip" command to retrieve a VM's IP address ( #8 )
...
* Introduce "tart ip" command to retrieve a VM's IP address
* VM running hint
2022-02-22 23:11:33 +03:00
Nikolay Edigaryev
8375e3cf7a
{cpuCount,memorySize}min → {cpuCount,memorySize}
2022-02-14 16:57:54 +03:00
Nikolay Edigaryev
6fc868e3ba
VMDirectory: use file extensions for config, disk and nvram
2022-02-14 16:55:28 +03:00
Nikolay Edigaryev
348d977f09
VMConfig: save pretty-printed JSON
2022-02-14 16:54:36 +03:00
Nikolay Edigaryev
09a8109f4b
Basic CLI implementation that wraps Virtualization.Framework
2022-02-11 17:38:31 +03:00