databricks-cli/bundle/config/artifact.go

65 lines
1.5 KiB
Go

package config
import (
"context"
"fmt"
"github.com/databricks/cli/bundle/config/paths"
"github.com/databricks/cli/libs/exec"
)
type Artifacts map[string]*Artifact
func (artifacts Artifacts) SetConfigFilePath(path string) {
for _, artifact := range artifacts {
artifact.ConfigFilePath = path
}
}
type ArtifactType string
const ArtifactPythonWheel ArtifactType = `whl`
type ArtifactFile struct {
Source string `json:"source"`
RemotePath string `json:"remote_path" bundle:"readonly"`
}
// Artifact defines a single local code artifact that can be
// built/uploaded/referenced in the context of this bundle.
type Artifact struct {
Type ArtifactType `json:"type"`
// The local path to the directory with a root of artifact,
// for example, where setup.py is for Python projects
Path string `json:"path,omitempty"`
// The relative or absolute path to the built artifact files
// (Python wheel, Java jar and etc) itself
Files []ArtifactFile `json:"files,omitempty"`
BuildCommand string `json:"build,omitempty"`
Executable exec.ExecutableType `json:"executable,omitempty"`
paths.Paths
}
func (a *Artifact) Build(ctx context.Context) ([]byte, error) {
if a.BuildCommand == "" {
return nil, fmt.Errorf("no build property defined")
}
var e *exec.Executor
var err error
if a.Executable != "" {
e, err = exec.NewCommandExecutorWithExecutable(a.Path, a.Executable)
} else {
e, err = exec.NewCommandExecutor(a.Path)
a.Executable = e.ShellType()
}
if err != nil {
return nil, err
}
return e.Exec(ctx, a.BuildCommand)
}