Repository navigation
Exclude recreatable container data from Time Machine - #2412
Merged
dkovba merged 2 commits intoNov 5, 2026
Merged
Conversation
Sparse image snapshots and container root filesystems make backups stall and can trigger thinning. Volume data stays included.
Open
2 of 3 tasks
3 of 7 tasks
Code Coverage
|
dkovba
reviewed
Oct 22, 2026
Contributor
|
Thank you for the contribution 👍 |
The exclusion is applied only when snapshots or containers is created. Setting it again on every start replaced a directory a person had included in backups. The docs now describe that exclusion for backup software in general, not only Time Machine.
dkovba
approved these changes
Oct 22, 2026
22 tasks
6 tasks done
5 of 6 tasks
This was referenced Nov 12, 2026
Closed
henrywang
added a commit
to henrywang/Berthly
that referenced
this pull request
Nov 12, 2026
Closes #236. Re-audits PARITY.md against container CLI 1.7.1, following #217 for 1.6.1. 1.7.1 changed no CLI flags outside `cluster` (diffed `ContainerCommands`, `Flags.swift`, and the cluster plugin between 1.6.1 and 1.7.1). ## Changes - **Header:** "Audited against" moves to 1.7.1 (2026-11-12). - **`stats`:** CPU is a percentage of one core, the CLI's `cpuUtilization` × 100 (#235). - **Run/Create:** - Empty DNS fields fall back to `[container.dns]` (apple/container#1614), and a value in the sheet overrides them. - Out-of-range cpus or memory get the CLI's own error, since 1.7.1 validates both on the client. - **Builder:** gets the `[container.dns]` defaults, or the gateway's resolver, and is recreated when its DNS changes (#233). - **`property`:** the list includes the `container.dns.*` defaults (#234). - **`cluster` (deliberate gap):** - Records the 1.7.1 changes: `load-image` replaced by `--shared-image-store` (apple/container#2437), `cluster ls` per cluster with `--nodes` (apple/container#2451), and per-worker cpus/memory (apple/container#2448). - Notes that the CLI now skips cluster nodes in `ls`/`start`/`stop`/`kill`/`delete`/`prune` (apple/container#2462), as Berthly already did (#204). `prune` isn't in #236's list, but the 1.7.1 source filters it too. - The revisit condition is half met: the new `container-core-clusters` XPC service only handles cluster records, and the command is still EXPERIMENTAL. Time Machine exclusion (apple/container#2412) and the smaller install (apple/container#2458) are daemon-side with no CLI command to compare against, so they get no entry. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
andrewkomkov
added a commit
to getgantry/gantry
that referenced
this pull request
Nov 12, 2026
Apple container **1.7.1** is out. The previously tracked version is `1.6.1`. Upstream notes: https://github.com/apple/container/releases/tag/1.7.1. A copy is in `docs/upstream/apple-container-1.7.1.md`. Most of the 1.7.1 support is already on main from PR #57 (`specs/001-apple-container-1-7-1`) and PR #50 (clusters). This PR adds no code. It adds the 1.7.1 features to the README and records the live check in spec 001. ## Review checklist - [x] New or changed CLI flags Gantry should surface: `cluster run --shared-image-store` and `--workers count=,cpus=,memory=` came in PR #50. The `run`, `create`, `machine` and `build` commands have no new flags in 1.7.1. - [x] Changed `--format json` shapes the DockerKit apple transport decodes: only `stats` changed (`cpuUtilization`). `AppleContainerJSON.statsBody` uses it, with the counter math as fallback (`Packages/DockerKit/Sources/DockerKit/AppleContainer/AppleContainerJSON.swift:653`). The live output matches the test fixture. `container ls --format json` did not change. - [x] Fixed upstream bugs Gantry currently works around: none. The BuildKit fixes (#2428, #2414) need no change in Gantry. The "Builder image is outdated" card covers the new builder shim 0.13.3 (`AppleBuilderStatus.imageUpdate`). - [x] `ContainerTooling.recommendedVersion` and feature gates: `recommendedVersion = "1.7.1"` (`Packages/AppCore/Sources/AppCore/ContainerTooling.swift:18`). The DNS defaults are gated on 1.7.0 (`containerDNSDefaultsVersion`, line 46). - [x] MCP tools and App Intents that expose the affected commands: `container_stats` uses the same DockerKit decoder. `apple_set_property` accepts lists for the DNS keys (PR #57). No App Intent shows the changed commands. - [x] README and CHANGELOG entries for whatever is adopted: the CHANGELOG has the #57 and #50 lines. This PR adds the 1.7.1 features to the README. ## Adopted (on main, checked again on CLI 1.7.1) - Stats `cpuUtilization` (#2146). The old calculation stays as fallback for 1.6.1. - `[container.dns]` defaults in `config.toml` (#1614): a list editor in System Properties, gated on 1.7.0. - Recommended kernel (#2447): Gantry has no kernel version of its own. It runs `system kernel set --recommended`. - Cluster changes (#2437, #2448, #2451, #2462) came in PR #50. The notice for missing or stopped cluster services came in PR #57. - Builder shim 0.13.3: the outdated builder card. ## Not adopted, and why - #2412 Time Machine exclusion, #2443 containerization 0.54.0, #2458 package size, #2470 copy blobs, #2416 bootstrapper, #2477 test library: internal changes. Gantry has nothing to show for them. - #2457, #2459, #2433, #2413: upstream docs and examples only. ## Checks - `swift test` in DockerKit: 324 tests passed. AppCore `AppleContainer171` tests: 19 passed. - `scripts/check-localization.py`: 0 problems in 28 languages. This PR adds no strings. - Debug build on CLI 1.7.1: a busy test container shows 98 % CPU. The CLI reports `cpuUtilization` 1.0 for it. - The Builder card shows 0.13.2 to 0.13.3 in light and dark mode. System Properties shows `[container.dns]`. The cluster list shows one row for each cluster. - Open (T035 in spec 001): two items had no check in the app. These are the DNS list editor sheet and the cluster services notice. The editor needs a click. The notice needs a broken cluster setup. --- <details><summary>Upstream release notes</summary> ## Highlights ⌨️ denotes breaking CLI changes. 👩💻 denotes breaking API changes. - Core - [`container stats` now reports `cpuUtilization` in JSON, YAML, and TOML output](apple/container#2146) - [Image snapshots and container filesystems are now excluded from Time Machine backups](apple/container#2412) - [Default Kata kernel is now 4.3.1 (`vmlinux-6.18.56-208-debug`)](apple/container#2447) - [Updated Containerization to 0.54.0](apple/container#2443) - Networking - [Default DNS nameservers, search domains, and options can now be set in `config.toml`](apple/container#1614) - Build - [Fixed `container build` failures with newer BuildKit](apple/container#2428) and [missing build context for steps that need the full context](apple/container#2414) - Kubernetes - ⌨️ [New `--shared-image-store` option on `container cluster run` to use the `container` image store from cluster nodes; removed the `load-image` subcommand](apple/container#2437) - ⌨️ [`container cluster ls` now shows one row per cluster; use `--nodes` for the per-node view](apple/container#2451) - ⌨️ [Container lifecycle commands no longer operate on cluster nodes](apple/container#2462) - [Worker node CPU and memory can now be set with `--workers count=<n>,cpus=<n>,memory=<size>`](apple/container#2448) ## What's Changed * Send an :authority on the builder gRPC connection by @jglogan in apple/container#2428 * Adds `container cluster` example. by @jglogan in apple/container#2433 * Update container-builder-shim to 0.13.3. by @jglogan in apple/container#2434 * use macos 27 runners by @madrob in apple/container#2436 * Fix empty followpaths handling in BuildFSSync by @onlyarnav in apple/container#2414 * Document container clean in the reclaim disk space guide by @lucasbrito-wdt in apple/container#2413 * Bump to use containerization 0.54.0 by @adityaramani in apple/container#2443 * feat(stats): report cpuUtilization in the machine-readable formats by @guanchzhou in apple/container#2146 * [k8s plugin] Create a cluster bootstrapper by @katiewasnothere in apple/container#2416 * Update recommended kernel to kata 4.3.1 release vmlinux-6.18.56-208-debug by @katiewasnothere in apple/container#2447 * Add TOML configuration for default DNS nameservers, search, options by @0xMH in apple/container#1614 * Add the ability to share container's image store with container cluster by @crosbymichael in apple/container#2437 * Reduce install package size and install footprint. by @jglogan in apple/container#2458 * Add reference to apple/container-examples and remove examples/ out of this repo by @michaelzhang114 in apple/container#2457 * Create container-core-clusters XPC service by @adityaramani in apple/container#2451 * Exclude recreatable container data from Time Machine by @abdullahtas0 in apple/container#2412 * Clean the `cluster-shim` build files with `make clean` by @dkovba in apple/container#2463 * Quiet the `cluster-shim` build output and show the swift progress in place by @dkovba in apple/container#2461 * Do not allow high level container lifecycle commands to operate on cluster nodes by @katiewasnothere in apple/container#2462 * Switch to copy blobs by @crosbymichael in apple/container#2470 * Add option to set cpus and memory resources for worker nodes of cluster by @katiewasnothere in apple/container#2448 * Removed bug-report-how-to.md as this info is now consolidated in CONTRIBUTING.md by @michaelzhang114 in apple/container#2459 * Move HostStoreServer into a library so tests don't link the executable by @katiewasnothere in apple/container#2477 ## New Contributors * @madrob made their first contribution in apple/container#2436 * @onlyarnav made their first contribution in apple/container#2414 * @lucasbrito-wdt made their first contribution in apple/container#2413 * @abdullahtas0 made their first contribution in apple/container#2412 **Full Changelog**: apple/container@1.6.1...1.7.1 </details> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: andrewkomkov <33517893+andrewkomkov@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Important
All commits must be signed and verified. Pull requests containing unsigned or unverified commits cannot be built or merged. See the GitHub documentation for instructions.
For all but trivial fixes, make sure to first create a GitHub issue that concisely describes the bug or desired enhancement as justification for the change. Large PRs with no justifying issue will be closed.
Type of Change
Motivation and Context
Fixes #2406.
Image snapshots and container root filesystems are large sparse files. Backup software that honors the exclusion attribute, including Time Machine, backs them up slowly, and that can trigger thinning of older backups. Both can be recreated by pulling the image or creating the container again.
snapshots/andcontainers/receive the sticky backup exclusion only when those directories are first created. An existing directory is left unchanged, so a person who includes it in backups again keeps that choice. Named volume data undervolumes/stays included.Testing
swift test --filter testNewDirectoryIsExcludedAndExistingChoiceIsKeptpassed. The test checks that a newly created directory is excluded, that a siblingvolumes/directory is left alone, and that clearing the exclusion and ensuring the directory again does not put the exclusion back.