1 Commits

Author SHA1 Message Date
unkinben 8f33d9c562 feat: initial commit
ci/woodpecker/pr/pre-commit Pipeline failed
ci/woodpecker/pr/plan Pipeline failed
- add modules
- add config
- add environments
- add .gitignore
- add makefile

Wire up config.hcl, variables, and terragrunt inputs for all new types.
2026-06-28 18:22:48 +10:00
49 changed files with 31 additions and 155 deletions
+1 -2
View File
@@ -7,9 +7,8 @@ steps:
image: git.unkin.net/unkin/almalinux9-opentofu:20260606
environment:
VAULT_AUTH_METHOD: kubernetes
VAULT_VERSION: "1.20.0"
commands:
- curl -fsSL -o /tmp/vault.zip "https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/hashicorp-releases/vault/$${VAULT_VERSION}/vault_$${VAULT_VERSION}_linux_amd64.zip" && python3 -m zipfile -e /tmp/vault.zip /tmp/ && install -m0755 /tmp/vault /usr/local/bin/vault && rm -f /tmp/vault.zip /tmp/vault /tmp/LICENSE.txt
- dnf install vault -y
- make plan
- make apply
backend_options:
+1 -2
View File
@@ -6,9 +6,8 @@ steps:
image: git.unkin.net/unkin/almalinux9-opentofu:20260606
environment:
VAULT_AUTH_METHOD: kubernetes
VAULT_VERSION: "1.20.0"
commands:
- curl -fsSL -o /tmp/vault.zip "https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/hashicorp-releases/vault/$${VAULT_VERSION}/vault_$${VAULT_VERSION}_linux_amd64.zip" && python3 -m zipfile -e /tmp/vault.zip /tmp/ && install -m0755 /tmp/vault /usr/local/bin/vault && rm -f /tmp/vault.zip /tmp/vault /tmp/LICENSE.txt
- dnf install vault -y
- make plan
backend_options:
kubernetes:
+1 -9
View File
@@ -1,11 +1,3 @@
# terraform-artifactapi
Terraform configuration for managing ArtifactAPI remote, local, and virtual repositories.
Repositories are declared as YAML files under `config/<kind>/<name>.yaml`, where the
filename is the repository name. `make plan` / `make apply` (via Terragrunt) reconcile
them against the ArtifactAPI instance.
Kinds: `remote_*` (caching proxies of an upstream), `local_*` (real registries hosted
directly — `local_docker`, `local_pypi`, `local_rpm`, `local_terraform`), and `virtual`
(merged views over members of one package type).
Terraform configuration for managing ArtifactAPI remote and virtual repositories
-10
View File
@@ -57,16 +57,6 @@ locals {
trimsuffix(basename(file_path), ".yaml") => content
if startswith(file_path, "local_rpm/")
}
local_docker = {
for file_path, content in local.all_configs :
trimsuffix(basename(file_path), ".yaml") => content
if startswith(file_path, "local_docker/")
}
local_generic = {
for file_path, content in local.all_configs :
trimsuffix(basename(file_path), ".yaml") => content
if startswith(file_path, "local_generic/")
}
virtual = {
for file_path, content in local.all_configs :
trimsuffix(basename(file_path), ".yaml") => content
-1
View File
@@ -1 +0,0 @@
description: "Internal container image registry"
-2
View File
@@ -1,2 +0,0 @@
---
description: "Prebuilt node rootfs tarballs for bootapi image-based provisioning (almalinux9-node-*.tar.zst)"
-1
View File
@@ -1 +0,0 @@
description: "Internal RPM packages for Enterprise Linux 10 (RHEL/AlmaLinux/Rocky 10)"
-1
View File
@@ -1 +0,0 @@
description: "Internal RPM packages for Enterprise Linux 8 (RHEL/AlmaLinux/Rocky 8)"
-1
View File
@@ -1 +0,0 @@
description: "Internal RPM packages for Enterprise Linux 9 (RHEL/AlmaLinux/Rocky 9)"
-1
View File
@@ -1 +0,0 @@
description: "Internal RPM packages for Fedora 42"
-1
View File
@@ -1 +0,0 @@
description: "Internal RPM packages for Fedora 43"
-1
View File
@@ -1 +0,0 @@
description: "Internal RPM packages for Fedora 44"
+1 -1
View File
@@ -1 +1 @@
description: "Internal RPM packages (distribution-agnostic)"
description: "Internal RPM packages"
-1
View File
@@ -1 +0,0 @@
description: "Vendored third-party RPM packages for Enterprise Linux 8 (RHEL/AlmaLinux/Rocky 8), built by rpmbuilder"
-1
View File
@@ -1 +0,0 @@
description: "Vendored third-party RPM packages for Enterprise Linux 9 (RHEL/AlmaLinux/Rocky 9), built by rpmbuilder"
-1
View File
@@ -1 +0,0 @@
description: "Vendored third-party RPM packages for Fedora 42, built by rpmbuilder"
-1
View File
@@ -1 +0,0 @@
description: "Vendored third-party RPM packages for Fedora 43, built by rpmbuilder"
-1
View File
@@ -1 +0,0 @@
description: "Vendored third-party RPM packages for Fedora 44, built by rpmbuilder"
-1
View File
@@ -1 +0,0 @@
description: "Vendored third-party RPM packages (distribution-agnostic)"
-14
View File
@@ -3,37 +3,23 @@ description: Docker Hub registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^alpine/"
- "^altinity/"
- "^library/almalinux"
- "^library/alpine"
- "^library/busybox"
- "^library/debian"
- "^library/fedora"
- "^library/nats"
- "^library/nginx"
- "^library/postgres"
- "^library/redis"
- "^beats/filebeat"
- "^bitnami/"
- "^clickhouse/"
- "^curlimages/curl"
- "^emberstack/kubernetes-reflector"
- "^gitea/gitea"
- "^grafana/"
- "^hashicorp/consul"
- "^hashicorp/vault"
- "^intel/"
- "^internetsystemsconsortium/bind9"
- "^jfrog/"
- "^jpgouin/"
- "^kanidm/"
- "^natsio/"
- "^osixia/"
- "^rancher/"
- "^rspamd/rspamd"
- "^tiredofit/"
- "^timberio/vector"
- "^tozd/postfix"
- "^traefik/"
- "^valkey/valkey"
-6
View File
@@ -1,6 +0,0 @@
base_url: https://public.ecr.aws
description: Amazon ECR Public registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^docker/library/"
+1 -10
View File
@@ -3,19 +3,10 @@ description: GitHub Container Registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^cloudnative-pg/"
- "^dexidp/"
- "^cloudnative-pg/cloudnative-pg"
- "^emberstack/helm-charts"
- "^fallenbagel/"
- "^goauthentik/"
- "^home-operations/"
- "^jellyfin/"
- "^netbox-community/"
- "^onedr0p/"
- "^open-webui/open-webui"
- "^openvoxproject/"
- "^paperclipai/"
- "^plexguide/"
- "^stakater/reloader"
- "^stalwartlabs/stalwart"
- "^voxpupuli/puppetboard"
-1
View File
@@ -3,6 +3,5 @@ description: Kubernetes container registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^autoscaling/vpa-"
- "^external-dns/external-dns"
- "^sig-storage/"
-6
View File
@@ -1,6 +0,0 @@
base_url: https://docker.litellm.ai
description: LiteLLM container registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^berriai/"
-1
View File
@@ -3,7 +3,6 @@ description: Quay.io container registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^argoproj/"
- "^brancz/kube-rbac-proxy"
- "^cephcsi/cephcsi"
- "^jetstack/cert-manager-"
-8
View File
@@ -5,9 +5,6 @@ mutable_ttl: 7200
mutable_patterns:
- ".*/archive/refs/heads/.*.tar.gz$"
- "stalwartlabs/webadmin/releases/latest/download/webadmin.zip$"
# iplocate IP databases (Git-LFS; the /raw/ path redirects to the LFS media host).
- "iplocate/ip-address-databases/raw/.*/ip-to-asn/.*"
- "iplocate/ip-address-databases/raw/.*/ip-to-country/.*"
patterns:
- ".*/archive/refs/tags/.*.tar.gz$"
- "ahmetb/kubectx/.*/kubectx_.*_linux_x86_64.tar.gz$"
@@ -28,15 +25,10 @@ patterns:
- "hadolint/hadolint/.*/hadolint-linux-x86_64$"
- "helmfile/helmfile/.*/helmfile_.*_linux_amd64.tar.gz$"
- "helmfile/vals/.*/vals_.*_linux_amd64.tar.gz$"
# iplocate IP databases (also in mutable_patterns so the daily-updated branch
# content is re-checked rather than cached immutably).
- "iplocate/ip-address-databases/raw/.*/ip-to-asn/.*"
- "iplocate/ip-address-databases/raw/.*/ip-to-country/.*"
- "jesseduffield/lazydocker/.*/lazydocker_.*_Linux_x86_64.tar.gz$"
- "kubecolor/kubecolor/.*/kubecolor_.*_linux_amd64.tar.gz$"
- "kubernetes-sigs/gateway-api/.*/standard-install.yaml$"
- "kubernetes-sigs/kustomize/.*/kustomize_.*_linux_amd64.tar.gz$"
- "kubernetes/autoscaler/raw/.*/vertical-pod-autoscaler/deploy/vpa-v1-crd-gen.yaml$"
- "lxc/incus/.*.tar.gz$"
- "mikefarah/yq/.*/yq_linux_amd64$"
- "neovim/neovim-releases/.*/nvim-linux-x86_64.tar.gz$"
+3
View File
@@ -5,6 +5,9 @@ mutable_ttl: 7200
immutable_patterns:
- ".*/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.sqlite.*$"
- ".*/repodata/.*\\.xml.*$"
- ".*/repodata/.*\\.yaml.*$"
- ".*/install.img"
- ".*/squashfs.img"
- ".*/updates.img"
+3
View File
@@ -5,6 +5,9 @@ mutable_ttl: 7200
immutable_patterns:
- ".*/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.sqlite.*$"
- ".*/repodata/.*\\.xml.*$"
- ".*/repodata/.*\\.yaml.*$"
- ".*/install.img"
- ".*/squashfs.img"
- ".*/updates.img"
+1
View File
@@ -5,3 +5,4 @@ mutable_ttl: 7200
immutable_patterns:
- ".*/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
+1
View File
@@ -5,3 +5,4 @@ mutable_ttl: 7200
immutable_patterns:
- ".*/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
+1
View File
@@ -5,3 +5,4 @@ mutable_ttl: 7200
immutable_patterns:
- ".*/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
+1
View File
@@ -3,3 +3,4 @@ description: "Claude Code RPM repository"
immutable_patterns:
- ".*/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
+3
View File
@@ -5,4 +5,7 @@ mutable_ttl: 7200
immutable_patterns:
- ".*/Everything/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.sqlite.*$"
- ".*/repodata/.*\\.xml.*$"
- ".*/repodata/.*\\.yaml.*$"
- "RPM-GPG-KEY-.*$"
-8
View File
@@ -1,8 +0,0 @@
base_url: https://archive.fedoraproject.org/pub/archive/fedora/linux
description: Fedora Linux archive mirror for EOL releases (e.g. F42); content is frozen upstream
immutable_ttl: 0
mutable_ttl: 86400
immutable_patterns:
- "releases/.*/Everything/x86_64/.*\\.rpm$"
- "updates/.*/Everything/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
+1
View File
@@ -7,3 +7,4 @@ immutable_patterns:
- "updates/.*/Everything/x86_64/.*\\.rpm$"
- "development/.*/Everything/x86_64/.*\\.rpm$"
- ".*/noarch/.*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
+1
View File
@@ -4,3 +4,4 @@ immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
-7
View File
@@ -1,7 +0,0 @@
base_url: https://pkgs.k8s.io/core:/stable:/v1.33/rpm
description: Kubernetes upstream RPMs (kubectl/kubeadm/kubelet), stable v1.33 channel
immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- "repodata/[a-f0-9]{16,}-.*$"
+1
View File
@@ -4,4 +4,5 @@ immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
- ".*/RPM-GPG-KEY-.*$"
+1
View File
@@ -4,4 +4,5 @@ immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
- "GPG-KEY-.*$"
+1
View File
@@ -4,5 +4,6 @@ immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
- ".*/RPM-GPG-KEY-.*$"
- ".*/PGDG-RPM-GPG-KEY-.*$"
+1
View File
@@ -4,4 +4,5 @@ immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
- "public.key$"
-7
View File
@@ -1,7 +0,0 @@
base_url: https://download1.rpmfusion.org/free
description: RPM Fusion free RPM package repository
immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- "RPM-GPG-KEY-.*$"
-7
View File
@@ -1,7 +0,0 @@
base_url: https://download1.rpmfusion.org/nonfree
description: RPM Fusion nonfree RPM package repository
immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- "RPM-GPG-KEY-.*$"
+1
View File
@@ -4,3 +4,4 @@ immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
- ".*\\.rpm$"
- ".*/repodata/.*\\.xml.*$"
@@ -27,7 +27,5 @@ inputs = {
local_terraform = local.config.local_terraform
local_pypi = local.config.local_pypi
local_rpm = local.config.local_rpm
local_docker = local.config.local_docker
local_generic = local.config.local_generic
virtual = local.config.virtual
}
+6
View File
@@ -15,6 +15,12 @@ terraform {
ca_file = "/etc/pki/tls/certs/ca-bundle.crt"
}
required_version = ">= 1.10"
required_providers {
artifactapi = {
source = "git.unkin.net/unkin/artifactapi"
version = "0.1.0"
}
}
}
EOF
}
-14
View File
@@ -110,20 +110,6 @@ resource "artifactapi_local_rpm" "this" {
description = each.value.description
}
resource "artifactapi_local_docker" "this" {
for_each = var.local_docker
name = each.key
description = each.value.description
}
resource "artifactapi_local_generic" "this" {
for_each = var.local_generic
name = each.key
description = each.value.description
}
resource "artifactapi_virtual" "this" {
for_each = var.virtual
-16
View File
@@ -112,14 +112,6 @@ variable "local_rpm" {
default = {}
}
variable "local_generic" {
description = "Map of local generic (raw-file) repositories"
type = map(object({
description = optional(string, "")
}))
default = {}
}
variable "local_terraform" {
description = "Map of local Terraform repositories"
type = map(object({
@@ -128,14 +120,6 @@ variable "local_terraform" {
default = {}
}
variable "local_docker" {
description = "Map of local Docker repositories (real container registries)"
type = map(object({
description = optional(string, "")
}))
default = {}
}
variable "virtual" {
description = "Map of virtual repositories"
type = map(object({
-9
View File
@@ -1,9 +0,0 @@
terraform {
required_version = ">= 1.10"
required_providers {
artifactapi = {
source = "artifactapi.k8s.syd1.au.unkin.net/terraform-unkin/artifactapi"
version = "0.1.4"
}
}
}