Skip to content

Commit

Permalink
Merge pull request #337 from uselagoon/lagoon-image-cache-buildargs
Browse files Browse the repository at this point in the history
fix: add LAGOON_CACHE_ build arg support back
  • Loading branch information
tobybellwood authored Jul 23, 2024
2 parents 34c77a3 + f25c9cd commit 6a6a40e
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 7 deletions.
39 changes: 39 additions & 0 deletions cmd/identify_imagebuild_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,45 @@ func TestImageBuildConfigurationIdentification(t *testing.T) {
},
},
},
{
name: "test9 basic deployment with cache args",
args: testdata.GetSeedData(
testdata.TestData{
Namespace: "example-project-main",
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "internal/testdata/basic/lagoon.yml",
ImageCacheBuildArgsJSON: `[{"image":"harbor.example/example-project/main/node@sha256:e90daba405cbf33bab23fe8a021146811b2c258df5f2afe7dadc92c0778eef45","name":"node"}]`,
}, true),
want: imageBuild{
BuildKit: false,
BuildArguments: map[string]string{
"LAGOON_BUILD_NAME": "lagoon-build-abcdefg",
"LAGOON_PROJECT": "example-project",
"LAGOON_ENVIRONMENT": "main",
"LAGOON_ENVIRONMENT_TYPE": "production",
"LAGOON_BUILD_TYPE": "branch",
"LAGOON_GIT_SOURCE_REPOSITORY": "ssh://[email protected]/lagoon-demo.git",
"LAGOON_KUBERNETES": "remote-cluster1",
"LAGOON_GIT_SHA": "abcdefg123456",
"LAGOON_GIT_BRANCH": "main",
"NODE_IMAGE": "example-project-main-node",
"LAGOON_CACHE_node": "harbor.example/example-project/main/node@sha256:e90daba405cbf33bab23fe8a021146811b2c258df5f2afe7dadc92c0778eef45",
},
Images: []imageBuilds{
{
Name: "node",
ImageBuild: generator.ImageBuild{
BuildImage: "harbor.example/example-project/main/node:latest",
Context: "internal/testdata/basic/docker",
DockerFile: "basic.dockerfile",
TemporaryImage: "example-project-main-node",
},
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
4 changes: 4 additions & 0 deletions internal/generator/build_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,5 +81,9 @@ func collectImageBuildArguments(buildValues BuildValues) map[string]string {
buildArgs[fmt.Sprintf("%s_IMAGE", strings.ToUpper(service.Name))] = service.ImageBuild.TemporaryImage
}
}
// add lagoon image cache build arguments
for _, icba := range buildValues.ImageCacheBuildArguments {
buildArgs[fmt.Sprintf("LAGOON_CACHE_%s", icba.Name)] = icba.Image
}
return buildArgs
}
6 changes: 6 additions & 0 deletions internal/generator/buildvalues.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ type BuildValues struct {
RoutesAutogeneratePrefixes []string `json:"routesAutogeneratePrefixes"`
BackupsEnabled bool `json:"backupsEnabled"`
RouteQuota *int `json:"routeQuota"`
ImageCacheBuildArguments []ImageCacheBuildArguments `json:"imageCacheBuildArgs"`
}

type Resources struct {
Expand Down Expand Up @@ -138,6 +139,11 @@ type DynamicSecret struct {
Optional bool `json:"optional"`
}

type ImageCacheBuildArguments struct {
Image string `json:"image"`
Name string `json:"name"`
}

// ServiceValues is the values for a specific service used by a lagoon build
type ServiceValues struct {
Name string `json:"name"` // the actual compose service name
Expand Down
9 changes: 9 additions & 0 deletions internal/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ type GeneratorInput struct {
CI bool
DynamicSecrets []string
DynamicDBaaSSecrets []string
ImageCacheBuildArgsJSON string
}

func NewGenerator(
Expand Down Expand Up @@ -108,6 +109,7 @@ func NewGenerator(
prBaseSHA := helpers.GetEnv("PR_BASE_SHA", generator.PRBaseSHA, generator.Debug)
dynamicSecrets := helpers.GetEnv("DYNAMIC_SECRETS", strings.Join(generator.DynamicSecrets, ","), generator.Debug)
dynamicDBaaSSecrets := helpers.GetEnv("DYNAMIC_DBAAS_SECRETS", strings.Join(generator.DynamicDBaaSSecrets, ","), generator.Debug)
imageCacheBuildArgsJSON := helpers.GetEnv("LAGOON_CACHE_BUILD_ARGS", generator.ImageCacheBuildArgsJSON, generator.Debug)
// this is used by CI systems to influence builds, it is rarely used and should probably be abandoned
buildValues.IsCI = helpers.GetEnvBool("CI", generator.CI, generator.Debug)

Expand Down Expand Up @@ -408,6 +410,13 @@ func NewGenerator(
if err != nil {
return nil, err
}

if imageCacheBuildArgsJSON != "" {
err = json.Unmarshal([]byte(imageCacheBuildArgsJSON), &buildValues.ImageCacheBuildArguments)
if err != nil {
return nil, err
}
}
buildValues.ImageBuildArguments = collectImageBuildArguments(buildValues)
/* end compose->service configuration */

Expand Down
8 changes: 8 additions & 0 deletions internal/testdata/testdata.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ type TestData struct {
PrivateRegistryURLS []string
DynamicSecrets []string
DynamicDBaaSSecrets []string
ImageCacheBuildArgsJSON string
}

// helper function to set up all the environment variables from provided testdata
Expand Down Expand Up @@ -187,6 +188,10 @@ func SetupEnvironment(rootCmd cobra.Command, templatePath string, t TestData) (g
if err != nil {
return generator.GeneratorInput{}, err
}
err = os.Setenv("LAGOON_CACHE_BUILD_ARGS", t.ImageCacheBuildArgsJSON)
if err != nil {
return generator.GeneratorInput{}, err
}

generator, err := generator.GenerateInput(rootCmd, false)
if err != nil {
Expand Down Expand Up @@ -327,5 +332,8 @@ func GetSeedData(t TestData, defaultProjectVariables bool) TestData {
if t.DynamicDBaaSSecrets != nil {
rt.DynamicDBaaSSecrets = t.DynamicDBaaSSecrets
}
if t.ImageCacheBuildArgsJSON != "" {
rt.ImageCacheBuildArgsJSON = t.ImageCacheBuildArgsJSON
}
return rt
}
15 changes: 8 additions & 7 deletions legacy/build-deploy-docker-compose.sh
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,14 @@ DEPLOY_TYPE=$(cat .lagoon.yml | shyaml get-value environments.${BRANCH//./\\.}.d
# Load all Services that are defined
COMPOSE_SERVICES=($(cat $DOCKER_COMPOSE_YAML | shyaml keys services))

##############################################
### CACHE IMAGE LIST GENERATION
##############################################

# get a list of the images in the deployments for seeing image cache if required
export LAGOON_CACHE_BUILD_ARGS=$(kubectl -n ${NAMESPACE} get deployments -o yaml -l 'lagoon.sh/service' \
| yq -o json e '.items[].spec.template.spec.containers[].image | capture("^(?P<image>.+\/.+\/.+\/(?P<name>.+)\@.*)$")' \
| jq -sMrc)

# Figure out which services should we handle
SERVICE_TYPES=()
Expand Down Expand Up @@ -578,13 +586,6 @@ patchBuildStep "${buildStartTime}" "${buildStartTime}" "${currentStepEnd}" "${NA
previousStepEnd=${currentStepEnd}
beginBuildStep "Image Builds" "buildingImages"

##############################################
### CACHE IMAGE LIST GENERATION
##############################################

LAGOON_CACHE_BUILD_ARGS=()
readarray LAGOON_CACHE_BUILD_ARGS < <(kubectl -n ${NAMESPACE} get deployments -o yaml -l 'lagoon.sh/service' | yq e '.items[].spec.template.spec.containers[].image | capture("^(?P<image>.+\/.+\/.+\/(?P<name>.+)\@.*)$") | "LAGOON_CACHE_" + .name + "=" + .image' -)


##############################################
### BUILD IMAGES
Expand Down

0 comments on commit 6a6a40e

Please sign in to comment.