- Closes #639. - Adds swift format configuration that removes lint checks so we can use `swift lint` to perform format-only tests. - Adds `check` target that invokes format and header checks. - Adds pre-commit script that runs `make check`. - Adds `pre-commit` target that installs the check script as a pre-commit hook. ## Type of Change - [ ] Bug fix - [x] New feature - [ ] Breaking change - [x] Documentation update ## Motivation and Context Avoids wasting time and commit rewrites. ## Testing - [x] Tested locally - [ ] Added/updated tests - [x] Added/updated docs
4.3 KiB
Building the project
To build the container project, you need:
- Mac with Apple silicon
- macOS 15 minimum, macOS 26 recommended
- Xcode 26, set as the active developer directory
Important
There is a bug in the
vmnetframework on macOS 26 that causes network creation to fail if thecontainerhelper applications are located under yourDocumentsorDesktopdirectories. If you usemake install, you can simply run thecontainerbinary in/usr/local. If you prefer to use the binaries thatmake allcreates in your projectbinandlibexecdirectories, locate your project elsewhere, such as~/projects/container, until this issue is resolved.
Compile and test
Build container and the background services from source, and run basic and integration tests:
make all test integration
Copy the binaries to /usr/local/bin and /usr/local/libexec (requires entering an administrator password):
make install
Or to install a release build, with better performance than the debug build:
BUILD_CONFIGURATION=release make all test integration
BUILD_CONFIGURATION=release make install
Compile protobufs
container uses gRPC to communicate to the builder virtual machine that creates images from Dockerfiles, and depends on specific versions of grpc-swift and swift-protobuf. If you make changes to the gRPC APIs in the container-builder-shim project, install the tools and re-generate the gRPC code in this project using:
make protos
Develop using a local copy of Containerization
To make changes to container that require changes to the Containerization project, or vice versa:
-
Clone the Containerization repository such that it sits next to your clone of the
containerrepository. Ensure that you follow containerization instructions to prepare your build environment. -
In your development shell, go to the
containerproject directory.cd container -
If the
containerservices are already running, stop them.bin/container system stop -
Use the Swift package manager to configure use your local
containerizationpackage and update yourPackage.resolvedfile./usr/bin/swift package edit --path ../containerization containerization /usr/bin/swift package update containerizationImportant
If you are using Xcode, you will need to temporarily modify
Package.swiftinstead of usingswift package edit, using a path dependency in place of the versionedcontainerdependency:.package(path: "../containerization"), -
If you want
containerto use any changes you made in thevminitsubproject of Containerization, update the system property to use the locally built init filesystem image:container system property set image.init vminit:latest -
Build
container.make clean all -
Restart the
containerservices.bin/container system stop bin/container system start
To revert to using the Containerization dependency from your Package.swift:
-
If you were using the local init filesystem, revert the system property to its default value:
container system property clear image.init -
Use the Swift package manager to restore the normal
containerizationdependency and update yourPackage.resolvedfile. If you are using Xcode, revert yourPackage.swiftchange instead of usingswift package unedit./usr/bin/swift package unedit containerization /usr/bin/swift package update containerization -
Rebuild
container.make clean all -
Restart the
containerservices.bin/container system stop bin/container system start
Pre-commit hook
Run make pre-commit to install a pre-commit hook that ensures that your changes have correct formatting and license headers when you run git commit.