diff --git a/README.md b/README.md index 0be06f4..bcd3e03 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Available resource types: - `artifactapi_remote_puppet` - `artifactapi_remote_terraform` - `artifactapi_remote_goproxy` +- `artifactapi_remote_cargo` - `artifactapi_remote_github_rpm` - `artifactapi_remote_github_deb` - `artifactapi_remote_github_alpine` diff --git a/examples/resources/artifactapi_remote_cargo/main.tf b/examples/resources/artifactapi_remote_cargo/main.tf new file mode 100644 index 0000000..2baa68f --- /dev/null +++ b/examples/resources/artifactapi_remote_cargo/main.tf @@ -0,0 +1,23 @@ +terraform { + required_providers { + artifactapi = { + source = "git.unkin.net/unkin/artifactapi" + version = "0.0.1" + } + } +} + +provider "artifactapi" { + endpoint = "https://artifactapi.example.com" +} + +# Cargo remote proxies a crates.io sparse registry. +# The provider knows index files are mutable; .crate downloads are immutable. +resource "artifactapi_remote_cargo" "crates_io" { + name = "crates-io" + base_url = "https://index.crates.io" + description = "crates.io sparse registry" + + immutable_ttl = 0 + mutable_ttl = 300 +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 85a6603..ce54a26 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -68,6 +68,7 @@ func (p *ArtifactAPIProvider) Resources(_ context.Context) []func() resource.Res newRemoteResource("puppet"), newRemoteResource("terraform"), newRemoteResource("goproxy"), + newRemoteResource("cargo"), newRemoteResource("github_rpm"), newRemoteResource("github_deb"), newRemoteResource("github_alpine"), diff --git a/internal/provider/provider_test.go b/internal/provider/provider_test.go index 75791ef..fd88927 100644 --- a/internal/provider/provider_test.go +++ b/internal/provider/provider_test.go @@ -65,7 +65,7 @@ func TestProvider_Schema(t *testing.T) { 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 // 13 remote resource types + 1 virtual + local_terraform/pypi/rpm/deb/alpine/docker/generic = 21 expectedCount := 22 if len(resources) != expectedCount { @@ -107,6 +107,7 @@ func TestProvider_Resources_ContainsExpectedTypes(t *testing.T) { "artifactapi_remote_puppet", "artifactapi_remote_terraform", "artifactapi_remote_goproxy", + "artifactapi_remote_cargo", "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 c03bdb5..f720554 100644 --- a/internal/provider/resource_remote.go +++ b/internal/provider/resource_remote.go @@ -82,6 +82,7 @@ func NewRemoteAlpine() resource.Resource { return &remoteResource{packageType func NewRemotePuppet() resource.Resource { return &remoteResource{packageType: "puppet"} } 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 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 0426b35..469da45 100644 --- a/internal/provider/resource_remote_test.go +++ b/internal/provider/resource_remote_test.go @@ -163,6 +163,7 @@ func TestModelToAPI_PackageTypeFromResource(t *testing.T) { {"puppet"}, {"terraform"}, {"goproxy"}, + {"cargo"}, } for _, tt := range tests { @@ -524,6 +525,7 @@ func TestNewRemoteResource_Constructors(t *testing.T) { {"puppet", func() resource.Resource { return NewRemotePuppet() }, "puppet"}, {"terraform", func() resource.Resource { return NewRemoteTerraform() }, "terraform"}, {"goproxy", func() resource.Resource { return NewRemoteGoProxy() }, "goproxy"}, + {"cargo", func() resource.Resource { return NewRemoteCargo() }, "cargo"}, {"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"},