builder/build/cnb/lang_python.go
Rama main · réplica de lectura del repositorio original.
package cnb
import (
"fmt"
"strings"
"github.com/goodrain/rainbond/builder/build"
corev1 "k8s.io/api/core/v1"
)
type pythonConfig struct{}
func (p *pythonConfig) BuildAnnotations(re *build.Request, annotations map[string]string) {
applyDependencyMirrorAnnotation(annotations)
setAnnotationValue(annotations, "cnb-bp-cpython-version", firstNonEmptyEnv(re.BuildEnvs, "BP_CPYTHON_VERSION", "BUILD_RUNTIMES", "RUNTIMES"))
setAnnotationValue(annotations, "cnb-bp-conda-solver", firstNonEmptyEnv(re.BuildEnvs, "BP_CONDA_SOLVER", "BUILD_CONDA_SOLVER"))
setAnnotationValue(annotations, "cnb-bp-live-reload-enabled", re.BuildEnvs["BUILD_LIVE_RELOAD_ENABLED"])
setAnnotationValue(annotations, bpEnvToAnnotationKey("PIP_INDEX_URL"), firstNonEmptyEnv(re.BuildEnvs, "PIP_INDEX_URL", "BUILD_PIP_INDEX_URL"))
setAnnotationValue(annotations, bpEnvToAnnotationKey("PIP_EXTRA_INDEX_URL"), firstNonEmptyEnv(re.BuildEnvs, "PIP_EXTRA_INDEX_URL", "BUILD_PIP_EXTRA_INDEX_URL"))
setAnnotationValue(annotations, bpEnvToAnnotationKey("PIP_TRUSTED_HOST"), firstNonEmptyEnv(re.BuildEnvs, "PIP_TRUSTED_HOST", "BUILD_PIP_TRUSTED_HOST"))
poetrySourceName := strings.TrimSpace(re.BuildEnvs["BUILD_POETRY_SOURCE_NAME"])
poetrySourceURL := strings.TrimSpace(re.BuildEnvs["BUILD_POETRY_SOURCE_URL"])
if poetrySourceName != "" && poetrySourceURL != "" {
envName := fmt.Sprintf("POETRY_REPOSITORIES_%s_URL", normalizeEnvNameToken(poetrySourceName))
setAnnotationValue(annotations, bpEnvToAnnotationKey(envName), poetrySourceURL)
}
condaChannelURL := firstNonEmptyEnv(re.BuildEnvs, "CONDA_CHANNELS", "BUILD_CONDA_CHANNEL_URL")
setAnnotationValue(annotations, bpEnvToAnnotationKey("CONDA_CHANNELS"), condaChannelURL)
}
func (p *pythonConfig) BuildEnvVars(re *build.Request) []corev1.EnvVar {
var envs []corev1.EnvVar
envs = appendEnvVar(envs, "PIP_INDEX_URL", firstNonEmptyEnv(re.BuildEnvs, "PIP_INDEX_URL", "BUILD_PIP_INDEX_URL"))
envs = appendEnvVar(envs, "PIP_EXTRA_INDEX_URL", firstNonEmptyEnv(re.BuildEnvs, "PIP_EXTRA_INDEX_URL", "BUILD_PIP_EXTRA_INDEX_URL"))
envs = appendEnvVar(envs, "PIP_TRUSTED_HOST", firstNonEmptyEnv(re.BuildEnvs, "PIP_TRUSTED_HOST", "BUILD_PIP_TRUSTED_HOST"))
poetrySourceName := strings.TrimSpace(re.BuildEnvs["BUILD_POETRY_SOURCE_NAME"])
poetrySourceURL := strings.TrimSpace(re.BuildEnvs["BUILD_POETRY_SOURCE_URL"])
if poetrySourceName != "" && poetrySourceURL != "" {
envName := fmt.Sprintf("POETRY_REPOSITORIES_%s_URL", normalizeEnvNameToken(poetrySourceName))
envs = appendEnvVar(envs, envName, poetrySourceURL)
}
envs = appendEnvVar(envs, "CONDA_CHANNELS", firstNonEmptyEnv(re.BuildEnvs, "CONDA_CHANNELS", "BUILD_CONDA_CHANNEL_URL"))
return envs
}
func (p *pythonConfig) InjectMirrorConfig(re *build.Request) error {
return ensureProcfile(re)
}
func (p *pythonConfig) CustomOrder(re *build.Request) []orderBuildpack {
return nil
}
func normalizeEnvNameToken(value string) string {
value = strings.TrimSpace(strings.ToUpper(value))
var builder strings.Builder
for _, r := range value {
switch {
case r >= 'A' && r <= 'Z':
builder.WriteRune(r)
case r >= '0' && r <= '9':
builder.WriteRune(r)
default:
builder.WriteRune('_')
}
}
return strings.Trim(builder.String(), "_")
}