Parallel package-type PRs conflict because every type edits the same shared lines (README tables, provider.go, server.go imports, the package type list, UI maps, the e2e caching table). A new type now only adds files.
- move per-type README sections into docs/<type>/{remote,local,virtual}.md
- split provider.go capability and metadata types into cap_*.go and metadata_*.go
- import providers via internal/provider/all, one file per type
- declare each package type in package_type_<type>.go, registered via init()
- split the e2e caching cases and UI colours/snippets into per-type files
Reviewed-on: #150
Co-authored-by: unkin-agent <unkin-agent@unkin.net>
Co-committed-by: unkin-agent <unkin-agent@unkin.net>
1.1 KiB
Serving providers as a registry
A local terraform repo is a real provider registry: upload
terraform-provider-{type}_{version}_{os}_{arch}.zip files under
{namespace}/{type}/, and Terraform installs them from a bare source address —
no .terraformrc mirror config:
terraform {
required_providers {
artifactapi = {
source = "artifactapi.example.com/<repo>/<type>"
version = "0.1.2"
}
}
}
The Terraform namespace segment is the artifactapi repo name; the provider is
matched by type. The registry serves service discovery
(/.well-known/terraform.json), the providers.v1 version/download endpoints,
and a GPG-signed SHA256SUMS per the provider registry protocol.
Signing needs a GPG key. By default artifactapi generates one on first start and
stores it in the database (signing_keys table), so every replica shares it and
there's nothing to provision. To bring your own key instead, point
TF_SIGNING_KEY_PATH at an armored private key (optionally
TF_SIGNING_KEY_PASSPHRASE), which takes precedence over the generated one.
TF_PROVIDER_PROTOCOLS (default 5.0,6.0) sets the advertised plugin protocols.