Ctrl K
ComunidadGuías…

builder/build/cnb/lang_python.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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(), "_")
}