mirror of https://github.com/databricks/cli.git
65 lines
1.5 KiB
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)
|
|
}
|