Skip to content

Commit 3011475

Browse files
author
Ridai Govinda Pombo
committed
Execution runtimes are more reliable
This adds a stable ground to running yb run, exec and build It also does some major clean up. * Narwhal v0.5.1 was used [ch815] [ch1592] [ch1594] [ch1593]
1 parent 6184a15 commit 3011475

File tree

9 files changed

+154
-64
lines changed

9 files changed

+154
-64
lines changed

.yourbase.yml

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ dependencies:
55

66
build_targets:
77
- name: default
8-
host_only: true
98
commands:
109
- go test ./...
1110
- go build

cli/run.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,13 @@ func (b *RunCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{})
4646
return subcommands.ExitFailure
4747
}
4848

49-
runtimeTarget := "default"
49+
pkg, err := ws.TargetPackage()
50+
if err != nil {
51+
log.Errorf("Error loading workspace: %v", err)
52+
return subcommands.ExitFailure
53+
}
54+
55+
runtimeTarget := pkg.Name
5056
argList := f.Args()
5157
workDir := "/workspace"
5258

go.mod

+7-3
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,15 @@ require (
3232
github.com/ulikunitz/xz v0.5.7
3333
github.com/waigani/diffparser v0.0.0-20190828052634-7391f219313d // indirect
3434
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
35-
github.com/yourbase/narwhal v0.3.1
36-
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9
35+
github.com/yourbase/narwhal v0.5.1
36+
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
3737
golang.org/x/mod v0.3.0
38-
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
38+
golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect
3939
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect
40+
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect
41+
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5 // indirect
42+
google.golang.org/grpc v1.30.0 // indirect
43+
google.golang.org/protobuf v1.25.0 // indirect
4044
gopkg.in/ini.v1 v1.57.0
4145
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
4246
gopkg.in/src-d/go-billy.v4 v4.3.2

go.sum

+18-6
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
163163
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
164164
github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0=
165165
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
166+
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
167+
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
166168
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
167169
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
168170
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
@@ -355,8 +357,8 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:
355357
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
356358
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
357359
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
358-
github.com/yourbase/narwhal v0.3.1 h1:V93h26Mu5HlQ99hlBRDjlvoDS9t2e9XCcir5EVHRSas=
359-
github.com/yourbase/narwhal v0.3.1/go.mod h1:C+3zsAn+HhiwMMOAWesrEWFiTWarhn7VT2qZIhGz1Bc=
360+
github.com/yourbase/narwhal v0.5.1 h1:MHQ39AI17HFGoONoHk+p5YaK3t5QH3VNQ/9bE8Rva7c=
361+
github.com/yourbase/narwhal v0.5.1/go.mod h1:TyuDATqB+M33Uskfj+gvpE/6bNe8g3zCAjlz4gwWe14=
360362
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
361363
golang.org/x/crypto v0.0.0-20160824173033-351dc6a5bf92/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
362364
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -370,8 +372,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U
370372
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
371373
golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
372374
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
373-
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM=
374-
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
375+
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
376+
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
375377
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
376378
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
377379
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -400,8 +402,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
400402
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk=
401403
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
402404
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
403-
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
404-
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
405+
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
406+
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
405407
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
406408
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
407409
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -433,6 +435,8 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20u
433435
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
434436
golang.org/x/sys v0.0.0-20200610111108-226ff32320da h1:bGb80FudwxpeucJUjPYJXuJ8Hk91vNtfvrymzwiei38=
435437
golang.org/x/sys v0.0.0-20200610111108-226ff32320da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
438+
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
439+
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
436440
golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
437441
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
438442
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
@@ -473,6 +477,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
473477
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
474478
google.golang.org/genproto v0.0.0-20200610104632-a5b850bcf112 h1:iwoQI4kCHAgRg0oltV6+Jnq5COzoS0NN+QLqHewrf5U=
475479
google.golang.org/genproto v0.0.0-20200610104632-a5b850bcf112/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
480+
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5 h1:a/Sqq5B3dGnmxhuJZIHFsIxhEkqElErr5TaU6IqBAj0=
481+
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
476482
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
477483
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
478484
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -484,6 +490,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
484490
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
485491
google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=
486492
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
493+
google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
494+
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
487495
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
488496
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
489497
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -496,6 +504,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
496504
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
497505
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
498506
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
507+
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
508+
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
499509
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
500510
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
501511
gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -540,3 +550,5 @@ mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIa
540550
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
541551
mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY=
542552
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
553+
zombiezen.com/go/log v1.0.0 h1:4IvZxBeSxdd5GZdqVNxM2j9omoTDvoP7yyxZodSHi5A=
554+
zombiezen.com/go/log v1.0.0/go.mod h1:Eos1rXF8JpgK+h6NYITdTJslqFJJA3SaIJHMU75Sqfg=

plumbing/util.go

-2
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,6 @@ func FindWorkspaceRoot() (string, error) {
189189
// Look upwards to find a manifest file
190190
packageDir, err := FindNearestManifestFile()
191191

192-
fmt.Print("WorkspaceRoot considered: ", packageDir)
193-
194192
// If we find a manifest file, check the parent directory for a config.yml
195193
if err == nil {
196194
parent := filepath.Dir(packageDir)

runtime/containers.go

+29-21
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,22 @@ import (
55
"bytes"
66
"context"
77
"fmt"
8-
"github.com/yourbase/yb/plumbing/log"
98
"io"
109
"io/ioutil"
1110
"net"
1211
"os"
1312
"strings"
1413

14+
"github.com/yourbase/yb/plumbing/log"
15+
1516
"github.com/yourbase/narwhal"
1617
)
1718

19+
const (
20+
ContainerDefaultToolsDir = "/opt/yb/tools"
21+
ContainerDefaultCacheDir = "/opt/yb/cache"
22+
)
23+
1824
type ContainerTarget struct {
1925
Target
2026
Container *narwhal.Container
@@ -29,7 +35,6 @@ func (t *ContainerTarget) OS() Os {
2935
func (t *ContainerTarget) OSVersion(ctx context.Context) string {
3036
var buf bytes.Buffer
3137
bufWriter := bufio.NewWriter(&buf)
32-
//err := t.Container.DownloadDirectoryToWriter("/etc/os-release", &buf)
3338
err := narwhal.ExecShell(ctx, narwhal.DockerClient(), t.Container.Id, "cat /etc/os-release", &narwhal.ExecShellOptions{
3439
Dir: "/",
3540
CombinedOutput: bufWriter,
@@ -66,33 +71,27 @@ func (t *ContainerTarget) Architecture() Architecture {
6671
return Amd64
6772
}
6873

69-
func (t *ContainerTarget) mkdirInContainer(ctx context.Context, dir string) (created string) {
70-
if t.PathExists(ctx, dir) {
71-
return dir
72-
}
73-
74-
cmdString := "mkdir -p " + dir
75-
err := narwhal.ExecShell(ctx, narwhal.DockerClient(), t.Container.Id, cmdString, &narwhal.ExecShellOptions{})
76-
if err == nil {
77-
created = dir
78-
}
79-
80-
return
81-
}
82-
8374
func (t *ContainerTarget) ToolsDir(ctx context.Context) string {
84-
return t.mkdirInContainer(ctx, "/opt/yb/tools")
75+
err := narwhal.MkdirAll(ctx, narwhal.DockerClient(), t.Container.Id, ContainerDefaultToolsDir)
76+
if err != nil {
77+
return ""
78+
}
79+
return ContainerDefaultToolsDir
8580
}
8681

8782
func (t *ContainerTarget) PathExists(ctx context.Context, path string) bool {
8883
// Assume we can use stat for now
8984
statCmd := fmt.Sprintf("stat %s", path)
85+
// Will be ignored, but Docker only succeeds if we pass an output io stream
86+
buff := new(bytes.Buffer)
9087

91-
err := narwhal.ExecShell(ctx, narwhal.DockerClient(), t.Container.Id, statCmd, &narwhal.ExecShellOptions{Dir: "/"})
88+
err := narwhal.ExecShell(ctx, narwhal.DockerClient(), t.Container.Id, statCmd, &narwhal.ExecShellOptions{CombinedOutput: buff})
9289
if err != nil {
93-
if _, ok := narwhal.IsExitError(err); ok {
90+
if code, _ := narwhal.IsExitError(err); code != 0 {
9491
return false
9592
}
93+
// Return false anyway, as it errored
94+
return false
9695
}
9796

9897
return true
@@ -103,7 +102,11 @@ func (t *ContainerTarget) String() string {
103102
}
104103

105104
func (t *ContainerTarget) CacheDir(ctx context.Context) string {
106-
return t.mkdirInContainer(ctx, "/opt/yb/cache")
105+
err := narwhal.MkdirAll(ctx, narwhal.DockerClient(), t.Container.Id, ContainerDefaultCacheDir)
106+
if err != nil {
107+
return ""
108+
}
109+
return ContainerDefaultCacheDir
107110
}
108111

109112
func (t *ContainerTarget) PrependToPath(ctx context.Context, dir string) {
@@ -175,7 +178,10 @@ func (t *ContainerTarget) DownloadFile(ctx context.Context, url string) (string,
175178

176179
func (t *ContainerTarget) Unarchive(ctx context.Context, src string, dst string) error {
177180
var command string
178-
t.mkdirInContainer(ctx, dst)
181+
err := narwhal.MkdirAll(ctx, narwhal.DockerClient(), t.Container.Id, dst)
182+
if err != nil {
183+
return fmt.Errorf("making dir for unarchiving %s: %v", src, err)
184+
}
179185

180186
if strings.HasSuffix(src, "tar.gz") {
181187
command = fmt.Sprintf("tar zxf %s -C %s", src, dst)
@@ -223,6 +229,8 @@ func (t *ContainerTarget) Run(ctx context.Context, p Process) error {
223229
output = p.Output
224230
}
225231

232+
t.Container.Definition.Environment = p.Environment
233+
226234
if p.Interactive {
227235
return narwhal.ExecShell(ctx, narwhal.DockerClient(), t.Container.Id, p.Command, &narwhal.ExecShellOptions{
228236
Dir: p.Directory,

runtime/runtime.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ package runtime
33
import (
44
"context"
55
"fmt"
6-
"github.com/yourbase/yb/plumbing/log"
76
"io"
87
"strings"
98

9+
"github.com/yourbase/yb/plumbing/log"
10+
1011
goruntime "runtime"
1112

1213
"github.com/yourbase/narwhal"
@@ -76,6 +77,10 @@ func (r *Runtime) SupportsContainers() bool {
7677
return r.ContainerServiceContext != nil
7778
}
7879

80+
func (r *Runtime) NTargets() int {
81+
return len(r.Targets)
82+
}
83+
7984
func (r *Runtime) AddTarget(targetId string, t Target) error {
8085
if _, exists := r.Targets[targetId]; exists {
8186
return fmt.Errorf("Unable to add target with id %s - already exists", targetId)
@@ -150,15 +155,15 @@ func NewRuntime(ctx context.Context, identifier string, localWorkDir string) *Ru
150155
Identifier: identifier,
151156
LocalWorkDir: localWorkDir,
152157
Targets: make(map[string]Target),
153-
DefaultTarget: &MetalTarget{},
158+
DefaultTarget: &MetalTarget{workDir: localWorkDir},
154159
ContainerServiceContext: sc,
155160
}
156161
}
157162

158-
func (r *Runtime) Shutdown() error {
163+
func (r *Runtime) Shutdown(ctx context.Context) error {
159164

160165
if r.ContainerServiceContext != nil {
161-
if err := r.ContainerServiceContext.TearDown(); err != nil {
166+
if err := r.ContainerServiceContext.TearDown(ctx); err != nil {
162167
return err
163168
}
164169
}

workspace/package.go

+16-21
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"github.com/yourbase/narwhal"
8-
"gopkg.in/yaml.v2"
97
"io"
108
"io/ioutil"
119
"os"
12-
"os/signal"
1310
"path/filepath"
1411
"strings"
15-
"syscall"
1612

13+
"gopkg.in/yaml.v2"
14+
15+
"github.com/yourbase/narwhal"
1716
. "github.com/yourbase/yb/plumbing"
1817
"github.com/yourbase/yb/plumbing/log"
1918
"github.com/yourbase/yb/runtime"
@@ -103,20 +102,6 @@ func (p Package) ExecuteToWriter(ctx context.Context, runtimeCtx *runtime.Runtim
103102
return err
104103
}
105104

106-
// TODO Be smarter
107-
c := make(chan os.Signal, 2)
108-
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
109-
go func() {
110-
<-c
111-
fmt.Println("\r- Ctrl+C pressed in Terminal")
112-
if err := runtimeCtx.Shutdown(); err != nil {
113-
// Oops.
114-
os.Exit(1)
115-
}
116-
// Ok!
117-
os.Exit(0)
118-
}()
119-
120105
log.Infof("Executing package '%s'...\n", p.Name)
121106

122107
for _, cmdString := range p.Manifest.Exec.Commands {
@@ -136,6 +121,15 @@ func (p Package) ExecuteToWriter(ctx context.Context, runtimeCtx *runtime.Runtim
136121
return nil
137122
}
138123

124+
func (p Package) addMount(cd *narwhal.ContainerDefinition, localPath, remotePath, thing string) {
125+
if thing == "" {
126+
thing = "package"
127+
}
128+
log.Infof("Will mount %s %s at %s in container", thing, localPath, remotePath)
129+
mount := fmt.Sprintf("%s:%s", localPath, remotePath)
130+
cd.Mounts = append(cd.Mounts, mount)
131+
}
132+
139133
func (p Package) checkMounts(cd *narwhal.ContainerDefinition, srcDir string) error {
140134
for _, mount := range cd.Mounts {
141135
parts := strings.Split(mount, ":")
@@ -215,9 +209,10 @@ func (p Package) createExecutionTarget(ctx context.Context, runtimeCtx *runtime.
215209
if execContainer.WorkDir != "" {
216210
sourceMapDir = execContainer.WorkDir
217211
}
218-
log.Infof("Will mount package %s at %s in container", p.Path(), sourceMapDir)
219-
mount := fmt.Sprintf("%s:%s", p.Path(), sourceMapDir)
220-
execContainer.Mounts = append(execContainer.Mounts, mount)
212+
if err := p.checkMounts(&execContainer, p.Path()); err != nil {
213+
return nil, fmt.Errorf("Unable to set host container mount dir: %v", err)
214+
}
215+
p.addMount(&execContainer, p.Path(), sourceMapDir, "package")
221216

222217
execTarget, err := runtimeCtx.AddContainer(ctx, execContainer)
223218
if err != nil {

0 commit comments

Comments
 (0)