cmd/cloudshell_open/scripts.go (34 lines of code) (raw):
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"fmt"
"io"
"os"
"os/exec"
"github.com/fatih/color"
)
type myWriter struct {
out io.Writer
color color.Attribute
}
func (m myWriter) Write(p []byte) (int, error) {
return color.New(m.color).Fprintf(m.out, string(p))
}
func runScript(dir, command string, envs []string) error {
fmt.Println(infoPrefix + " Running command: " + color.BlueString(command))
cmd := exec.Command("/bin/bash", "-c", "set -euo pipefail; set -x; "+command)
cmd.Env = envs
cmd.Dir = dir
cmd.Stdout = myWriter{os.Stdout, color.FgHiBlack}
cmd.Stderr = myWriter{os.Stderr, color.FgHiBlack}
cmd.Stdin = os.Stdin
return cmd.Run()
}
func runScripts(dir string, commands, envs []string) error {
for _, command := range commands {
err := runScript(dir, command, envs)
if err != nil {
return fmt.Errorf("failed to execute command[%s]: %v", command, err)
}
}
return nil
}