diff --git a/README.md b/README.md index 4d9266e..00b9bd7 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Available resource types: - `artifactapi_remote_terraform` - `artifactapi_remote_goproxy` - `artifactapi_remote_cargo` +- `artifactapi_remote_nuget` - `artifactapi_remote_github_rpm` - `artifactapi_remote_github_deb` - `artifactapi_remote_github_alpine` diff --git a/examples/resources/artifactapi_remote_nuget/main.tf b/examples/resources/artifactapi_remote_nuget/main.tf new file mode 100644 index 0000000..7a4bd45 --- /dev/null +++ b/examples/resources/artifactapi_remote_nuget/main.tf @@ -0,0 +1,24 @@ +terraform { + required_providers { + artifactapi = { + source = "git.unkin.net/unkin/artifactapi" + version = "0.0.1" + } + } +} + +provider "artifactapi" { + endpoint = "https://artifactapi.example.com" +} + +# NuGet remote proxies a NuGet v3 feed; base_url is its service index. +# Clients use /index.json as their package source. +# The provider knows indexes are mutable; .nupkg downloads are immutable. +resource "artifactapi_remote_nuget" "nuget_org" { + name = "nuget-org" + base_url = "https://api.nuget.org/v3/index.json" + description = "nuget.org v3 feed" + + immutable_ttl = 0 + mutable_ttl = 300 +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 16e4a24..22967ad 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -80,6 +80,7 @@ func (p *ArtifactAPIProvider) Resources(_ context.Context) []func() resource.Res newRemoteResource("terraform"), newRemoteResource("goproxy"), newRemoteResource("cargo"), + newRemoteResource("nuget"), newRemoteResource("github_rpm"), newRemoteResource("github_deb"), newRemoteResource("github_alpine"), diff --git a/internal/provider/provider_test.go b/internal/provider/provider_test.go index 2a6f93d..eca1b4f 100644 --- a/internal/provider/provider_test.go +++ b/internal/provider/provider_test.go @@ -66,8 +66,8 @@ func TestProvider_Resources(t *testing.T) { p := &ArtifactAPIProvider{version: "1.0.0"} resources := p.Resources(context.Background()) - // 15 remote resource types + 1 virtual + 7 local = 23 - expectedCount := 23 + // 16 remote resource types + 1 virtual + 7 local = 24 + expectedCount := 24 if len(resources) != expectedCount { t.Fatalf("expected %d resources, got %d", expectedCount, len(resources)) } @@ -108,6 +108,7 @@ func TestProvider_Resources_ContainsExpectedTypes(t *testing.T) { "artifactapi_remote_terraform", "artifactapi_remote_goproxy", "artifactapi_remote_cargo", + "artifactapi_remote_nuget", "artifactapi_remote_github_rpm", "artifactapi_remote_github_deb", "artifactapi_remote_github_alpine", diff --git a/internal/provider/resource_remote.go b/internal/provider/resource_remote.go index f720554..3f88df8 100644 --- a/internal/provider/resource_remote.go +++ b/internal/provider/resource_remote.go @@ -83,6 +83,7 @@ func NewRemotePuppet() resource.Resource { return &remoteResource{packageType func NewRemoteTerraform() resource.Resource { return &remoteResource{packageType: "terraform"} } func NewRemoteGoProxy() resource.Resource { return &remoteResource{packageType: "goproxy"} } func NewRemoteCargo() resource.Resource { return &remoteResource{packageType: "cargo"} } +func NewRemoteNuGet() resource.Resource { return &remoteResource{packageType: "nuget"} } func NewRemoteGitHubRPM() resource.Resource { return &remoteResource{packageType: "github_rpm"} } func NewRemoteGitHubDeb() resource.Resource { return &remoteResource{packageType: "github_deb"} } func NewRemoteGitHubAlpine() resource.Resource { diff --git a/internal/provider/resource_remote_test.go b/internal/provider/resource_remote_test.go index 469da45..adf7aef 100644 --- a/internal/provider/resource_remote_test.go +++ b/internal/provider/resource_remote_test.go @@ -164,6 +164,7 @@ func TestModelToAPI_PackageTypeFromResource(t *testing.T) { {"terraform"}, {"goproxy"}, {"cargo"}, + {"nuget"}, } for _, tt := range tests { @@ -526,6 +527,7 @@ func TestNewRemoteResource_Constructors(t *testing.T) { {"terraform", func() resource.Resource { return NewRemoteTerraform() }, "terraform"}, {"goproxy", func() resource.Resource { return NewRemoteGoProxy() }, "goproxy"}, {"cargo", func() resource.Resource { return NewRemoteCargo() }, "cargo"}, + {"nuget", func() resource.Resource { return NewRemoteNuGet() }, "nuget"}, {"github_rpm", func() resource.Resource { return NewRemoteGitHubRPM() }, "github_rpm"}, {"github_deb", func() resource.Resource { return NewRemoteGitHubDeb() }, "github_deb"}, {"github_alpine", func() resource.Resource { return NewRemoteGitHubAlpine() }, "github_alpine"},