Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
37fc68f
Add the option to disable progress updates on image CLI calls (#146)
katiewasnothere Jun 11, 2025
2d262dc
Removes build variable that is not needed after launch. (#151)
jglogan Jun 11, 2025
2327e89
Remove trailing whitespace from GitHub workflows (#154)
pstoeckle Jun 11, 2025
5f7fe48
Add issue templates for bugs and features (#152)
katiewasnothere Jun 12, 2025
97d4ed6
Updated gitignore: .idea (#138)
KeoFoxy Jun 12, 2025
3838be5
Update protos and add builder shim version in Package.swift (#176)
katiewasnothere Jun 12, 2025
2ac52d4
Add missing link to repo CoC in issue template (#157)
katiewasnothere Jun 12, 2025
6f1f770
Remove temporary workaround for image auth to ghcr (#155)
katiewasnothere Jun 12, 2025
7ca5a43
define JSONDecoder() outside of for loop in load() (#159)
elijah-wright Jun 12, 2025
c114945
fix: typo (#153)
umitdemirci Jun 13, 2025
9d75932
Adds Swift Package Index crawler metadata. (#181)
jglogan Jun 13, 2025
8f2d4d7
Fix: consolidate UserDefaults service name (#161)
yibozhuang Jun 13, 2025
206f3cc
Improve accuracy of progress updates (#144)
dkovba Jun 13, 2025
2a12f01
container registry login host:port error fix (#170)
makhov Jun 13, 2025
c0433be
Update issue templates (#184)
dkovba Jun 13, 2025
878ebbd
Add default year for hawkeye formatting (#180)
katiewasnothere Jun 13, 2025
2364f33
Fix release workflow: tag regex, artifact validation, and token usage…
Thedarkmatter10 Jun 13, 2025
84edaa2
Fix typos (#122)
pstoeckle Jun 13, 2025
e6b7a29
README: Add project status (#192)
dcantah Jun 13, 2025
c5392e8
Remove the system restart command (#196)
adityaramani Jun 13, 2025
2473016
fix(common.yml): globalize CURRENT_SDK, improve shell safety and imp…
Thedarkmatter10 Jun 13, 2025
a84389e
Remove editor specific git ignore rules (#197)
katiewasnothere Jun 13, 2025
098021f
refactor: fix typos (#77)
noritaka1166 Jun 13, 2025
05798f3
Update the names of Xcode and macOS (#123)
dkovba Jun 13, 2025
8479860
Throw errors in ServiceManager (#188)
eliseomartelli Jun 14, 2025
51c1b87
Update to Swift 6.2 (#195)
dkovba Jun 14, 2025
555dbfc
Adds a warning when running a debug build (#201)
dkovba Jun 14, 2025
4d6f703
Plugins: Remove unused devnull var (#214)
dcantah Jun 16, 2025
4a4ad40
Spelling (#207)
jsoref Jun 16, 2025
011e676
use rotatingAllocator for ipam (#217)
crosbymichael Jun 16, 2025
009ce93
Require having a Mac with Apple silicon and Xcode 26 beta (#125)
dkovba Jun 16, 2025
157bacf
Make test suites run sequentially with respect to other test suites (…
katiewasnothere Jun 16, 2025
4c171d4
Wait for IO streams to complete before a process exits (#198)
adityaramani Jun 16, 2025
0535d36
Fix warnings in `make docs` (#220)
dkovba Jun 17, 2025
37c9732
makefile: Change build_bin_dir to be lazily evaluated (#221)
dcantah Jun 17, 2025
21cfebb
Fix Race Condition in Container Removal (#130) (#218)
ramsyana Jun 17, 2025
a262d8f
provide suggestion if xpc 'Connection invalid' error encountered (#179)
heywoodlh Jun 19, 2025
a69ed78
Add socket publishing functionality (#236)
Reneechang17 Jun 20, 2025
8e892be
limit build and test for runners to Apple repository (#228)
heckj Jun 20, 2025
65e1733
Redirect to the documentation from the homepage (#245)
dkovba Jun 23, 2025
9008395
Fix typo in technical-overview.md (#253)
johnspurlock Jun 24, 2025
aa71809
Remove `@unchecked Sendable` (#250)
dkovba Jun 24, 2025
5d36134
Regenerate documentation on `make docs` (#246)
dkovba Jun 24, 2025
4a6a1f1
Add test that we replace meta args in builder correctly (#255)
katiewasnothere Jun 24, 2025
c7c88c2
[Build] Do not use unbounded DispatchIO readers for tar tranfers (#257)
wlan0 Jun 25, 2025
1064e6a
Merge branch 'main' into update_main
katiewasnothere Jun 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 8 additions & 17 deletions .github/ISSUE_TEMPLATE/01-bug.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Bug Report
name: Bug report
description: File a bug report.
title: "[Bug]: "
labels: ["bug", "triage"]
Expand All @@ -17,13 +17,6 @@ body:
required: true
- label: If possible, I've reproduced the issue using the 'main' branch of this project
required: false
- type: input
id: contact
attributes:
label: Contact Details
description: How can we get in touch with you if we need more info? ex. email@example.com
validations:
required: false
- type: textarea
id: reproduce
attributes:
Expand All @@ -49,16 +42,14 @@ body:
attributes:
label: Environment
description: |
examples:
- **OS**: MacOS 26 Beta 1
- **swift**: Apple Swift version 6.2
- **xcode**: Xcode 26 Beta 17A5241e
- **container**: container CLI version 0.1.0
Examples:
- **OS**: macOS 26.0 Beta (25A5279m)
- **Xcode**: Version 26.0 beta (17A5241e)
- **Container**: Container CLI version 0.1.0
value: |
- OS:
- swift:
- xcode:
- container:
- Xcode:
- Container:
render: markdown
validations:
required: true
Expand All @@ -72,7 +63,7 @@ body:
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/apple/container/blob/main/CONTRIBUTING.md).
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/apple/.github/blob/main/CODE_OF_CONDUCT.md).
options:
- label: I agree to follow this project's Code of Conduct
required: true
12 changes: 2 additions & 10 deletions .github/ISSUE_TEMPLATE/02-feature.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Feature or Enhancement request
name: Feature or enhancement request
description: File a request for a feature or enhancement
title: "[Request]: "
labels: ["feature", "triage"]
Expand All @@ -7,14 +7,6 @@ body:
attributes:
value: |
Thanks for contributing to the container project!
- type: input
id: contact
attributes:
label: Contact Details
description: How can we get in touch with you if we need more info?
placeholder: ex. email@example.com
validations:
required: false
- type: textarea
id: request
attributes:
Expand All @@ -26,7 +18,7 @@ body:
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com).
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/apple/.github/blob/main/CODE_OF_CONDUCT.md).
options:
- label: I agree to follow this project's Code of Conduct
required: true
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: container community support
- name: Container community support
url: https://github.com/apple/container/discussions
about: Please ask and answer questions here.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
name: container project - PR/merge build

on:
on:
pull_request:
types: [opened, reopened, synchronize]
push:
branches:
- main
- release/*

jobs:
jobs:
build:
name: Invoke build
uses: ./.github/workflows/common.yml
Expand Down
68 changes: 41 additions & 27 deletions .github/workflows/common.yml
Original file line number Diff line number Diff line change
@@ -1,82 +1,93 @@
name: container project - common jobs

on:
on:
workflow_call:
inputs:
release:
type: boolean
type: boolean
description: "Publish this build for release"
default: false

jobs:
buildAndTest:
buildAndTest:
name: Build and test the project
timeout-minutes: 30
if: github.repository == 'apple/container'
timeout-minutes: 60
runs-on: [self-hosted, macos, sequoia, ARM64]
permissions:
contents: read
packages: read
env:
CURRENT_SDK: y
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Update containerization
run: |
/usr/bin/swift package update containerization

- name: Check formatting
run: |
run: |
./scripts/install-hawkeye.sh
make fmt
if ! git diff --quiet -- . ':(exclude)Package.swift' ':(exclude)Package.resolved'; then echo "The following files require formatting or license header updates:\n$(git diff --name-only)" ; false ; fi
- name: Check protobuf
run: |
make protos

# TODO [launch]: TEMPORARILY we need to exclude these files since we had to modify them to add
# the github token for pulling the private repos.
if ! git diff --quiet -- . ':(exclude)Package.swift' ':(exclude)Package.resolved' ':(exclude)Protobuf.Makefile'; then echo "The following files require formatting or license header updates:\n$(git diff --name-only)" ; false ; fi
if ! git diff --quiet -- . ; then
echo "❌ The following files require formatting or license header updates:"
git diff --name-only -- .
false
fi

- name: Check protobuf
run: |
make protos
if ! git diff --quiet -- . ; then
echo "❌ The following files require formatting or license header updates:"
git diff --name-only -- .
false
fi
env:
CURRENT_SDK: y
DEVELOPER_DIR: "/Applications/Xcode_26.b1.app/Contents/Developer"

- name: Set build configuration
run: |
echo "BUILD_CONFIGURATION=debug" >> $GITHUB_ENV
if [ ${{ inputs.release }} == true ]; then
if [[ "${{ inputs.release }}" == "true" ]]; then
echo "BUILD_CONFIGURATION=release" >> $GITHUB_ENV
fi

- name: Make the container project and docs
run: |
run: |
make container dsym docs
tar cfz _site.tgz _site
env:
DEVELOPER_DIR: "/Applications/Xcode_16.3.app/Contents/Developer"
CURRENT_SDK: y
- name: Create package
DEVELOPER_DIR: "/Applications/Xcode_26.b1.app/Contents/Developer"

- name: Create package
run: |
mkdir -p outputs
mv bin/${{ env.BUILD_CONFIGURATION }}/container-installer-unsigned.pkg outputs
mv bin/${{ env.BUILD_CONFIGURATION }}/bundle/container-dSYM.zip outputs

- name: Test the container project
run: |
launchctl setenv HTTP_PROXY $HTTP_PROXY
make test cleancontent install-kernel integration
env:
CONTAINER_REGISTRY_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CONTAINER_REGISTRY_USER: ${{ github.actor }}
CONTAINER_REGISTRY_HOST: ghcr.io
DEVELOPER_DIR: "/Applications/Xcode_16.3.app/Contents/Developer"
CURRENT_SDK: y
DEVELOPER_DIR: "/Applications/Xcode_26.b1.app/Contents/Developer"
CURRENT_SDK: y # explicitly repeated due to local env block

- name: Save documentation artifact
uses: actions/upload-artifact@v4
with:
name: api-docs
path: "./_site.tgz"
retention-days: 14

- name: Save package artifacts
uses: actions/upload-artifact@v4
with:
name: container-package
path: ${{ github.workspace }}/outputs

uploadPages:
# Separate upload step required because upload-pages-artifact needs
# gtar which is not on the macOS runner.
Expand All @@ -87,13 +98,16 @@ jobs:
steps:
- name: Setup Pages
uses: actions/configure-pages@v5

- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: api-docs

- name: Add API docs to documentation
run: |
tar xfz _site.tgz

- name: Upload Artifact
uses: actions/upload-pages-artifact@v3
with:
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/docs-release.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# Manual workflow for releasing docs ad-hoc. Workflow can only be run for main or release branches.
# Manual workflow for releasing docs ad-hoc. Workflow can only be run for main or release branches.
# Workflow does NOT publish a release of container.
name: Deploy application website
on:
on:
workflow_dispatch:

jobs:
jobs:
checkBranch:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags') || startsWith(github.ref, 'refs/heads/release')
steps:
- name: Branch validation
- name: Branch validation
run: echo "Branch ${{ github.ref_name }} is allowed"

buildSite:
Expand Down
22 changes: 16 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
name: container project - release build

on:
push:
on:
push:
tags:
- "[0-9]+.[0-9]+.[0-9]+"
- "[0-9]+\\.[0-9]+\\.[0-9]+"

jobs:
jobs:
build:
name: Invoke build and release
uses: ./.github/workflows/common.yml
with:
with:
release: true
secrets: inherit
permissions:
contents: read
packages: read
pages: write

release:
if: startsWith(github.ref, 'refs/tags/')
name: Publish release
timeout-minutes: 30
needs: build
Expand All @@ -30,10 +32,18 @@ jobs:
uses: actions/download-artifact@v4
with:
path: outputs

- name: Verify artifacts exist
run: |
echo "Checking for expected artifacts..."
ls -la outputs/container-package/
test -e outputs/container-package/*.zip || (echo "Missing .zip file!" && exit 1)
test -e outputs/container-package/*.pkg || (echo "Missing .pkg file!" && exit 1)

- name: Create release
uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ github.token }}
name: ${{ github.ref_name }}-prerelease
draft: true
make_latest: false
Expand Down
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ Packages/
api-docs/
workdir/
installer/
.xcode/
.vscode/
.venv/
.clitests/
test_results/
Expand Down
12 changes: 12 additions & 0 deletions .spi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 1
builder:
configs:
- documentation_targets:
- ContainerSandboxService
- ContainerNetworkService
- ContainerImagesService
- ContainerClient
- ContainerLog
- ContainerPlugin
- ContainerXPC
- TerminalProgress
7 changes: 4 additions & 3 deletions BUILDING.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Building the project

To build the `container` project, your system needs either:
To build the `container` project, you need:

- macOS 15 or newer and Xcode 26 Beta
- macOS 26 Beta 1 or newer
- Mac with Apple silicon
- macOS 15 minimum, macOS 26 beta recommended
- Xcode 26 beta

## Compile and test

Expand Down
19 changes: 11 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export GIT_COMMIT := $(shell git rev-parse HEAD)
SWIFT := "/usr/bin/swift"
DESTDIR ?= /usr/local/
ROOT_DIR := $(shell git rev-parse --show-toplevel)
BUILD_BIN_DIR := $(shell $(SWIFT) build -c $(BUILD_CONFIGURATION) --show-bin-path)
BUILD_BIN_DIR = $(shell $(SWIFT) build -c $(BUILD_CONFIGURATION) --show-bin-path)
STAGING_DIR := bin/$(BUILD_CONFIGURATION)/staging/
PKG_PATH := bin/$(BUILD_CONFIGURATION)/container-installer-unsigned.pkg
DSYM_DIR := bin/$(BUILD_CONFIGURATION)/bundle/container-dSYM
Expand Down Expand Up @@ -49,7 +49,7 @@ all: init-block
.PHONY: build
build:
@echo Building container binaries...
@#Remove this when the updated MacOS SDK is available publicly
@#Remove this when the updated macOS SDK is available publicly
$(SWIFT) build -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) ; \

.PHONY: container
Expand Down Expand Up @@ -143,7 +143,12 @@ integration: init-block
@echo "Removing any existing containers"
@bin/container rm --all
@echo "Starting CLI integration tests"
@RUN_CLI_INTEGRATION_TESTS=1 $(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLI
@$(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLIRunLifecycle
@$(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLIExecCommand
@$(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLIRunCommand
@$(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLIImagesCommand
@$(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLIRunBase
@$(SWIFT) test -c $(BUILD_CONFIGURATION) $(CURRENT_SDK_ARGS) --filter TestCLIBuildBase
@echo Ensuring apiserver stopped after the CLI integration tests...
@scripts/ensure-container-stopped.sh

Expand Down Expand Up @@ -177,12 +182,10 @@ serve-docs:
@python3 -m http.server --bind 127.0.0.1 --directory ./_serve

.PHONY: docs
docs: _site

_site:
docs:
@echo Updating API documentation...
rm -rf $@
@scripts/make-docs.sh $@ container
@rm -rf _site
@scripts/make-docs.sh _site container

.PHONY: cleancontent
cleancontent:
Expand Down
Loading