Public Access
Provides a self-contained, containerized aptly (Debian repo manager) stack with independently releasable image and Helm chart versions. - images/: aptly-server (aptly built from source, cross-compiled) and aptly-deb-builder (nfpm + dpkg-buildpackage) container images - rootfs/: shared aptly-init/aptly-reconcile/aptly-push/aptly-pack scripts consumed identically by Compose and the Helm chart, driven by one declarative state.yaml contract - compose/: test (ephemeral, open) and production docker-compose stacks with an nginx read/auth sidecar - charts/aptly/: aptly-native Helm chart covering every security posture from fully open to authenticated read+write, Ingress and Gateway API support (usable in parallel for migration scenarios), metrics, and declarative repo/mirror/publish reconciliation via a Helm hook - .gitea/workflows/: CI (lint, template, kubeconform, E2E smoke test) plus separately tagged image (image/v*) and chart (chart/v*) releases, weekly rebuilds, and a preflight workflow validating the runner's Docker/Helm-OCI capabilities - pubkeys/: RSA chart-signing key for Helm --sign / Artifact Hub's signKey annotation (Helm can't verify Ed25519 keys) - docs/, README.md, charts/aptly/README.md: usage, security, and versioning documentation
422 lines
14 KiB
JSON
422 lines
14 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "aptly",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"nameOverride": { "type": "string" },
|
|
"fullnameOverride": { "type": "string" },
|
|
"image": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"repository": { "type": "string" },
|
|
"tag": { "type": "string" },
|
|
"pullPolicy": { "type": "string", "enum": ["Always", "IfNotPresent", "Never"] },
|
|
"pullSecrets": { "type": "array" }
|
|
}
|
|
},
|
|
"nginx": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"image": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"repository": { "type": "string" },
|
|
"tag": { "type": "string" },
|
|
"pullPolicy": { "type": "string", "enum": ["Always", "IfNotPresent", "Never"] }
|
|
}
|
|
},
|
|
"resources": { "type": "object" },
|
|
"securityContext": { "type": "object" }
|
|
}
|
|
},
|
|
"aptly": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"architectures": { "type": "array", "items": { "type": "string" } },
|
|
"logLevel": { "type": "string", "enum": ["debug", "info", "warn", "error"] },
|
|
"logFormat": { "type": "string", "enum": ["default", "json"] },
|
|
"download": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"concurrency": { "type": "integer", "minimum": 1 },
|
|
"limit": { "type": "integer", "minimum": 0 },
|
|
"retries": { "type": "integer", "minimum": 0 },
|
|
"sourcePackages": { "type": "boolean" }
|
|
}
|
|
},
|
|
"publishing": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"skipContents": { "type": "boolean" },
|
|
"skipBz2": { "type": "boolean" }
|
|
}
|
|
},
|
|
"metrics": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": { "enabled": { "type": "boolean" } }
|
|
},
|
|
"swagger": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": { "enabled": { "type": "boolean" } }
|
|
},
|
|
"gpg": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"verify": { "type": "boolean" },
|
|
"provider": { "type": "string", "enum": ["gpg", "internal"] },
|
|
"signingKey": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"existingSecret": { "type": "string" },
|
|
"privateKey": { "type": "string" },
|
|
"passphrase": { "type": "string" }
|
|
}
|
|
},
|
|
"publishPublicKey": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"path": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"gpgKeys": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name", "armored"],
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"armored": { "type": "string" }
|
|
}
|
|
}
|
|
},
|
|
"localRepos": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name"],
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"comment": { "type": "string" },
|
|
"defaultDistribution": { "type": "string" },
|
|
"defaultComponent": { "type": "string" }
|
|
}
|
|
}
|
|
},
|
|
"mirrors": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name", "archiveURL", "distribution"],
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"archiveURL": { "type": "string" },
|
|
"distribution": { "type": "string" },
|
|
"components": { "type": "array", "items": { "type": "string" } },
|
|
"architectures": { "type": "array", "items": { "type": "string" } },
|
|
"filter": { "type": "string" },
|
|
"filterWithDeps": { "type": "boolean" },
|
|
"downloadSources": { "type": "boolean" },
|
|
"downloadUdebs": { "type": "boolean" },
|
|
"downloadInstaller": { "type": "boolean" },
|
|
"downloadAppStream": { "type": "boolean" },
|
|
"ignoreSignatures": { "type": "boolean" },
|
|
"keyrings": { "type": "array", "items": { "type": "string" } }
|
|
}
|
|
}
|
|
},
|
|
"publish": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name", "distribution"],
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"prefix": { "type": "string" },
|
|
"distribution": { "type": "string" },
|
|
"sourceKind": { "type": "string", "enum": ["local", "snapshot"] },
|
|
"sources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name", "component"],
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"component": { "type": "string" }
|
|
}
|
|
}
|
|
},
|
|
"architectures": { "type": "array", "items": { "type": "string" } },
|
|
"acquireByHash": { "type": "boolean" },
|
|
"skipContents": { "type": "boolean" },
|
|
"skipBz2": { "type": "boolean" }
|
|
}
|
|
}
|
|
},
|
|
"configOverrides": { "type": "object", "additionalProperties": true },
|
|
"existingSecretEnv": { "type": "array", "items": { "type": "string" } }
|
|
}
|
|
},
|
|
"security": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"preset": { "type": "string", "enum": ["open", "publicRead", "authenticated", "readOnly"] },
|
|
"auth": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"users": { "type": "object", "additionalProperties": { "type": "string" } },
|
|
"existingSecret": { "type": "string" },
|
|
"internalUser": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"username": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"trustedProxies": { "type": "array", "items": { "type": "string" } },
|
|
"read": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"requireAuth": { "type": ["boolean", "null"] },
|
|
"allowCIDRs": { "type": "array", "items": { "type": "string" } }
|
|
}
|
|
},
|
|
"write": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"requireAuth": { "type": ["boolean", "null"] },
|
|
"allowCIDRs": { "type": "array", "items": { "type": "string" } },
|
|
"inClusterOnly": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"proxy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"compatPaths": { "type": "boolean" },
|
|
"maxUploadSize": { "type": "string" },
|
|
"readTimeout": { "type": "string" },
|
|
"publishEndpointName": { "type": "string" }
|
|
}
|
|
},
|
|
"persistence": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"existingClaim": { "type": "string" },
|
|
"storageClass": { "type": "string" },
|
|
"accessMode": { "type": "string", "enum": ["ReadWriteOnce", "ReadWriteOncePod"] },
|
|
"size": { "type": "string" },
|
|
"annotations": { "type": "object" }
|
|
}
|
|
},
|
|
"workload": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"updateStrategy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": { "type": { "type": "string", "enum": ["RollingUpdate", "OnDelete"] } }
|
|
},
|
|
"podManagementPolicy": { "type": "string", "enum": ["OrderedReady", "Parallel"] },
|
|
"revisionHistoryLimit": { "type": "integer", "minimum": 0 },
|
|
"terminationGracePeriodSeconds": { "type": "integer", "minimum": 0 },
|
|
"annotations": { "type": "object" },
|
|
"podAnnotations": { "type": "object" },
|
|
"podLabels": { "type": "object" }
|
|
}
|
|
},
|
|
"podSecurityContext": { "type": "object" },
|
|
"containerSecurityContext": { "type": "object" },
|
|
"resources": { "type": "object" },
|
|
"probes": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"startup": { "type": "object" },
|
|
"readiness": { "type": "object" },
|
|
"liveness": { "type": "object" }
|
|
}
|
|
},
|
|
"service": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": { "type": "string", "enum": ["ClusterIP", "NodePort", "LoadBalancer"] },
|
|
"port": { "type": "integer" },
|
|
"annotations": { "type": "object" }
|
|
}
|
|
},
|
|
"ingress": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"mode": { "type": "string", "enum": ["single", "split"] },
|
|
"className": { "type": "string" },
|
|
"annotations": { "type": "object", "additionalProperties": true },
|
|
"repo": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"host": { "type": "string" },
|
|
"path": { "type": "string" },
|
|
"pathType": { "type": "string", "enum": ["Prefix", "Exact", "ImplementationSpecific"] },
|
|
"tls": { "type": "array" }
|
|
}
|
|
},
|
|
"api": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"host": { "type": "string" },
|
|
"className": { "type": "string" },
|
|
"annotations": { "type": "object", "additionalProperties": true },
|
|
"tls": { "type": "array" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"gateway": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"apiVersion": { "type": "string" },
|
|
"mode": { "type": "string", "enum": ["single", "split"] },
|
|
"parentRefs": { "type": "array" },
|
|
"repo": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"hostnames": { "type": "array", "items": { "type": "string" } },
|
|
"path": { "type": "string" },
|
|
"pathType": { "type": "string", "enum": ["PathPrefix", "Exact", "RegularExpression"] }
|
|
}
|
|
},
|
|
"api": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"hostnames": { "type": "array", "items": { "type": "string" } },
|
|
"parentRefs": { "type": "array" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metrics": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"service": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"port": { "type": "integer" },
|
|
"annotations": { "type": "object" }
|
|
}
|
|
},
|
|
"serviceMonitor": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"interval": { "type": "string" },
|
|
"labels": { "type": "object" },
|
|
"relabelings": { "type": "array" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"reconcile": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"mode": { "type": "string", "enum": ["hook", "job", "manual"] },
|
|
"failOnError": { "type": "boolean" },
|
|
"timeoutSeconds": { "type": "integer", "minimum": 1 },
|
|
"image": { "type": "object" },
|
|
"resources": { "type": "object" }
|
|
}
|
|
},
|
|
"podDisruptionBudget": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"maxUnavailable": { "type": "integer", "minimum": 0 }
|
|
}
|
|
},
|
|
"networkPolicy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"allowedNamespaces": { "type": "array", "items": { "type": "string" } },
|
|
"extraIngress": { "type": "array" },
|
|
"egress": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"allowAll": { "type": "boolean" },
|
|
"extra": { "type": "array" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"extraEnv": { "type": "array" },
|
|
"extraEnvFrom": { "type": "array" },
|
|
"extraVolumes": { "type": "array" },
|
|
"extraVolumeMounts": { "type": "array" },
|
|
"extraInitContainers": { "type": "array" },
|
|
"extraContainers": { "type": "array" },
|
|
"nodeSelector": { "type": "object" },
|
|
"tolerations": { "type": "array" },
|
|
"affinity": { "type": "object" },
|
|
"topologySpreadConstraints": { "type": "array" },
|
|
"priorityClassName": { "type": "string" },
|
|
"global": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"imageRegistry": { "type": "string" },
|
|
"imagePullSecrets": { "type": "array" },
|
|
"defaultStorageClass": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|