From 7b86d2f022221cc3a72de23be34ef3bb47a39fbc Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Fri, 16 Oct 2026 23:21:48 +1100 Subject: [PATCH] resource_remote: add artifactapi_remote_gems --- README.md | 1 + .../resources/artifactapi_remote_gems/main.tf | 23 +++++++++++++++++++ internal/provider/provider.go | 1 + internal/provider/provider_test.go | 5 ++-- internal/provider/resource_remote.go | 1 + internal/provider/resource_remote_test.go | 2 ++ 6 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 examples/resources/artifactapi_remote_gems/main.tf diff --git a/README.md b/README.md index 4d9266e..7a56068 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_gems` - `artifactapi_remote_github_rpm` - `artifactapi_remote_github_deb` - `artifactapi_remote_github_alpine` diff --git a/examples/resources/artifactapi_remote_gems/main.tf b/examples/resources/artifactapi_remote_gems/main.tf new file mode 100644 index 0000000..8e7f6cf --- /dev/null +++ b/examples/resources/artifactapi_remote_gems/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" +} + +# Gems remote proxies a RubyGems source. +# The provider knows the compact index is mutable; .gem downloads are immutable. +resource "artifactapi_remote_gems" "rubygems" { + name = "rubygems" + base_url = "https://rubygems.org" + description = "rubygems.org" + + immutable_ttl = 0 + mutable_ttl = 300 +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 16e4a24..dc704d4 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("gems"), 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..f358c2d 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_gems", "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..0476854 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 NewRemoteGems() resource.Resource { return &remoteResource{packageType: "gems"} } 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..2b4a6d0 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"}, + {"gems"}, } 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"}, + {"gems", func() resource.Resource { return NewRemoteGems() }, "gems"}, {"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"},