Skip to content

Build & test your swift packages using docker - `swift docker test`

License

Notifications You must be signed in to change notification settings

iainsmith/swift-docker

Repository files navigation

swift-docker

A command line tool for building, testing & running your swift package in a docker container.

Quick start for macOS

brew install iainsmith/formulae/swift-docker # Install swift docker
git clone https://github.com/jpsim/Yams.git # Clone an example package
cd Yams && swift test # Run the tests on your machine
swift docker test # Run the tests in a container
swift docker test --swift 5.1 # Check if the tests pass on swift 5.1
swift docker write-dockerfile # Write a ./Dockerfile to the repo

Features

  • Test swift packages in one command swift docker test
  • Use custom images - swift docker test --image vapor/swift:latest
  • swift docker build/test/run commands mirror swift build/test/run
  • Run your vapor application in a container - swift docker vapor
  • Cached builds using docker volumes
  • Use a mix of docker volumes & bind mounts for fast, small builds.
  • Uses the swift docker image that matches the Package.swift manifest.
  • Quickly free up space - swift docker cleanup
  • Create a dockerfile for your project
  • Quickly print a command to run the swift repl in the container - swift docker repl
  • Create a .dockerignore file to avoid adding .git directory to the image
  • Support multistage slim builds
  • Log output to a file
  • cmake build for running on Windows

Install swift-docker

Install with Homebrew

brew install iainsmith/formulae/swift-docker
Install from source
> git clone https://github.com/iainsmith/swift-docker-cli.git
> cd swift-docker
> swift build -c release --disable-sandbox
# copy the binary to somewhere in your path.
> cp ./.build/release/swift-docker ~/bin

And install docker if you don't have it already
  • Download the Docker Mac App.
  • Or alternatively install via homebrew brew cask install docker

Usage

OVERVIEW: A simple workflow for building & testing swift packages with docker

Run swift docker <subcommand> --help for subcommand details
Reference - Offical docker images: https://hub.docker.com/_/swift

Examples:

swift docker test
swift docker build -- --configuration release
swift docker run your-executable --flag1
swift docker vapor

USAGE: swift-docker <subcommand>

OPTIONS:
-h, --help              Show help information.

SUBCOMMANDS:
build                   Build your swift package in a docker container.
test                    Test your swift package in a docker container.
run                     Run your swift package in a docker container.
vapor                   Run your vapor web application in a container.
build-image             Build a docker image for your swift package.
repl                    print the command to run the swift repl in a container.
cleanup                 Remove temporary docker images.
write-dockerfile        Write a dockerfile to disk.

Vapor

Run swift docker vapor to run your vapor application in a docker container. This is significantly faster than workflows that require you to build a docker image as we bind the local directory into the container, and cache the build folder.

  • You can pass custom arguments to your application by running swift docker vapor -- arg1 --flag1.
  • Currently the environment is set to production & the port is set to 8080.
  • The default docker image is swift:latest. You can use a custom image with swift docker vapor --image vapor/swift:latest

Docker labels

Each docker image created by swift-docker is tagged with two labels.

LABEL com.swiftdockercli.action="test/build"
LABEL com.swiftdockercli.folder="your-project-name"

Running docker volume ls --filter label=com.swiftdockercli.action=test will list volumes created by swift-docker test.

Contributing

If you have suggestions for new commands, features or bug fixes. Please raise an issue or open a PR.

If you find this tool useful in your workflow let me know on twitter @_iains

Credits

swift-docker is built on top of