Skip to content

Interpolation seems to have broken with latest upgrade #742

@alexellis

Description

@alexellis

Having upgraded to the latest version of this Go library, our unit tests are now failing for string interpolation from environment variables:

These tests worked with the previous version being used, but are now broken, the resulting string comes out with the text {$ARCH_SUFFIX still in place.

Version in go.mod: github.com/compose-spec/compose-go v1.20.2

Is this a regression? What would you suggest?

package pkg

import (
	"os"
	"path"
	"reflect"
	"testing"

	"github.com/compose-spec/compose-go/loader"
	compose "github.com/compose-spec/compose-go/types"
)

func Test_interpolateEnv_EmptyValue(t *testing.T) {
	env := map[string]string{
		"ARCH_SUFFIX": "",
	}

	wantImage := "docker.io/openfaas/basic-auth-plugin:0.18.17"

	composeFile := `version: "3.7"
services:
  basic-auth-plugin:
    image: docker.io/openfaas/basic-auth-plugin:0.18.17${ARCH_SUFFIX}
`

	config, err := loader.ParseYAML([]byte(composeFile))
	if err != nil {
		t.Fatalf("can't parse compose file: %s", err)
	}

	var files []compose.ConfigFile
	files = append(files, compose.ConfigFile{Filename: "docker-compose.yaml", Config: config})

	compose, err := loader.Load(compose.ConfigDetails{
		WorkingDir:  os.TempDir(),
		ConfigFiles: files,
		Environment: env,
	})

	if err != nil {
		t.Fatalf("can't parse compose file: %s", err)
	}

	if compose.Services[0].Image != wantImage {
		t.Fatalf("incorrect service Image:\n\twant: %s,\n\tgot: %s", wantImage, compose.Services[0].Image)
	}

}

func Test_interpolateEnv_NewValue(t *testing.T) {
	env := map[string]string{
		"ARCH_SUFFIX": "-arm64",
	}

	wantImage := "docker.io/openfaas/basic-auth-plugin:0.18.17-arm64"

	composeFile := `version: "3.7"
services:
  basic-auth-plugin:
    image: docker.io/openfaas/basic-auth-plugin:0.18.17${ARCH_SUFFIX}
`

	config, err := loader.ParseYAML([]byte(composeFile))
	if err != nil {
		t.Fatalf("can't parse compose file: %s", err)
	}

	var files []compose.ConfigFile
	files = append(files, compose.ConfigFile{Filename: "docker-compose.yaml", Config: config})

	compose, err := loader.Load(compose.ConfigDetails{
		WorkingDir:  os.TempDir(),
		ConfigFiles: files,
		Environment: env,
	})

	if err != nil {
		t.Fatalf("can't parse compose file: %s", err)
	}

	if compose.Services[0].Image != wantImage {
		t.Fatalf("incorrect service Image:\n\twant: %s,\n\tgot: %s", wantImage, compose.Services[0].Image)
	}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions