Add artifactapi_remote_vcs resource #35

Merged
benvin merged 2 commits from benvin/remote-vcs into main 2026-10-24 17:21:17 +11:00
3 changed files with 59 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
# `artifactapi_remote_vcs`
Caches GitHub (`base_url = "https://github.com"`) or Gitea source archives and release assets. Tag, commit and release-download paths are immutable; branch archives redirect to the archive of the branch's current commit, re-resolved after `mutable_ttl`. Paths: [vcs remote](https://git.unkin.net/unkin/artifactapi/src/branch/master/docs/vcs/remote.md).
## Common Attributes
| Attribute | Required | Default | Description |
|----------------------|----------|---------|-------------------------------------------------------------------|
| `name` | Yes | | Unique name (forces replacement on change) |
| `base_url` | Yes | | Upstream repository URL |
| `description` | No | `""` | Human-readable description |
| `username` | No | `""` | Upstream auth username (sensitive) |
| `password` | No | `""` | Upstream auth password (sensitive) |
| `immutable_ttl` | No | `0` | TTL in seconds for immutable artifacts (0 = cache forever) |
| `mutable_ttl` | No | `3600` | TTL in seconds for mutable artifacts |
| `check_mutable` | No | `true` | Enable conditional revalidation for mutable artifacts |
| `patterns` | No | | Allowlist of path patterns to proxy (empty = all) |
| `blocklist` | No | | Paths to always deny (checked before patterns) |
| `mutable_patterns` | No | | Override: treat matching paths as mutable |
| `immutable_patterns` | No | | Override: treat matching paths as immutable |
| `quarantine_enabled` | No | `false` | Enable quarantine for new artifacts |
| `quarantine_days` | No | `3` | Days to quarantine new artifacts |
| `stale_on_error` | No | `true` | Serve stale cache when upstream is unreachable |
| `upstream_dial_timeout` | No | `0` | Upstream TCP connect timeout in seconds (0 = server default) |
| `upstream_tls_timeout` | No | `0` | Upstream TLS handshake timeout in seconds (0 = server default) |
| `upstream_response_header_timeout` | No | `0` | Upstream response-header timeout in seconds (0 = server default) |
## Example
See `examples/resources/artifactapi_remote_vcs/main.tf`.
@@ -0,0 +1,26 @@
terraform {
required_providers {
artifactapi = {
source = "artifactapi.example.com/terraform-unkin/artifactapi"
version = "0.0.1"
}
}
}
provider "artifactapi" {
endpoint = "https://artifactapi.example.com"
}
# VCS remote caches GitHub/Gitea source archives and release assets.
# Tag, commit and release paths are immutable; branch archives redirect to
# the archive of the branch's current commit, re-resolved after mutable_ttl.
resource "artifactapi_remote_vcs" "github" {
name = "github-vcs"
base_url = "https://github.com"
description = "GitHub source archives and release assets"
immutable_ttl = 0
mutable_ttl = 600
patterns = ["^cli/cli/", "^psf/requests/"]
}
+3
View File
@@ -0,0 +1,3 @@
package provider
func init() { registerResource(newRemoteResource("vcs")) }