Commit Graph
88 Commits
Author SHA1 Message Date
Danny Canter 3cf8eeebf4 SandboxContext: Remove AttachProcessRequest/Response (#121)
These were not used in any rpcs and were a leftover idea.
2025-06-13 21:56:54 -07:00
Danny Canter 8923495949 Vminitd: Remove unneeded mkdir (#123)
The rootfs should be mounted by this point in oci alteration code.
2025-06-13 21:56:25 -07:00
Dmitry Kovba a3cb1f0103 Update to Swift 6.2 and Swift 6.2-snapshot in vminitd (#94)
This PR resolves https://github.com/apple/containerization/issues/58 and
https://github.com/apple/containerization/issues/119. Requires updating
Swift and Static Linux SDK on GitHub runners. Please also see
https://github.com/apple/container/pull/195.
2025-06-13 17:46:30 -07:00
Kathryn Baldauf 4751d073bb Improve release tag regex (#122)
Matches changes made in https://github.com/apple/container/pull/187 by
@Thedarkmatter10

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-13 14:45:16 -07:00
Seyed Mojtaba Hosseini Zeidabadi 763141633c build: extend the swift-syntax version range (#97)
Building Swift-Syntax can be time-consuming, but this issue has been
resolved in the latest version by using a prebuilt binary. This
improvement enhances CI build times and the overall quality of the
package.

I’ve kept the version at 600 for compatibility reasons, but it might be
possible to start from 601 as well.
Please let me know.
Thanks
2025-06-13 11:20:50 -07:00
Kathryn Baldauf 4300595d03 Add fallback year or hawkeye formatting if no git attributes (#120)
Matches https://github.com/apple/container/pull/180

This adds a default year to use when a file does not yet have git
attributes (aka for a newly created file).

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-13 09:55:37 -07:00
Dmitry Kovba 256daaf481 Update issue templates (#114)
Please see commits for the list of changes.
2025-06-13 09:10:43 -07:00
Aditya Ramani a4a0cdfae1 Add a way to detect if a process' io has completed (#110)
This change adds a new private method `waitIoComplete` on the
`LinuxProcess` type.

This method is called internally when the user calls `wait` for a
process - and it tries to give the IO streams some time to clear their
buffers.

Internally, this method sets up an `AsyncStream` down which an item is
sent when the vsock connection for either stdout/stderr is terminated.
We get this termination signal when the readability handler for the
associated fd fires with a no available data.

Inside the guest - once we are done relaying the IO from the process
into the socket connection, we close the socket fd which triggers the
above.

All this logic is wrapped around a timeout of 3 seconds, just to ensure
the method does not block forever.

---------

Signed-off-by: Aditya Ramani <a_ramani@apple.com>
2025-06-13 11:23:41 -04:00
Danny Canter a56fdb7046 LinuxContainer: Remove extraneous extensions (#117)
Not sure why we had this type in 12 different sections 😅.
2025-06-13 10:14:19 -04:00
Danny Canter 90dfc9d90e EXT4: Adjustments to file names and visibilities (#112)
- FileTimestamps constructor that actually let you provide values was
not public, so it wasn't possible to pass in values other than nil. This
change makes the other constructor and the underlying fields public.
- Rename EXT4+Format to EXT4+Formatter
- Rename EXT4+Export to EXT4Reader+Export
- Make the superblock publicly accessible in the reader like the docs
for the product states.
2025-06-12 23:32:45 -07:00
Kathryn Baldauf 6d9e4b9c4d Add issue template for containerization (#102)
Matches templates made in container here
https://github.com/apple/container/pull/152.

Points questions to the container Discussions.

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-12 15:18:06 -04:00
Danny Canter 28199a7d9e Add Swift Package Index docs publishing (#107) 2025-06-12 15:16:34 -04:00
Danny Canter 4f3622a4e5 cctl: Use AsyncSignalHandler for sigwinch (#105)
We already have a type that does what the setupSigwinchHandler method
was doing.
2025-06-12 10:38:34 -04:00
Danny Canter 0f18608f0e gitignore: Remove editor specific git ignore rules (#106)
These truthfully should be up to users to maintain, as trying to add
everyones editor of choice config directories here isn't ideal.

This additionally adds a section in contributing on the new stance.
2025-06-12 10:37:59 -04:00
Danny Canter b39f132510 Vminitd: Always parse /etc/passwd (#104)
Fixes #103 (and should fix
https://github.com/apple/container/issues/108)

Today we only parse if the username field of the runtime spec is set,
but this misses if someone just supplied the integer uid and gid fields
only.
2025-06-12 10:19:31 -04:00
Kathryn Baldauf 7c063dfbe4 Remove most uses of env variables for image registries (#100)
When we were testing the repo, we added authentication to most of the
registry tests so that we could access private images. Now that the
images are public, this PR removes the use of REGISTRY_TOKEN and
REGISTRY_USERNAME in tests that no longer require authenticating.

Note: REGISTRY_TOKEN, REGISTRY_USERNAME, and REGISTRY_HOST are still
required in the CI to push images and for a few registry tests. So the
env variables are not completely removed. The variables are only used in
the test tool cctl and in our swift tests.

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-12 10:16:43 -04:00
Michael Crosby 5d2d7a1bc3 update license header removing new line (#99)
Fixes #63

Signed-off-by: crosbymichael <michael_crosby@apple.com>
2025-06-12 09:57:35 -04:00
Danny Canter 4b05e5f231 CONTRIBUTING: Add blurb about requiring signed commits (#98)
We require signed commits as of yesterday, and it'd be nice to have this
in writing somewhere to avoid contributors getting blindsided when
github has a scary x on the merge button.
2025-06-11 13:24:59 -07:00
Seyed Mojtaba Hosseini Zeidabadi 6bb3d1ad1f Fix: extended in throughout the code (#92)
- Corrected the typo in the method name (`Extened` → `Extended`)
 - Updated all references to reflect the corrected spelling
- Introduced a `@available(*, deprecated)` alias for the original method
to maintain backward compatibility, as it was part of the public API
2025-06-11 12:49:23 -07:00
Seyed Mojtaba Hosseini Zeidabadi 27db60af22 fix: structure in createOCILayoutStructure (#93)
Both the callee and caller names have been corrected.
2025-06-11 14:51:15 -04:00
Dmitry Kovba f245ae63b3 Improve @SendableProperty (#91)
This PR ensures that we enter a lock inside the `@SendableProperty`
implementation as soon as we access a computed property. Additionally,
it mirrors the access level of the original property. Both changes are
required for [improved
accuracy](https://github.com/apple/container/pull/144) of progress
updates in container. Additionally, it should resolve
https://github.com/apple/containerization/issues/60 that occurs on
certain configurations.

Please tag as 0.1.1 after merging.
2025-06-11 14:13:21 -04:00
Alexander 0cb8d29462 Updated gitignore: .idea (#90)
Added .idea to .gitignore file
2025-06-11 10:50:32 -07:00
ronbo 1ee7d10cca Add swiftly link (#95)
add link to swiftly toolchain manager
2025-06-11 10:32:40 -07:00
Danny Canter 943723315b LinuxContainer: Ensure we close guest agent connections (#87)
Use scoped access to the agent connection to ensure the vsock fds are
close(2)'d.

### Note
In a follow up I'd like to change `LinuxProcess` to dialing the agent
connection inside of `.start()`. I don't like needing to pass it an
agent connection. It has a reference to a vm so it can easily dial
inside itself if it needs to.
2025-06-11 11:44:06 -04:00
Danny Canter 7320f8360e VZVirtualMachineInstance: Adjust silent success behavior of nested virt (#88)
Fixes #85

The virtualization bool on LinuxContainer mostly just forwards to
VZVirtualMachineInstance which today would silently take your boolean
and do nothing if the underlying platform doesn't have support for it.
This is (to me) arguably worse than erroring, as it gives the client a
false security that the setting is on, and they should have virt
capabilities in the container/guest now.

This change makes it so that we throw a ContainerizationError for this
case, with a code of .unsupported so it's checkable by a user if they
want more information on the "why".
2025-06-11 11:39:39 -04:00
Dmitry Kovba bc1032e218 Require having Xcode 26 beta (#84)
This PR requires installing Xcode 26 beta until we resolve
https://github.com/apple/containerization/issues/66.
2025-06-11 10:43:52 -04:00
Dmitry Kovba 61379dcf65 Update availability checks to macOS 26 (#80)
This PR updates availability checks for macOS 16 to macOS 26.
2025-06-11 10:42:25 -04:00
Noritaka Kobayashi 69827b55d2 refactor: remove extraneous "break" (#76)
remove extraneous "break"
2025-06-10 21:36:42 -07:00
Spencer King 6d18db68ff docs: Avoid using Latin abbreviations in documentation (#81)
Remove Latin abbreviations from the documentation in accordance with the
[Apple Style Guide](https://help.apple.com/applestyleguide/). This
change does not impact any abbreviations used in code comments since
those are not covered by the style guide.
2025-06-10 21:36:18 -07:00
Iceman 5258424e36 Fetch without chunking in parallel (#75)
## Issue

When pulling images, the download speed appears to be slower compared to
Docker.
I found that parallel chunk generation was being performed during the
layer download process.
While individual chunks allow parallel download operations, the overall
process remains sequential between chunks.
This results less performance when chunks contain both small and large
layers mixed together.

## Changes

Discontinued chunk-based segmentation to enable more efficient parallel
downloads.

## Results(in my local env)

| image | layers | old | new |
| ---|---|---|---|
| node:latest | 12 | 1m15s | 1m10s |
| ghcr.io/norio-nomura/swift_discord_bot:main | 54 |  2m45s | 2m30s |

<details>
<summary>raw terminal log</summary>

```
❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_old images pull docker.io/library/node:latest
image pulled
bin/cctl_old images pull docker.io/library/node:latest  42.37s user 6.60s system 64% cpu 1:15.94 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_new images pull docker.io/library/node:latest
image pulled
bin/cctl_new images pull docker.io/library/node:latest  42.27s user 6.72s system 69% cpu 1:10.58 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_old images pull docker.io/library/node:latest
image pulled
bin/cctl_old images pull docker.io/library/node:latest  45.65s user 7.36s system 70% cpu 1:15.64 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_new images pull docker.io/library/node:latest
image pulled
bin/cctl_new images pull docker.io/library/node:latest  39.76s user 6.32s system 65% cpu 1:10.50 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_old images pull docker.io/library/node:latest
image pulled
bin/cctl_old images pull docker.io/library/node:latest  42.47s user 6.75s system 65% cpu 1:14.72 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_new images pull docker.io/library/node:latest
image pulled
bin/cctl_new images pull docker.io/library/node:latest  42.28s user 6.65s system 69% cpu 1:09.93 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_new images pull ghcr.io/norio-nomura/swift_discord_bot:main
image pulled
bin/cctl_new images pull ghcr.io/norio-nomura/swift_discord_bot:main  103.83s user 18.71s system 81% cpu 2:30.02 total

❯ rm -rf ~/Library/Application\ Support/com.apple.containerization && time bin/cctl_old images pull ghcr.io/norio-nomura/swift_discord_bot:main
image pulled
bin/cctl_old images pull ghcr.io/norio-nomura/swift_discord_bot:main  120.79s user 20.70s system 85% cpu 2:45.26 total
```
</details>


<details>
<summary>patch for download only</summary>

```diff
diff --git a/Sources/cctl/ImageCommand.swift b/Sources/cctl/ImageCommand.swift
index 84c5218..4aa4bb8 100644
--- a/Sources/cctl/ImageCommand.swift
+++ b/Sources/cctl/ImageCommand.swift
@@ -127,6 +127,7 @@ extension Application {
                 }
 
                 print("image pulled")
+                return
 
                 let tempDir = FileManager.default.uniqueTemporaryDirectory(create: true)
                 if let platform {
```
</details>
2025-06-10 21:26:36 -07:00
Dmitry Kovba 4ad3c996f0 Update the names of Xcode, macOS, and Apple silicon (#83)
This PR updates the names of Xcode and macOS to the official names used
in https://developer.apple.com/download/applications/. Also, it fixes
the capitalization in "Apple silicon".
2025-06-10 18:03:25 -07:00
Satyam Singh 5240d36464 fix: quote inputs and improve shell conditionals for safety (#68)
This PR improves **safety and consistency** of the GitHub Actions
workflow (build-test-images.yml) file by:
  - Using **[[ ... ]]** **instea**d of **[ ... ]** for conditionals.
- Adding **double quotes** around inputs and refs to **avoid**
evaluation issues.

This helps prevent bugs in **shell parsing**, especially with **empty or
misinterpreted** input values.


@katiewasnothere @wlan0
2025-06-10 13:54:48 -07:00
Aviram HassanandDanny Canter 6216c6eee8 clarified linux/amd64 images support (#77)
#70 Made it clearer as I wasn't sure if the API allows us to run x64
binaries or also run such Docker images.

---------

Signed-off-by: Aviram Hassan <aviramyhassan@gmail.com>
Co-authored-by: Danny Canter <danny_canter@apple.com>
2025-06-10 15:56:18 -04:00
Danny Canter d1a8fae1af Add links in README to the various products (#73) 2025-06-10 09:48:31 -07:00
Danny Canter de304aae3d Vminitd: Adjust guest agent logs (#72)
There was a couple spots where the wrong rpc was listed in the log, as
well as most of them not logging the containerID along with the process
ID.
2025-06-10 12:12:44 -04:00
Noritaka Kobayashi 4181e50775 refactor: fix typos (#64)
fix typos
2025-06-10 08:19:50 -07:00
34celsius 8a92500f8c docs: Fix typo and broken nested list in kernel/README.md (#57)
This change fixes a broken nested list and updates the phrase "light
weight" for consistency with
https://github.com/apple/containerization/pull/50.
2025-06-10 03:21:40 -07:00
Riya Amemiya 918fb7e252 Fix grammar: "speed of which" → "speed at which" in CONTRIBUTING.md (#67)
## Summary
Corrects a grammatical error in CONTRIBUTING.md line 36.

## Change
**Line 36**: `speed of which` → `speed at which`

The preposition "of" is incorrect when connecting the noun "speed" with
the relative pronoun "which". Standard English requires "at" (e.g., "the
speed at which", "the rate at which").

**Before:**
```
This will greatly help the priority setting and speed of which maintainers can get to your issue.
```

**After:**
```
This will greatly help the priority setting and speed at which maintainers can get to your issue.
```
2025-06-10 01:29:33 -07:00
Kei Kamikawa cbb1ee4cff Removed unused linux-config-aarch64 file (#62)
I think it is config-arm64 that you are using, so I have created a PR to
avoid confusion.
If you don't need it, please let me know so that I can Close it.
2025-06-09 17:55:11 -07:00
J Logan cd175a7972 Adds API link to README. (#61) 2025-06-09 17:35:36 -07:00
Kathryn Baldauf 73596530fe Remove image push tests (#55)
This removes two image push tests. We cannot have the CI push to our
ghcr registry since external users do not have write access for pushing
the image. We will explore a better solution.

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-09 17:28:24 -07:00
Kathryn Baldauf 2923b33836 Allow building docs from main (#53)
We eventually only want to support building docs from release branches
and tags, however, while we're working to initially set up the docs, we
may have some churn. So we want to be able to publish from main during
that churn.

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-09 16:40:22 -07:00
The Alchemist 91db40d99c Update README.md with minor correction (#50)
Not to be pedantic, but "light weight" is usually considered to be one
word.
2025-06-09 15:29:42 -07:00
J Logan 4981faadef Adds base path for GitHub Pages publishing. (#48) 2025-06-09 15:07:50 -07:00
Danny Canter 66e991ac05 Clarify source stability (#45) 2025-06-09 11:38:25 -07:00
J Logan 56c06be9a9 Fine-tune build requirements. (#44) 2025-06-09 10:49:37 -07:00
Madhu Venugopalandmadhu a595d0cca5 Updating latest macOS and Xcode versions (#43)
Co-authored-by: madhu <mvenugopal@apple.com>
2025-06-09 10:40:43 -07:00
Eric Ernst eade0a7a4d docs: add a baseline contributors.txt (#42)
Add initial contributors.txt for the project
2025-06-09 09:42:57 -07:00
Eric Ernst 8d094935af README: split prep, build and test directions into own sections (#41)
If we split this out, it'll be easier to point developers at specific
parts for setting up their build environment, versus building and
testing.

Signed-off-by: Eric Ernst <eric_ernst@apple.com>
2025-06-08 22:31:32 -07:00
J Logan e285dc0dd4 Set MTU to 1280 for containers. (#38)
- Needed for alpine containers in some instances.
- This should be configurable. Hardcoding in linkSet for now.
2025-06-08 21:02:23 -07:00