39 Commits

Author SHA1 Message Date
benvin 5a0c1fe814 Merge pull request 'Add artifactapi remotes for jellyfin-ha auth plugins' (#39) from benvin/jellyfin-plugin-remotes into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #39
2026-08-29 11:52:23 +10:00
unkin-agent 11c3059b05 Add artifactapi remotes for jellyfin-ha auth plugins
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
jellyfin-ha bakes the LDAP and SSO auth plugins into its image, and all
outside artifacts must be fetched via artifactapi rather than direct.

- Add remote_generic/jellyfin.yaml proxying repo.jellyfin.org, scoped to
  the ldap-authentication plugin zip.
- Add a github.yaml pattern for 9p4/jellyfin-plugin-sso release zips
  (GitHub redirects release downloads to objects.githubusercontent.com,
  which the existing github remote already follows).
2026-08-26 23:23:27 +10:00
benvin e7113bb0b3 Merge pull request 'Allow ghcr.io/arabcoders/watchstate via artifactapi' (#38) from benvin/ghcr-remote into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #38
2026-08-24 21:39:05 +10:00
unkin-agent b776d16a9c Narrow arabcoders allow-pattern to watchstate per review
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
2026-08-24 21:37:30 +10:00
unkin-agent 5596088c57 Allow ghcr.io/arabcoders/watchstate via artifactapi
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Add arabcoders pattern to ghcr remote to enable pulling watchstate
image through artifactapi for media watch-state sync deployment.
2026-08-24 21:22:58 +10:00
benvin 4e141add6f Merge pull request 'Run plan without acquiring the Consul state lock' (#37) from benvin/lockfree-plan into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #37
2026-08-23 22:31:48 +10:00
unkin-agent 1013d5a26b Run plan without acquiring the Consul state lock
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
PR plan pipelines were failing with "Error acquiring the state lock"
when they collided with a concurrent apply (or another plan) holding
the lock on the same Consul-backed state.

- plan: pass -lock=false to terragrunt plan; apply keeps locking
2026-08-23 22:21:06 +10:00
benvin f160ded56f Merge pull request 'Allow kube-state-metrics through the k8s-registry docker remote' (#36) from benvin/registry-k8s-io into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #36
2026-08-23 21:36:37 +10:00
unkin-agent 35b44f3956 Allow kube-state-metrics through the k8s-registry docker remote
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/plan Pipeline was successful
2026-08-23 21:32:05 +10:00
benvin 212a82539c Merge pull request 'quay remote: allowlist oauth2-proxy images' (#35) from benvin/quay-oauth2-proxy into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #35
2026-08-17 21:30:39 +10:00
unkin-agent 62c8307c08 quay remote: allowlist oauth2-proxy images
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Adds the ^oauth2-proxy/ pattern to the quay.io remote so the
artifactapi caching proxy will serve quay.io/oauth2-proxy/oauth2-proxy.
Needed so the arrproxy oauth2-proxy sidecar can pull the real upstream
quay.io address via the rke2 registries.yaml mirror.
2026-08-17 20:43:43 +10:00
benvin 8ddfc99e00 Merge pull request 'ghcr: allowlist oauth2-proxy for the arrproxy sidecar' (#34) from benvin/oauth2-proxy-image into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #34
2026-08-16 17:37:11 +10:00
unkin-agent f68de9283b ghcr: allowlist oauth2-proxy for the arrproxy sidecar
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
2026-08-16 16:25:43 +10:00
benvin 96555885be Merge pull request 'fix(fedora): repoint remote to gsl-syd (rackspace dropped F44)' (#32) from benvin/fedora-mirror-fcix into main
ci/woodpecker/push/apply Pipeline was successful
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Reviewed-on: #32
2026-08-15 15:34:49 +10:00
unkin-agent 8e88642bfa fix(fedora): repoint remote to gsl-syd (rackspace dropped F44)
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Rackspace (syd.mirror.rackspace.com) never synced Fedora 44: it serves
releases/43 but 404s on releases/44/.../repomd.xml, breaking dnf makecache
for F44 through the caching proxy. Repoint to gsl-syd.mm.fcix.net, a
Sydney-local FCIX tier-1 mirror that is fully synced for F44 (releases +
updates + Packages, verified 200, ~25ms), using the standard
/fedora/linux layout root.
2026-08-15 15:25:13 +10:00
benvin 770c489e40 Merge pull request 'dockerhub: allowlist linuxserver images for arrstack' (#31) from benvin/media-arr-images into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #31
2026-08-15 13:21:23 +10:00
unkin-agent b4670ea796 dockerhub: allowlist linuxserver images for arrstack
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
2026-08-15 13:12:48 +10:00
benvin baba4ba26e Merge pull request 'ghcr: allow k8up-io images through the docker remote' (#30) from benvin/k8up-images into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #30
2026-08-15 12:30:25 +10:00
benvin 05e8903207 Merge pull request 'Add valkey-operator artifactapi remotes' (#29) from benvin/valkey-operator-artifactapi into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #29
2026-08-15 12:13:03 +10:00
unkin-agent 01a09a229a ghcr: allow k8up-io images through the docker remote
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/plan Pipeline was successful
The k8up operator (deployed via the k8up-system app) and its restic
backup/prune/check jobs both run ghcr.io/k8up-io/k8up, which the
containerd mirror only serves when the image path is allowlisted.

- Add ^k8up-io/ to the ghcr remote patterns
2026-08-15 12:09:28 +10:00
unkin-agent 5b6af846b8 Add valkey-operator artifactapi remotes
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Adds a valkey helm remote and allowlists the operator/exporter images so the
valkey-operator install in argocd-apps resolves everything through artifactapi.

- Add config/remote_helm/valkey.yaml proxying https://valkey.io/valkey-helm
- Add valkey to the virtual/helm member list
- Allow ^valkey-io/ on the ghcr remote (operator image ghcr.io/valkey-io/valkey-operator)
- Allow ^oliver006/redis_exporter on dockerhub (Valkey metrics exporter)
2026-08-15 12:06:00 +10:00
benvin f822e463e1 Merge pull request 'Add k8up Helm remote to virtual helm proxy' (#28) from benvin/k8up-helm-remote into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #28
2026-08-13 23:41:41 +10:00
unkin-agent c5ce67a5d1 Add k8up Helm remote to virtual helm proxy
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
The k8up backup operator will be installed via ArgoCD, which pulls charts
through the artifactapi virtual helm proxy. That proxy resolves only the
remotes listed as members, so the upstream k8up repo must be registered.

- Add config/remote_helm/k8up.yaml pointing at https://k8up-io.github.io/k8up
- Register k8up as a member of the virtual helm repository
2026-08-13 23:31:59 +10:00
benvin 2c3f52181a Merge pull request 'artifactapi module: plumb mirror_strategy on rpm/apk remotes' (#26) from benvin/mirror-strategy-config into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #26
2026-08-13 20:10:50 +10:00
unkin-agent b8ee0ed385 artifactapi module: plumb mirror_strategy on rpm/apk(alpine) remotes
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/plan Pipeline was successful
Expose the provider v0.5.1 mirror_strategy field through the config module
so rpm and alpine(apk) remotes can select how upstream mirrors are chosen
(round_robin | least_conn) across base_url + mirrorlist. Completes the
mirror IaC surface started in #24.

- remote_rpm / remote_alpine object vars gain mirror_strategy = optional(string, null)
- pass mirror_strategy through to the corresponding remote resources
- provider constraint stays ~> 0.5 (already resolves v0.5.1, which adds the attr)

Additive and optional; no real remote config changes.
2026-08-13 20:06:15 +10:00
benvin a335dc75f8 Merge pull request 'add ghcr.io container remote (for ghp image pull-through)' (#25) from benvin/ghcr-remote into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #25
2026-08-13 20:02:33 +10:00
benvin 6c4b37ff17 Merge pull request 'artifactapi module: support mirrorlist on rpm/apk(alpine) remotes' (#24) from benvin/mirrorlist-config into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #24
2026-08-13 19:54:02 +10:00
unkin-agent 62d5e2fb14 ghcr remote: allow goodtune/ghp for pull-through
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
2026-08-13 19:31:01 +10:00
unkin-agent c21beda154 artifactapi module: support mirrorlist on rpm/apk(alpine) remotes
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Expose the provider v0.5.0 mirrorlist field through the config module so
rpm and alpine(apk) remotes can declare extra upstream mirror base URLs
(load-balanced with failover across base_url + mirrorlist).

- remote_rpm / remote_alpine object vars gain mirrorlist = optional(list(string), [])
- pass mirrorlist through to the corresponding remote resources
- bump artifactapi provider constraint to ~> 0.5

Additive and optional; no real remote config changes (deferred follow-up).
2026-08-13 17:39:25 +10:00
benvin 2ce7478b5e Merge pull request 'fedora remote: switch base_url to syd.mirror.rackspace.com (fast AU mirror w/ F44)' (#23) from benvin/fedora-mirror-unistuttgart into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #23
2026-08-13 07:02:05 +10:00
unkin-agent 1f12b513ea fedora remote: switch base_url to syd.mirror.rackspace.com
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
2026-08-13 06:42:27 +10:00
unkin-agent e0236b0584 fedora remote: switch base_url to ftp.uni-stuttgart.de
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
dl.fedoraproject.org is the throttled master, causing F44 cold-fetch
timeouts. uni-stuttgart is a fast tier-1 mirror carrying the full
releases+updates tree.
2026-08-13 00:47:19 +10:00
benvin 950a228fdc Merge pull request 'fedora remote: point base_url at dl.fedoraproject.org' (#22) from benvin/fedora-mirror-dl into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #22
2026-08-12 23:13:51 +10:00
unkin-agent 983cff4876 fedora remote: point base_url at dl.fedoraproject.org
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
The fcix micromirror (gsl-syd.mm.fcix.net) does not carry F44, so dnf
gets HTTP 404 for releases/44/Everything/x86_64/os/repodata/repomd.xml.
dl.fedoraproject.org is the canonical always-current Fedora source.
2026-08-12 22:42:45 +10:00
benvin 734f1026e2 Merge pull request 'Bump artifactapi provider to v0.2.0' (#21) from benvin/provider-v0.2.0 into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #21
2026-08-10 23:32:51 +10:00
benvin f1f6d699e5 Bump artifactapi provider to v0.2.0
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Pin the artifactapi Terraform provider to v0.2.0, which adds the artifactapi_remote_github_rpm resource (GitHub releases served as a yum repo). Verified v0.2.0 resolves and installs from the terraform-unkin registry.
2026-08-10 23:28:07 +10:00
benvin 0031eda691 Merge pull request 'Add kubernetes rpm remote (pkgs.k8s.io, any stable minor)' (#20) from benvin/kubernetes-rpm-remote into main
ci/woodpecker/push/apply Pipeline was successful
Reviewed-on: #20
2026-07-30 21:24:50 +10:00
unkinben 83e4dbd00d fix: quote base_url (trailing colon broke yaml parse)
ci/woodpecker/pr/plan Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
2026-07-30 21:16:01 +10:00
unkinben df74a5d02a Add kubernetes rpm remote (pkgs.k8s.io, any stable minor)
ci/woodpecker/pr/plan Pipeline failed
ci/woodpecker/pr/pre-commit Pipeline failed
Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
2026-07-30 21:10:59 +10:00
14 changed files with 44 additions and 4 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ init:
plan: init
@$(call vault_env) && \
terragrunt run --all --parallelism 4 --non-interactive plan
terragrunt run --all --parallelism 4 --non-interactive plan -- -lock=false
apply: init
@$(call vault_env) && \
+2
View File
@@ -28,7 +28,9 @@ patterns:
- "^jfrog/"
- "^jpgouin/"
- "^kanidm/"
- "^linuxserver/"
- "^natsio/"
- "^oliver006/redis_exporter"
- "^osixia/"
- "^rancher/"
- "^rspamd/rspamd"
+5
View File
@@ -3,14 +3,18 @@ description: GitHub Container Registry
immutable_ttl: 0
mutable_ttl: 300
patterns:
- "^arabcoders/watchstate"
- "^cloudnative-pg/"
- "^dexidp/"
- "^emberstack/helm-charts"
- "^fallenbagel/"
- "^goauthentik/"
- "^goodtune/ghp"
- "^home-operations/"
- "^jellyfin/"
- "^k8up-io/"
- "^netbox-community/"
- "^oauth2-proxy/"
- "^onedr0p/"
- "^open-webui/open-webui"
- "^openvoxproject/"
@@ -18,5 +22,6 @@ patterns:
- "^plexguide/"
- "^stakater/reloader"
- "^stalwartlabs/stalwart"
- "^valkey-io/"
- "^voxpupuli/puppetboard"
- "^woodpecker-ci/helm"
+1
View File
@@ -5,4 +5,5 @@ mutable_ttl: 300
patterns:
- "^autoscaling/vpa-"
- "^external-dns/external-dns"
- "^kube-state-metrics/"
- "^sig-storage/"
+1
View File
@@ -7,3 +7,4 @@ patterns:
- "^brancz/kube-rbac-proxy"
- "^cephcsi/cephcsi"
- "^jetstack/cert-manager-"
- "^oauth2-proxy/"
+1
View File
@@ -10,6 +10,7 @@ mutable_patterns:
- "iplocate/ip-address-databases/raw/.*/ip-to-country/.*"
patterns:
- ".*/archive/refs/tags/.*.tar.gz$"
- "9p4/jellyfin-plugin-sso/.*/sso-authentication_.*.zip$"
- "ahmetb/kubectx/.*/kubectx_.*_linux_x86_64.tar.gz$"
- "ahmetb/kubectx/.*/kubens_.*_linux_x86_64.tar.gz$"
- "apple/foundationdb/.*/libfdb_c.x86_64.so$"
+6
View File
@@ -0,0 +1,6 @@
base_url: https://repo.jellyfin.org
description: Jellyfin official plugin repository
immutable_ttl: 0
mutable_ttl: 7200
patterns:
- "files/plugin/ldap-authentication/ldap-authentication_.*.zip$"
+7
View File
@@ -0,0 +1,7 @@
base_url: https://k8up-io.github.io/k8up
description: K8up backup operator Helm charts
immutable_ttl: 0
mutable_ttl: 3600
check_mutable: true
immutable_patterns:
- "\\.tgz$"
+7
View File
@@ -0,0 +1,7 @@
base_url: https://valkey.io/valkey-helm
description: Valkey Helm charts (valkey-operator)
immutable_ttl: 0
mutable_ttl: 3600
check_mutable: true
immutable_patterns:
- "\\.tgz$"
+2 -2
View File
@@ -1,5 +1,5 @@
base_url: https://pkgs.k8s.io/core:/stable:/v1.33/rpm
description: Kubernetes upstream RPMs (kubectl/kubeadm/kubelet), stable v1.33 channel
base_url: "https://pkgs.k8s.io/core:/stable:"
description: Kubernetes upstream RPMs (kubectl/kubeadm/kubelet); version-agnostic, consumers pick the minor via path (e.g. v1.33/rpm)
immutable_ttl: 0
mutable_ttl: 7200
immutable_patterns:
+2
View File
@@ -10,9 +10,11 @@ members:
- hashicorp-helm
- intel-helm
- jetstack
- k8up
- purelb
- rancher-stable
- stakater
- traefik
- valkey
- victoriametrics
- argo-helm
+4
View File
@@ -9,6 +9,8 @@ resource "artifactapi_remote_alpine" "this" {
immutable_patterns = each.value.immutable_patterns
mutable_patterns = each.value.mutable_patterns
stale_on_error = each.value.stale_on_error
mirrorlist = each.value.mirrorlist
mirror_strategy = each.value.mirror_strategy
}
resource "artifactapi_remote_docker" "this" {
@@ -74,6 +76,8 @@ resource "artifactapi_remote_rpm" "this" {
immutable_patterns = each.value.immutable_patterns
mutable_patterns = each.value.mutable_patterns
stale_on_error = each.value.stale_on_error
mirrorlist = each.value.mirrorlist
mirror_strategy = each.value.mirror_strategy
}
resource "artifactapi_remote_pypi" "this" {
+4
View File
@@ -8,6 +8,8 @@ variable "remote_alpine" {
immutable_patterns = optional(list(string), [])
mutable_patterns = optional(list(string), [])
stale_on_error = optional(bool, true)
mirrorlist = optional(list(string), [])
mirror_strategy = optional(string, null)
}))
default = {}
}
@@ -78,6 +80,8 @@ variable "remote_rpm" {
immutable_patterns = optional(list(string), [])
mutable_patterns = optional(list(string), [])
stale_on_error = optional(bool, true)
mirrorlist = optional(list(string), [])
mirror_strategy = optional(string, null)
}))
default = {}
}
+1 -1
View File
@@ -3,7 +3,7 @@ terraform {
required_providers {
artifactapi = {
source = "artifactapi.k8s.syd1.au.unkin.net/terraform-unkin/artifactapi"
version = "0.1.4"
version = "~> 0.5"
}
}
}