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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8c48fbc · Apr 30, 2020

History

28 Commits
Apr 30, 2020
Apr 30, 2020
Apr 19, 2020
Apr 24, 2020
Apr 24, 2020
Apr 30, 2020
Apr 19, 2020
Apr 20, 2020
Apr 19, 2020
Apr 19, 2020
Apr 30, 2020

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