1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
17 "git.arvados.org/arvados.git/sdk/go/arvados"
20 type runWorkbench2 struct {
24 func (runner runWorkbench2) String() string {
25 return "runWorkbench2"
28 func (runner runWorkbench2) Run(ctx context.Context, fail func(error), super *Supervisor) error {
29 host, port, err := internalPort(runner.svc)
31 return fmt.Errorf("bug: no internalPort for %q: %v (%#v)", runner, err, runner.svc)
33 super.waitShutdown.Add(1)
35 defer super.waitShutdown.Done()
36 if super.ClusterType == "production" {
37 err = super.RunProgram(ctx, "/var/lib/arvados/workbench2", runOptions{
39 }, "arvados-server", "workbench2", super.cluster.Services.Controller.ExternalURL.Host, net.JoinHostPort(host, port), ".")
41 // super.SourcePath might be readonly, so for
42 // dev/test mode we make a copy in a writable
44 livedir := super.wwwtempdir + "/workbench2"
45 if err := super.RunProgram(ctx, super.SourcePath+"/services/workbench2", runOptions{}, "rsync", "-a", "--delete-after", super.SourcePath+"/services/workbench2/", livedir); err != nil {
49 if err = os.Mkdir(livedir+"/public/_health", 0777); err != nil && !errors.Is(err, fs.ErrExist) {
53 if err = ioutil.WriteFile(livedir+"/public/_health/ping", []byte(`{"health":"OK"}`), 0666); err != nil {
58 stdinr, stdinw := io.Pipe()
64 err = super.RunProgram(ctx, livedir, runOptions{
69 "REACT_APP_ARVADOS_API_HOST=" + super.cluster.Services.Controller.ExternalURL.Host,
71 // If we don't connect stdin, "yarn start" just exits.
74 fail(errors.New("`yarn start` exited"))