Registry Publication
Registry Publication Overview
Publishing to the Terraform Registry makes your provider accessible to all Terraform users worldwide.
Prerequisites
Before publishing:
- ✅ GitHub repository following naming convention
- ✅ Complete documentation in
docs/directory - ✅ Examples in
examples/directory - ✅ GPG key registered
- ✅ At least one signed release
- ✅ Open source license
Step-by-Step Publication
Step 1: Prepare Repository
Verify repository structure:
terraform-provider-cachecloud/
├── .github/workflows/
│ ├── release.yml
│ └── test.yml
├── .goreleaser.yml
├── docs/
│ ├── index.md
│ ├── data-sources/
│ │ └── cache.md
│ ├── guides/
│ │ └── getting-started.md
│ └── resources/
│ └── cache.md
├── examples/
│ ├── provider/
│ │ └── provider.tf
│ ├── resources/
│ │ └── cachecloud_cache/
│ │ ├── resource.tf
│ │ └── import.sh
│ └── data-sources/
│ └── cachecloud_cache/
│ └── data-source.tf
├── internal/provider/
├── LICENSE
├── README.md
├── CHANGELOG.md
├── main.go
└── go.mod
Step 2: Register GPG Key
# Export public key
gpg --armor --export $KEY_ID > public-key.asc
# Navigate to Terraform Registry
open https://registry.terraform.io/settings/gpg-keys
# Add GPG Key:
# 1. Click "Add GPG Key"
# 2. Paste contents of public-key.asc
# 3. Click "Add key"
Key format:
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGBk...
...
-----END PGP PUBLIC KEY BLOCK-----
Step 3: Create Initial Release
# Ensure all changes committed
git status
# Update version
# - Update CHANGELOG.md
# - Update README.md
# Commit changes
git add .
git commit -m "Prepare v1.0.0 release"
git push origin main
# Create and push signed tag
git tag -s v1.0.0 -m "Release v1.0.0
Initial release of CacheCloud provider:
- Support for cache resources
- Support for cache data sources
- Redis and Memcached engines
- Multi-AZ configuration
- Backup configuration"
git push origin v1.0.0
Step 4: Verify Release
# Wait for GitHub Actions to complete (5-10 minutes)
# Check release page
open https://github.com/example/terraform-provider-cachecloud/releases/tag/v1.0.0
# Verify artifacts present:
# - Binaries for each platform
# - SHA256SUMS file
# - SHA256SUMS.sig file
# - terraform-registry-manifest.json
Expected artifacts:
terraform-provider-cachecloud_1.0.0_darwin_amd64.zip
terraform-provider-cachecloud_1.0.0_darwin_arm64.zip
terraform-provider-cachecloud_1.0.0_linux_amd64.zip
terraform-provider-cachecloud_1.0.0_linux_arm64.zip
terraform-provider-cachecloud_1.0.0_windows_amd64.zip
terraform-provider-cachecloud_1.0.0_SHA256SUMS
terraform-provider-cachecloud_1.0.0_SHA256SUMS.sig
terraform-provider-cachecloud_1.0.0_manifest.json
Step 5: Publish to Registry
# Navigate to registry
open https://registry.terraform.io/publish/provider
# Publish Provider:
# 1. Select "GitHub"
# 2. Choose repository: example/terraform-provider-cachecloud
# 3. Review information
# 4. Click "Publish Provider"
Step 6: Wait for Processing
Registry processing (10-15 minutes):
- Validates repository structure
- Verifies GPG signatures
- Parses documentation
- Generates provider page
- Indexes for search
Step 7: Verify Publication
# Check provider page
open https://registry.terraform.io/providers/example/cachecloud
# Verify:
# - Provider overview displayed
# - Documentation rendered
# - Versions listed
# - Download statistics
Registry Manifest
Create terraform-registry-manifest.json:
{
"version": 1,
"metadata": {
"protocol_versions": ["6.0"]
}
}
Include in .goreleaser.yml:
checksum:
extra_files:
- glob: 'terraform-registry-manifest.json'
name_template: '{{ .ProjectName }}_{{ .Version }}_manifest.json'
release:
extra_files:
- glob: 'terraform-registry-manifest.json'
name_template: '{{ .ProjectName }}_{{ .Version }}_manifest.json'
Documentation Rendering
Provider Page
Registry renders docs/index.md as main page:
---
page_title: "Provider: CacheCloud"
description: |-
The CacheCloud provider manages CacheCloud resources.
---
# CacheCloud Provider
The CacheCloud provider allows Terraform to manage CacheCloud infrastructure.
## Example Usage
```terraform
provider "cachecloud" {
api_key = var.cachecloud_api_key
}
Authentication
…
### Resource Pages
Registry renders each `docs/resources/*.md`:
https://registry.terraform.io/providers/example/cachecloud/latest/docs/resources/cache
### Data Source Pages
Registry renders each `docs/data-sources/*.md`:
https://registry.terraform.io/providers/example/cachecloud/latest/docs/data-sources/cache
### Guides
Registry renders `docs/guides/*.md`:
https://registry.terraform.io/providers/example/cachecloud/latest/docs/guides/getting-started
## Version Management
### Publishing New Versions
```bash
# Update code and documentation
# Update CHANGELOG.md
# Commit changes
git add .
git commit -m "Release v1.1.0"
git push origin main
# Create and push tag
git tag -s v1.1.0 -m "Release v1.1.0"
git push origin v1.1.0
# Registry automatically picks up new release
Version Listing
Registry displays all published versions:
Versions
├── v1.2.0 (latest)
├── v1.1.0
├── v1.0.1
└── v1.0.0
Version Selection
Users can select specific versions:
terraform {
required_providers {
cachecloud = {
source = "example/cachecloud"
# Latest
version = "~> 1.0"
# Specific
version = "1.2.0"
# Range
version = ">= 1.0.0, < 2.0.0"
}
}
}
Provider Verification
Getting Verified
Partner providers can request verification:
- Apply for Partnership
- Email: terraform-provider-dev@hashicorp.com
- Include: Company info, provider details
- Verification Process
- Technical review
- Documentation review
- Security review
- Legal agreements
- Verified Badge
- Displayed on provider page
- Increased trust
- Featured in search
Verification Benefits
- ✅ Verified badge on provider page
- ✅ Higher search ranking
- ✅ Featured in registry
- ✅ Official HashiCorp support
- ✅ Marketing opportunities
Usage Analytics
Available Metrics
Registry provides analytics dashboard:
Download Statistics:
- Total downloads
- Downloads by version
- Downloads by platform
- Growth trends
User Statistics:
- Active users
- Geographic distribution
- Terraform version usage
Resource Statistics:
- Most used resources
- Most used data sources
Accessing Analytics
# Navigate to your provider
open https://registry.terraform.io/providers/example/cachecloud
# Click "Analytics" tab
Example analytics:
Total Downloads: 15,234
Last 30 Days: 2,456
Version Distribution:
v1.2.0: 45%
v1.1.0: 30%
v1.0.0: 25%
Top Platforms:
Linux: 65%
macOS: 25%
Windows: 10%
Geographic:
US: 45%
EU: 35%
Asia: 20%
Troubleshooting Publication
Issue: Documentation Not Rendering
Problem:
Documentation pages appear blank
Solution:
- Verify frontmatter format:
--- page_title: "Resource: cachecloud_cache" description: |- Manages a cache instance. --- - Check file structure:
docs/resources/cache.md # Not Cache.md or cache.tf - Validate with tfplugindocs:
tfplugindocs validate - Wait for reprocessing (can take 15 minutes)
Issue: Version Not Appearing
Problem:
New release not showing on registry
Solution:
- Verify tag is signed:
git tag -v v1.1.0 - Check release artifacts:
- SHA256SUMS present
- SHA256SUMS.sig present
- All platform binaries present
-
Verify GPG key registered in registry
- Wait for processing (10-15 minutes)
Issue: Signature Verification Failed
Problem:
Provider signature verification failed
Solution:
- Re-export and register public key:
gpg --armor --export $KEY_ID > public-key.asc -
Ensure private key matches public key
- Re-sign release:
git tag -sf v1.0.0 v1.0.0 -m "Release v1.0.0" git push --force origin v1.0.0
Issue: Repository Not Found
Problem:
Could not find repository example/terraform-provider-cachecloud
Solution:
- Verify repository name follows convention:
terraform-provider-{NAME} -
Ensure repository is public
- Check GitHub account linked to registry:
Settings → Connections → GitHub
Post-Publication Tasks
1. Announce Release
# Example announcement
🎉 We're excited to announce the CacheCloud Terraform Provider v1.0.0!
The CacheCloud provider enables infrastructure-as-code management of CacheCloud resources.
Key features:
✅ Redis and Memcached support
✅ Multi-AZ deployments
✅ Automatic backups
✅ Full resource lifecycle management
Get started:
```terraform
terraform {
required_providers {
cachecloud = {
source = "example/cachecloud"
version = "~> 1.0"
}
}
}
📖 Documentation: https://registry.terraform.io/providers/example/cachecloud 📦 GitHub: https://github.com/example/terraform-provider-cachecloud
#Terraform #IaC #CacheCloud
### 2. Update Documentation
```markdown
# README.md
Add registry badge:
[](https://registry.terraform.io/providers/example/cachecloud)
3. Monitor Feedback
- Watch GitHub issues
- Monitor registry reviews
- Track download statistics
- Respond to questions
4. Plan Next Release
# ROADMAP.md
## v1.1.0 (Q3 2026)
- Add cluster mode support
- Add parameter group resource
- Improve error messages
## v1.2.0 (Q4 2026)
- Add snapshot management
- Add monitoring integration
- Performance improvements
## v2.0.0 (Q1 2027)
- Breaking: Rename attributes for consistency
- Add advanced networking features
- Add cost optimization features
Best Practices
1. Documentation Quality
# ✅ Good: Comprehensive docs
- Provider overview
- Authentication guide
- All resources documented
- All data sources documented
- Getting started guide
- Migration guides
- Complete examples
# ❌ Bad: Minimal docs
- Only provider overview
- No examples
- Missing resource documentation
2. Release Frequency
# ✅ Good: Regular releases
v1.0.0 - Jan 2026 (Initial)
v1.1.0 - Mar 2026 (New features)
v1.2.0 - May 2026 (Enhancements)
v1.2.1 - Jun 2026 (Bug fix)
# ❌ Bad: Irregular releases
v1.0.0 - Jan 2026
v2.0.0 - Dec 2026 (No minor releases)
3. Changelog Maintenance
# ✅ Good: Detailed changelog
## [1.1.0] - 2026-03-15
### Added
- New cluster mode support (#45)
- Parameter group resource (#47)
### Changed
- Improved error messages (#48)
### Fixed
- Fixed state refresh issue (#49)
# ❌ Bad: Vague changelog
## [1.1.0]
- Updates
Key Takeaways
- ✅ Follow all repository requirements
- ✅ Register GPG key before first release
- ✅ Ensure complete documentation
- ✅ Create signed releases
- ✅ Wait for registry processing
- ✅ Monitor analytics
- ✅ Respond to user feedback
- ✅ Maintain regular release cadence
- ✅ Keep documentation updated
- ✅ Plan future releases
What’s Next?
Explore alternative distribution strategies for private and enterprise deployments.
Next: Distribution Strategies →
Previous: ← Signing & Security
Next: Distribution Strategies →
Last updated: June 30, 2026