Skip to content

Commit

Permalink
Merge tag '0.1.0' of https://github.com/bfirsh/whalebrew into support…
Browse files Browse the repository at this point in the history
…-windows
  • Loading branch information
3846masa committed Sep 7, 2017
2 parents a72237f + 0fea7e2 commit 63b9490
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 33 deletions.
13 changes: 12 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,19 @@ install:
- go get -t ./...
- go get github.com/golang/lint/golint
- go get golang.org/x/tools/cmd/goimports

- go get github.com/mitchellh/gox
script:
- FIXED=$(goimports ./... | wc -l); if [ $FIXED -gt 0 ]; then echo "goimports - $FIXED file(s) not formatted correctly, please run goimports to fix this." && exit 1; fi
- golint ./...
- go test ./...
- script/build
deploy:
provider: releases
api_key:
secure: PvRBdjIyAzq+x8Sq0lJW+wRqE+kUE6t+FDxIpawmaUWLvJmA5R1n8RiHMniYTQFOE/0I8SaKu6TbzvnlIZBqG9DIvi3o/eu6mJJCh1tXQHCzo+sfbLtm6545svKUtLTzGF4jESWsKE5x43DgjMCboPKuE4Y7iLs6x7/n6qDgOffZyFkJCPEQd595D7O8LTtL3eHuvzXnxzDIcohSbe1z/YN7b/R4SvT04yXVrji5WmEcuueqQiq/z2BaCh8+TUBihApw024ICCWjALgWQF3XBYnWgW6TR8RQzJB+uA16VjWPetFpPiyOGX824fhUU9u9UoEQyJOQ0BvtI3qTP+2m7VWWKnZuLBxQ68H2o3U/qufrnklVXnargem1455Dq0wVXxwYbTANZcHx0rEzIhcQeAwhMiHFKAGQMpEOqvSC0A2m1RbO4K/LjBNLu6Ab+HfIzgdecRP78U79NVPGVX7PZijxPlvhMYk4z+J20kH65yRZUZoRSqmT/AwMlmdOUEbPjqIsBGinfydWspUfUNf85uDsIfONznTd/X148Pj78CPV5mew9zdx4Jjc9FwYmSyO2zUYpsBJfsF5KMgU3E8SQuKj9s0wwvGAAOTcQMufe9U3bJkq/AxwQOq9CiuNAGTpm1NYZFEuRRCyvnVZ/DJiE6hp4Q98koIzI2p0lpRH+/0=
file:
- "build/whalebrew-Darwin-x86_64"
- "build/whalebrew-Linux-x86_64"
on:
repo: bfirsh/whalebrew
tags: true
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
# Change log

## 0.1.0 - 2017-03-04
## 0.1.0 - 2017-03-23
### Added
* A label for setting the working directory inside the container.
* The ability to put environment variables in `working_dir`, `volumes`, and `environment` labels that are resolved at runtime.
* A `-y` flag to install to assume the answer "yes" to any questions asked.

## 0.0.5 - 2017-03-04
### Added
* Ask permission before installing a package that needs to listen on ports, access environment variables, or access files/directories on the host.
* A `-f` flag to `whalebrew install` to force install a package over an existing file.
Expand Down
17 changes: 16 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ First, [install Docker](https://docs.docker.com/engine/installation/). The easie

Next, on macOS and Linux:

curl -L "https://github.com/bfirsh/whalebrew/releases/download/0.0.4/whalebrew-$(uname -s)-$(uname -m)" -o /usr/local/bin/whalebrew; chmod +x /usr/local/bin/whalebrew
curl -L "https://github.com/bfirsh/whalebrew/releases/download/0.0.5/whalebrew-$(uname -s)-$(uname -m)" -o /usr/local/bin/whalebrew; chmod +x /usr/local/bin/whalebrew

Windows support is theoretically possible, but not implemented yet.

Expand Down Expand Up @@ -141,6 +141,21 @@ There are some labels you can use to configure how Whalebrew installs your image

LABEL io.whalebrew.config.networks '["host"]'

* `io.whalebrew.config.working_dir`: The path the working directory should be bound to in the container. For example putting this in your image's `Dockerfile` will ensure the working directory is available in /working_directory in the container

LABEL io.whalebrew.config.working_dir '/working_directory'

#### Using user environment variables

The labels `io.whalebrew.config.working_dir`, `io.whalebrew.config.volumes` and `io.whalebrew.config.environment` are expanded with user environment variables when the container is launched.

For example, if your image has this line in your `Dockerfile`:

LABEL io.whalebrew.config.working_dir '$PWD'

At runtime, it will bind your working directory into the container at the same path and set it as the working directory.


### Whalebrew images

We maintain a set of packages which are known to follow these requirements under the `whalebrew` organization on [GitHub](https://github.com/whalebrew) and [Docker Hub](https://hub.docker.com/u/whalebrew/). If you want to add a package to this, open a pull request against [whalebrew-packages](https://github.com/whalebrew/whalebrew-packages).
Expand Down
9 changes: 7 additions & 2 deletions cmd/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ import (

var customPackageName string
var forceInstall bool
var assumeYes bool

func init() {
installCommand.Flags().StringVarP(&customPackageName, "name", "n", "", "Name to give installed package. Defaults to image name.")
installCommand.Flags().BoolVarP(&forceInstall, "force", "f", false, "Replace existing package if already exists. Defaults to false.")
installCommand.Flags().BoolVarP(&assumeYes, "assume-yes", "y", false, "Assume 'yes' as answer to all prompts and run non-interactively. Defaults to false.")

RootCmd.AddCommand(installCommand)
}
Expand Down Expand Up @@ -72,10 +74,13 @@ var installCommand = &cobra.Command{
preinstallMessage := pkg.PreinstallMessage()
if preinstallMessage != "" {
fmt.Println(preinstallMessage)
if !prompter.YN("Is this okay?", true) {
return fmt.Errorf("not installing package")
if !assumeYes {
if !prompter.YN("Is this okay?", true) {
return fmt.Errorf("Not installing package")
}
}
}

pm := packages.NewPackageManager(viper.GetString("install_path"))
if forceInstall {
err = pm.ForceInstall(pkg)
Expand Down
14 changes: 7 additions & 7 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ var runCommand = &cobra.Command{
"run",
"--interactive",
"--rm",
"--workdir", "/workdir",
"-v", fmt.Sprintf("%s:/workdir", cwd),
"--workdir", os.ExpandEnv(pkg.WorkingDir),
"-v", fmt.Sprintf("%s:%s", cwd, os.ExpandEnv(pkg.WorkingDir)),
}
if terminal.IsTerminal(int(os.Stdin.Fd())) {
dockerArgs = append(dockerArgs, "--tty")
Expand All @@ -62,20 +62,17 @@ var runCommand = &cobra.Command{
volume = user.HomeDir + volume[1:]
}
dockerArgs = append(dockerArgs, "-v")
dockerArgs = append(dockerArgs, volume)
dockerArgs = append(dockerArgs, os.ExpandEnv(volume))
}
for _, envvar := range pkg.Environment {
dockerArgs = append(dockerArgs, "-e")
dockerArgs = append(dockerArgs, envvar)
dockerArgs = append(dockerArgs, os.ExpandEnv(envvar))
}
for _, portmap := range pkg.Ports {
dockerArgs = append(dockerArgs, "-p")
dockerArgs = append(dockerArgs, portmap)
}

dockerArgs = append(dockerArgs, pkg.Image)
dockerArgs = append(dockerArgs, args[1:]...)

for _, network := range pkg.Networks {
dockerArgs = append(dockerArgs, "--net")
dockerArgs = append(dockerArgs, network)
Expand Down Expand Up @@ -109,6 +106,9 @@ var runCommand = &cobra.Command{
dockerArgs = append(dockerArgs, "-u")
dockerArgs = append(dockerArgs, user.Uid+":"+user.Gid)

dockerArgs = append(dockerArgs, pkg.Image)
dockerArgs = append(dockerArgs, args[1:]...)

return syscall.Exec(dockerPath, dockerArgs, os.Environ())
},
}
54 changes: 34 additions & 20 deletions packages/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type Package struct {
Volumes []string `yaml:"volumes,omitempty"`
Ports []string `yaml:"ports,omitempty"`
Networks []string `yaml:"networks,omitempty"`
WorkingDir string `yaml:"working_dir,omitempty"`
}

// NewPackageFromImage creates a package from a given image name,
Expand All @@ -36,34 +37,45 @@ func NewPackageFromImage(image string, imageInspect types.ImageInspect) (*Packag
Image: image,
}

if imageInspect.ContainerConfig != nil && imageInspect.ContainerConfig.Labels != nil {
labels := imageInspect.ContainerConfig.Labels
if imageInspect.ContainerConfig != nil {

if name, ok := labels["io.whalebrew.name"]; ok {
pkg.Name = name
if imageInspect.ContainerConfig.WorkingDir != "" {
pkg.WorkingDir = imageInspect.ContainerConfig.WorkingDir
}

if env, ok := labels["io.whalebrew.config.environment"]; ok {
if err := yaml.Unmarshal([]byte(env), &pkg.Environment); err != nil {
return pkg, err
if imageInspect.ContainerConfig.Labels != nil {
labels := imageInspect.ContainerConfig.Labels

if name, ok := labels["io.whalebrew.name"]; ok {
pkg.Name = name
}
}

if volumesStr, ok := labels["io.whalebrew.config.volumes"]; ok {
if err := yaml.Unmarshal([]byte(volumesStr), &pkg.Volumes); err != nil {
return pkg, err
if workingDir, ok := labels["io.whalebrew.config.working_dir"]; ok {
pkg.WorkingDir = workingDir
}
}

if ports, ok := labels["io.whalebrew.config.ports"]; ok {
if err := yaml.Unmarshal([]byte(ports), &pkg.Ports); err != nil {
return pkg, err
if env, ok := labels["io.whalebrew.config.environment"]; ok {
if err := yaml.Unmarshal([]byte(env), &pkg.Environment); err != nil {
return pkg, err
}
}

if volumesStr, ok := labels["io.whalebrew.config.volumes"]; ok {
if err := yaml.Unmarshal([]byte(volumesStr), &pkg.Volumes); err != nil {
return pkg, err
}
}

if ports, ok := labels["io.whalebrew.config.ports"]; ok {
if err := yaml.Unmarshal([]byte(ports), &pkg.Ports); err != nil {
return pkg, err
}
}
}

if networks, ok := labels["io.whalebrew.config.networks"]; ok {
if err := yaml.Unmarshal([]byte(networks), &pkg.Networks); err != nil {
return pkg, err
if networks, ok := labels["io.whalebrew.config.networks"]; ok {
if err := yaml.Unmarshal([]byte(networks), &pkg.Networks); err != nil {
return pkg, err
}
}
}
}
Expand All @@ -77,7 +89,9 @@ func LoadPackageFromPath(path string) (*Package, error) {
if err != nil {
return nil, err
}
pkg := &Package{}
pkg := &Package{
WorkingDir: "/workdir",
}
if err = yaml.Unmarshal(d, pkg); err != nil {
return pkg, err
}
Expand Down
2 changes: 1 addition & 1 deletion version/version.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package version

// Version is the current Whalebrew version
const Version = "0.0.5"
const Version = "0.1.0"

0 comments on commit 63b9490

Please sign in to comment.