Skip to content

Commit d9706d3

Browse files
author
Kevin Smith
committed
Added -dev flag
This commit adds the `-dev` flag to Relay's CLI. Setting it tells Relay to run in development mode where it trades speed for developer productivity. Currently setting `-dev` will cause Relay to pull and re-pull Docker images before running commands packaged as Docker images. This should reduce the overhead of iterating on commands during development and simplify command developers' workflows. Fixes #950
1 parent fae0326 commit d9706d3

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

main.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ const (
2222

2323
var configFile = flag.String("file", "", "Path to configuration file")
2424
var cpuprofile = flag.String("cpuprofile", "", "Write CPU profile to file")
25-
var memprofile = flag.String("memprofile", "", "write memory profile to this file")
25+
var memprofile = flag.String("memprofile", "", "Write memory profile to this file")
26+
var devMode = flag.Bool("dev", false, "Enable developer mode")
2627

2728
// Populated by build script
2829
var buildstamp string
@@ -139,6 +140,7 @@ func prepare() *config.Config {
139140
os.Exit(BAD_CONFIG)
140141
return nil
141142
}
143+
relayConfig.DevMode = *devMode
142144
configureLogger(relayConfig)
143145
return relayConfig
144146
}
@@ -169,7 +171,9 @@ func main() {
169171
return
170172
}
171173
log.Infof("Relay %s is initializing.", relayConfig.ID)
172-
174+
if relayConfig.DevMode == true {
175+
log.Warn("Developer mode enabled.")
176+
}
173177
myRelay, err := relay.NewRelay(relayConfig)
174178
if err != nil {
175179
log.Error(err)

relay/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ type Config struct {
4646
Cog *CogInfo `yaml:"cog" valid:"required"`
4747
EnginesEnabled string `yaml:"enabled_engines" env:"RELAY_ENABLED_ENGINES" valid:"exec_engines" default:"docker,native"`
4848
ParsedEnginesEnabled []string
49+
DevMode bool
4950
Docker *DockerInfo `yaml:"docker" valid:"-"`
5051
Execution *ExecutionInfo `yaml:"execution" valid:"-"`
5152
}

relay/engines/docker.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,31 @@ func (de *DockerEngine) attemptAuth() error {
229229
return nil
230230
}
231231

232+
func (de *DockerEngine) developerModeRefresh(bundle *config.Bundle) error {
233+
if de.relayConfig.DevMode == true {
234+
fullName := fmt.Sprintf("%s:%s", bundle.Docker.Image, bundle.Docker.Tag)
235+
log.Warnf("Developer mode: Refreshing Docker image %s.", fullName)
236+
err := de.pullImage(fullName)
237+
if err != nil {
238+
log.Errorf("Developer mode: Refresh of Docker image %s failed: %s.", fullName, err)
239+
return err
240+
}
241+
image, _, err := de.client.ImageInspectWithRaw(context.Background(), fullName, false)
242+
if err != nil {
243+
log.Errorf("Developer mode: Docker image %s downloaded but can't be found locally: %s.", fullName, err)
244+
return err
245+
}
246+
log.Warnf("Developer mode: Docker image %s refreshed. Image id is %s.", fullName, shortImageID(image.ID))
247+
}
248+
return nil
249+
}
250+
232251
func (de *DockerEngine) newEnvironment(bundle *config.Bundle) (circuit.Environment, error) {
252+
// Only happens if Relay is running in developer mode
253+
err := de.developerModeRefresh(bundle)
254+
if err != nil {
255+
return nil, err
256+
}
233257
client, err := newClient(de.config)
234258
if err != nil {
235259
return nil, err
@@ -260,6 +284,10 @@ func (de *DockerEngine) needsUpdate(name, meta string) bool {
260284
}
261285

262286
func (de *DockerEngine) pullImage(fullName string) error {
287+
err := de.ensureConnected()
288+
if err != nil {
289+
return err
290+
}
263291
closer, pullErr := de.client.ImagePull(context.Background(), fullName,
264292
types.ImagePullOptions{
265293
All: false,

0 commit comments

Comments
 (0)