citadel-apps/app-standard-v1.json

227 lines
6.7 KiB
JSON
Raw Normal View History

2021-10-12 20:46:35 +00:00
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
2021-12-22 16:56:16 +00:00
"title": "Citadel app.yml v1",
"description": "The first draft of Citadel's app.yml format",
2021-10-12 20:46:35 +00:00
"type": "object",
"properties": {
"version": {
2021-12-22 16:56:16 +00:00
"type": [
"string",
"number"
],
2021-10-12 20:46:35 +00:00
"description": "The version of the app.yml format you're using."
},
"metadata": {
"type": "object",
"properties": {
"name": {
"description": "Displayed name of the app",
"type": "string"
},
"version": {
"description": "Displayed version for the app",
"type": "string"
},
"category": {
"description": "The category you'd put the app in",
"type": "string"
},
"tagline": {
"description": "A clever tagline",
"type": "string"
},
"description": {
"description": "A longer description of the app",
"type": "string"
},
"developer": {
"description": "The awesome people behind the app",
"type": "string"
},
"website": {
"description": "Displayed version for the app",
"type": "string"
},
"dependencies": {
"description": "The services the app depends on",
"type": "array",
"items": {
"type": "string"
}
},
"repo": {
"description": "The development repository for your app",
"type": "string"
},
"support": {
"description": "A link to the app support wiki/chat/...",
"type": "string"
},
"gallery": {
"type": "array",
"description": "URLs or paths in the runcitadel/app-images/[app-name] folder with app images",
"items": {
"type": "string"
}
},
"path": {
"description": "The path of the app's visible site the open button should open",
"type": "string"
},
"defaultPassword": {
"description": "The app's default password",
"type": "string"
},
"torOnly": {
"description": "Whether the app is only available over tor",
"type": "boolean"
},
"mainContainer": {
"type": "string",
"description": "The name of the main container for the app. If set, IP, port, and hidden service will be assigned to it automatically."
},
"updateContainer": {
"type": "string",
"description": "The container the developer system should automatically update."
}
},
"required": [
"name",
"version",
"category",
"tagline",
"description",
"developer",
"website",
"repo",
"support",
"gallery"
],
"additionalProperties": false
},
"containers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"image": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string",
2021-12-22 16:56:16 +00:00
"enum": [
"lnd",
"bitcoind",
"electrum",
"root",
"hw"
]
2021-10-12 20:46:35 +00:00
}
},
"ports": {
"type": "array",
"items": {
2021-12-22 16:56:16 +00:00
"type": [
"string",
"number"
]
2021-10-12 20:46:35 +00:00
}
},
"port": {
"type": "number",
"description": "If this is the main container, the port inside the container which will be exposed to the outside as the port specified in metadata."
},
"environment": {
2021-12-22 16:56:16 +00:00
"type": "object"
2021-10-12 20:46:35 +00:00
},
"data": {
"type": "array",
"description": "An array of at directories in the container the app stores its data in. Can be empty. Please only list top-level directories.",
"items": {
"type": "string"
}
},
"user": {
"type": "string",
"description": "The user the container should run as"
},
"stop_grace_period": {
"type": "string",
"description": "The grace period for stopping the container. Defaults to 1 minute."
},
"depends_on": {
"type": "array",
"description": "The services the container depends on"
},
"entrypoint": {
2021-12-22 16:56:16 +00:00
"type": [
"string",
"array"
],
2021-10-12 20:46:35 +00:00
"description": "The entrypoint for the container"
},
2021-11-21 18:07:26 +00:00
"bitcoin_mount_dir": {
"type": "string",
"description": "Where to mount the bitcoin dir"
},
2021-10-12 20:46:35 +00:00
"command": {
2021-12-22 16:56:16 +00:00
"type": [
"string",
"array"
],
2021-10-12 20:46:35 +00:00
"description": "The command for the container"
},
"init": {
"type": "boolean",
"description": "Whether the container should be run with init"
},
"stop_signal": {
"type": "string",
"description": "The signal to send to the container when stopping"
},
"noNetwork": {
"type": "boolean",
"description": "Set this to true if the container shouldn't get an IP & port exposed."
},
"needsHiddenService": {
"type": "boolean",
"description": "Set this to true if the container should be assigned a hidden service even if it's not the main container."
},
"hiddenServicePort": {
"type": "number",
"description": "Set this to a port if your container exposes multiple ports, but only one should be a hidden service."
},
"hiddenServicePorts": {
"type": "object",
"description": "Set this to a map of service names to hidden service ports if your container exposes multiple ports, and all of them should be hidden services.",
"patternProperties": {
"^[a-zA-Z0-9_]+$": {
2021-12-22 16:56:16 +00:00
"type": [
"number",
"array"
]
2021-10-12 20:46:35 +00:00
}
}
2021-11-21 18:07:26 +00:00
},
2021-12-22 16:56:16 +00:00
"restart": {
2021-11-21 18:07:26 +00:00
"type": "string",
"description": "When the container should restart. Can be 'always' or 'on-failure'."
2021-10-12 20:46:35 +00:00
}
},
"additionalProperties": false
},
"additionalProperties": false
}
},
2021-12-22 16:56:16 +00:00
"required": [
"metadata",
"containers"
],
2021-10-12 20:46:35 +00:00
"additionalProperties": false
}