Files
unkinben b26e651d45
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
feat: add artifactapi_remote_github_rpm resource
The artifactapi server gains a github_rpm remote type that exposes a GitHub
repo's releases as a metadata-only yum repository (synthesized repodata, no
precache, downloads redirected to a backend remote). Surface it through the
provider so these remotes are declarable as code alongside the other types.

- Register the github_rpm remote resource (artifactapi_remote_github_rpm),
  reusing the shared remoteResource plumbing; add the NewRemoteGitHubRPM
  constructor to match its siblings.
- Generalize the releases_remote attribute description: it now names the
  backend remote that serves download bytes for both the terraform remote
  (URL rewriting) and the github_rpm remote (302 redirect of .rpm downloads).
- Document the type and add an example wiring a github_rpm remote to a generic
  github.com releases_remote.

Tests cover the resource metadata type name, the constructor, and mapping of
package_type/base_url/releases_remote/patterns through the API model; the
resource-count and expected-types assertions are updated.

Depends on the github_rpm API surface in artifactapi (separate PR). Cut a
minor release (make minor) once merged.
2026-08-10 20:57:26 +10:00

45 lines
1.2 KiB
Terraform

terraform {
required_providers {
artifactapi = {
source = "git.unkin.net/unkin/artifactapi"
version = "0.0.1"
}
}
}
provider "artifactapi" {
endpoint = "https://artifactapi.example.com"
}
# Backend generic remote that serves the actual .rpm bytes from github.com.
# Its patterns must allowlist the target repo's release-download assets.
resource "artifactapi_remote_generic" "github" {
name = "github"
base_url = "https://github.com"
patterns = [
"acme/tools/releases/download/.*\\.rpm$",
]
}
# Metadata-only remote: scans acme/tools releases for .rpm assets and serves a
# synthesized yum repo. Packages are never precached; downloads 302-redirect to
# the "github" remote above.
resource "artifactapi_remote_github_rpm" "acme_tools" {
name = "acme-tools"
base_url = "https://api.github.com/repos/acme/tools"
description = "acme/tools GitHub releases as a yum repo"
releases_remote = artifactapi_remote_generic.github.name
mutable_ttl = 3600
# Optional: restrict which release assets become packages.
patterns = [
".*\\.x86_64\\.rpm$",
".*\\.noarch\\.rpm$",
]
# Optional: token for private repos / higher GitHub API rate limits.
# password = var.github_token
}