Public Access
Initial implementation: aptly container image, Compose stacks, Helm chart, and Gitea Actions pipelines
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
This commit is contained in:
@@ -0,0 +1,421 @@
|
||||
{
|
||||
"$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" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user