From 762a8895f9190019c6ce0499be802c02389c0b57 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Apr 2026 16:48:10 +0000 Subject: [PATCH 1/3] Initial plan From f43831f3787dffe85e92ab42ef7fe36080306be8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Apr 2026 16:53:19 +0000 Subject: [PATCH 2/3] Add empty dev extension registry Agent-Logs-Url: https://github.com/Azure/azure-dev/sessions/7396ecea-a2dd-4016-8c0c-9ccc967af00c Co-authored-by: JeffreyCA <9157833+JeffreyCA@users.noreply.github.com> --- .../docs/extensions/extension-framework.md | 1 + cli/azd/extensions/registry.dev.json | 4 +++ cli/azd/pkg/extensions/registry_files_test.go | 33 +++++++++++++++++++ docs/architecture/extension-framework.md | 2 +- 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 cli/azd/extensions/registry.dev.json create mode 100644 cli/azd/pkg/extensions/registry_files_test.go diff --git a/cli/azd/docs/extensions/extension-framework.md b/cli/azd/docs/extensions/extension-framework.md index 0c76569e4a3..ae79b15fd50 100644 --- a/cli/azd/docs/extensions/extension-framework.md +++ b/cli/azd/docs/extensions/extension-framework.md @@ -73,6 +73,7 @@ azd extension source add -n azd -t url -l "https://aka.ms/azd/extensions/registr A shared development registry can be added to your `azd` configuration. This registry contains extensions that are experiments and also used for internal testing before shipping official extensions. +The registry is hosted in the [`azd` github repo](https://github.com/Azure/azure-dev/blob/main/cli/azd/extensions/registry.dev.json). To opt-in for the development registry run the following command: diff --git a/cli/azd/extensions/registry.dev.json b/cli/azd/extensions/registry.dev.json new file mode 100644 index 00000000000..f2b45f14731 --- /dev/null +++ b/cli/azd/extensions/registry.dev.json @@ -0,0 +1,4 @@ +{ + "schemaVersion": "1.0", + "extensions": [] +} diff --git a/cli/azd/pkg/extensions/registry_files_test.go b/cli/azd/pkg/extensions/registry_files_test.go new file mode 100644 index 00000000000..6d6535cb068 --- /dev/null +++ b/cli/azd/pkg/extensions/registry_files_test.go @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package extensions + +import ( + "encoding/json" + "os" + "path/filepath" + "runtime" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDevRegistryFileIsEmptyAndValid(t *testing.T) { + _, currentFile, _, ok := runtime.Caller(0) + require.True(t, ok) + + registryPath := filepath.Join(filepath.Dir(currentFile), "..", "..", "extensions", "registry.dev.json") + data, err := os.ReadFile(registryPath) + require.NoError(t, err) + + var registry Registry + require.NoError(t, json.Unmarshal(data, ®istry)) + require.Equal(t, CurrentRegistrySchemaVersion, registry.SchemaVersion) + require.Empty(t, registry.Extensions) + + result := ValidateRegistry(®istry, false) + require.True(t, result.Valid) + require.Empty(t, result.Issues) + require.Empty(t, result.Extensions) +} diff --git a/docs/architecture/extension-framework.md b/docs/architecture/extension-framework.md index 5d0f31e8171..4e60d671d1e 100644 --- a/docs/architecture/extension-framework.md +++ b/docs/architecture/extension-framework.md @@ -24,7 +24,7 @@ azd (host) Extensions are discovered from registries — JSON manifests that list available extensions with their versions, capabilities, and download URLs. - **Official registry:** `https://aka.ms/azd/extensions/registry` -- **Dev registry:** `https://aka.ms/azd/extensions/registry/dev` (unsigned builds) +- **Dev registry:** `https://aka.ms/azd/extensions/registry/dev` (unsigned builds, backed by `cli/azd/extensions/registry.dev.json`) - **Local sources:** File-based manifests for development ### Lifecycle From 815dfbdaca205573a7da1666af42f3b9ef5a8c11 Mon Sep 17 00:00:00 2001 From: Jeffrey Chen Date: Wed, 29 Apr 2026 18:18:19 +0000 Subject: [PATCH 3/3] Address feedback --- cli/azd/docs/extensions/extension-framework.md | 2 +- cli/azd/pkg/extensions/registry_files_test.go | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/cli/azd/docs/extensions/extension-framework.md b/cli/azd/docs/extensions/extension-framework.md index ae79b15fd50..06827531733 100644 --- a/cli/azd/docs/extensions/extension-framework.md +++ b/cli/azd/docs/extensions/extension-framework.md @@ -73,7 +73,7 @@ azd extension source add -n azd -t url -l "https://aka.ms/azd/extensions/registr A shared development registry can be added to your `azd` configuration. This registry contains extensions that are experiments and also used for internal testing before shipping official extensions. -The registry is hosted in the [`azd` github repo](https://github.com/Azure/azure-dev/blob/main/cli/azd/extensions/registry.dev.json). +The registry is hosted in the [`azd` GitHub repo](https://github.com/Azure/azure-dev/blob/main/cli/azd/extensions/registry.dev.json). To opt-in for the development registry run the following command: diff --git a/cli/azd/pkg/extensions/registry_files_test.go b/cli/azd/pkg/extensions/registry_files_test.go index 6d6535cb068..59eb41301c3 100644 --- a/cli/azd/pkg/extensions/registry_files_test.go +++ b/cli/azd/pkg/extensions/registry_files_test.go @@ -7,27 +7,20 @@ import ( "encoding/json" "os" "path/filepath" - "runtime" "testing" "github.com/stretchr/testify/require" ) -func TestDevRegistryFileIsEmptyAndValid(t *testing.T) { - _, currentFile, _, ok := runtime.Caller(0) - require.True(t, ok) - - registryPath := filepath.Join(filepath.Dir(currentFile), "..", "..", "extensions", "registry.dev.json") +func TestDevRegistryFileIsValid(t *testing.T) { + registryPath := filepath.Join("..", "..", "extensions", "registry.dev.json") data, err := os.ReadFile(registryPath) require.NoError(t, err) var registry Registry require.NoError(t, json.Unmarshal(data, ®istry)) require.Equal(t, CurrentRegistrySchemaVersion, registry.SchemaVersion) - require.Empty(t, registry.Extensions) result := ValidateRegistry(®istry, false) - require.True(t, result.Valid) - require.Empty(t, result.Issues) - require.Empty(t, result.Extensions) + require.True(t, result.Valid, "registry.dev.json failed validation: %+v", result) }