diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0909e8f..5314837 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -33,7 +33,11 @@ jobs: with: go-version-file: go.mod cache: true + - name: Verify local-mode image exists + run: | + set -euo pipefail + docker manifest inspect kong/volcano:local-nightly >/dev/null - name: Run local-mode CLI contract smoke env: - VOLCANO_IMAGE: kong/volcano:nightly@sha256:1c57519c86ac156fcc7a6464c9eb6a6812795d8d438306d2a89efe486e523399 + VOLCANO_IMAGE: kong/volcano:local-nightly run: make localmode-e2e diff --git a/internal/auth/auth_test.go b/internal/auth/auth_test.go index 0557804..416dc4b 100644 --- a/internal/auth/auth_test.go +++ b/internal/auth/auth_test.go @@ -19,7 +19,9 @@ import ( cliruntime "github.com/Kong/volcano-cli/internal/runtime" ) -const authAlphaProjectID = "11111111-1111-4111-8111-111111111111" +const ( + authAlphaProjectID = "11111111-1111-4111-8111-111111111111" +) func TestLoginWithTokenSuccess(t *testing.T) { cfg := testAuthConfig(t) diff --git a/internal/cmd/localmode/localmode.go b/internal/cmd/localmode/localmode.go index 154108b..7f23459 100644 --- a/internal/cmd/localmode/localmode.go +++ b/internal/cmd/localmode/localmode.go @@ -15,8 +15,8 @@ func NewStart(deps cliruntime.Deps) *cobra.Command { Short: "Start the local Volcano development environment", Long: `Start PostgreSQL, Redis, and the Volcano local-mode server with Docker Compose. -To override the server image, set VOLCANO_IMAGE: - VOLCANO_IMAGE=kong/volcano:nightly volcano start`, +To pin or select a specific server image, set VOLCANO_IMAGE: + VOLCANO_IMAGE=kong/volcano:local-nightly volcano start`, Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { return localmodecore.NewService(deps).Start(cmd.Context(), cmd.OutOrStdout()) diff --git a/internal/localmode/assets/docker-compose.template.yml b/internal/localmode/assets/docker-compose.template.yml index 9d7a3f3..d105c28 100644 --- a/internal/localmode/assets/docker-compose.template.yml +++ b/internal/localmode/assets/docker-compose.template.yml @@ -37,7 +37,7 @@ services: retries: 5 server: - image: ${VOLCANO_IMAGE:-kong/volcano:latest} + image: ${VOLCANO_IMAGE:-kong/volcano:local-nightly} container_name: volcano-server depends_on: postgres: diff --git a/internal/localmode/compose_test.go b/internal/localmode/compose_test.go index 11c3f36..bf3e925 100644 --- a/internal/localmode/compose_test.go +++ b/internal/localmode/compose_test.go @@ -37,7 +37,7 @@ func TestComposeEnvironmentPrefersProcessImageOverDotEnvImage(t *testing.T) { cliruntime.Deps{}, WithEnvironment(func() []string { return []string{"PATH=/bin"} }, func(key string) string { if key == "VOLCANO_IMAGE" { - return "kong/volcano:nightly" + return "kong/volcano:local-nightly" } return "" }), @@ -46,10 +46,10 @@ func TestComposeEnvironmentPrefersProcessImageOverDotEnvImage(t *testing.T) { env, image, err := service.composeEnvironment() require.NoError(t, err) - assert.Equal(t, "kong/volcano:nightly", image) + assert.Equal(t, "kong/volcano:local-nightly", image) actual, ok := lastEnvValue(env, "VOLCANO_IMAGE") require.True(t, ok) - assert.Equal(t, "kong/volcano:nightly", actual) + assert.Equal(t, "kong/volcano:local-nightly", actual) } func TestComposeEnvironmentKeepsSingleResolvedVolcanoImage(t *testing.T) { @@ -62,7 +62,7 @@ func TestComposeEnvironmentKeepsSingleResolvedVolcanoImage(t *testing.T) { return []string{"PATH=/bin", "VOLCANO_IMAGE=kong/volcano:from-environ"} }, func(key string) string { if key == "VOLCANO_IMAGE" { - return "kong/volcano:nightly" + return "kong/volcano:local-nightly" } return "" }), @@ -71,8 +71,8 @@ func TestComposeEnvironmentKeepsSingleResolvedVolcanoImage(t *testing.T) { env, image, err := service.composeEnvironment() require.NoError(t, err) - assert.Equal(t, "kong/volcano:nightly", image) - assert.Equal(t, []string{"kong/volcano:nightly"}, envValues(env, "VOLCANO_IMAGE")) + assert.Equal(t, "kong/volcano:local-nightly", image) + assert.Equal(t, []string{"kong/volcano:local-nightly"}, envValues(env, "VOLCANO_IMAGE")) } func TestComposeEnvironmentDefaultsVolcanoImage(t *testing.T) { diff --git a/internal/localmode/service.go b/internal/localmode/service.go index 0455a95..f9a71d1 100644 --- a/internal/localmode/service.go +++ b/internal/localmode/service.go @@ -17,7 +17,7 @@ import ( const ( composeProjectName = "volcano" redisContainerName = "volcano-redis" - defaultVolcanoImage = "kong/volcano:nightly" + defaultVolcanoImage = "kong/volcano:local-nightly" defaultLocalAPIURL = "http://localhost:8000" postgresAddress = "localhost:8002" diff --git a/internal/localmode/start_test.go b/internal/localmode/start_test.go index 05dbf4d..27512bf 100644 --- a/internal/localmode/start_test.go +++ b/internal/localmode/start_test.go @@ -80,7 +80,7 @@ func TestStartCreatesStackPersistsMetadataAndDefaultDatabase(t *testing.T) { started = true image, ok := lastEnvValue(command.Env, "VOLCANO_IMAGE") require.True(t, ok) - assert.Equal(t, "kong/volcano:nightly", image) + assert.Equal(t, "kong/volcano:local-nightly", image) assert.Contains(t, command.Env, "VOLCANO_LOG_LEVEL=debug") assert.Contains(t, command.Env, "QUOTED=value") assert.Contains(t, command.Env, "INLINE=kept") @@ -104,7 +104,7 @@ func TestStartCreatesStackPersistsMetadataAndDefaultDatabase(t *testing.T) { WithDialTCP(func(context.Context, string) error { return nil }), WithEnvironment(func() []string { return []string{"PATH=/bin"} }, func(key string) string { if key == "VOLCANO_IMAGE" { - return "kong/volcano:nightly" + return "kong/volcano:local-nightly" } return "" }), diff --git a/tests/e2e/localmode/localmode_test.go b/tests/e2e/localmode/localmode_test.go index abc459f..7d6d604 100644 --- a/tests/e2e/localmode/localmode_test.go +++ b/tests/e2e/localmode/localmode_test.go @@ -164,7 +164,7 @@ func localModeE2EEnv(t *testing.T) []string { "VOLCANO_FIRST_PARTY_DEVICE_CLIENT_ID=", ) if os.Getenv("VOLCANO_IMAGE") == "" { - env = append(env, "VOLCANO_IMAGE=kong/volcano:nightly") + env = append(env, "VOLCANO_IMAGE=kong/volcano:local-nightly") } return env }