aboutsummaryrefslogtreecommitdiff
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://hydrilla.koszko.org/schemas/package_source-2.schema.json",
    "title": "Package source",
    "description": "Definition of a Hydrilla source package",
    "type": "object",
    "required": [
	"$schema",
	"source_name",
	"copyright",
	"upstream_url",
	"definitions"
    ],
    "properties": {
	"$schema": {
	    "description": "Mark this instance as conforming to package source schema 2.x",
	    "type": "string",
	    "pattern": "^https://hydrilla\\.koszko\\.org/schemas/package_source-2\\.(([1-9][0-9]*|0)\\.)*schema\\.json$"
	},
	"source_name": {
	    "$ref": "./common_definitions-2.schema.json#/definitions/source_name"
	},
	"copyright":  {
	    "description": "Which files from the source package indicate its license terms and should be included in the distribution packages",
	    "$ref": "./common_definitions-2.schema.json#/definitions/file_ref_list"
	},
	"upstream_url": {
	    "description": "Where this software/work initially comes from",
	    "type": "string"
	},
	"piggyback_on": {
	    "description": "Specify packages from other software system that should be used for constructing this package",
	    "anyOf": [{
		"$ref": "#/definitions/piggyback_apt"
	    }]
	},
	"comment": {
	    "$ref": "./common_definitions-2.schema.json#/definitions/comment"
	},
	"definitions": {
	    "description": "Definitions of site resources and pattern->payload mappings (possibly combined together)",
	    "type": "array",
	    "items": {
		"$ref": "#/definitions/item_definition"
	    }
	},
	"additional_files": {
	    "description": "Files which should be included in the source archive produced by Hydrilla builder in addition to script and copyright files",
	    "$ref": "./common_definitions-2.schema.json#/definitions/file_ref_list",
	    "default": []
	},
	"reuse_generate_spdx_report": {
	    "description": "Should report.spdx be automatically generated for the package using REUSE tool",
	    "type": "boolean",
	    "default": false
	}
    },
    "definitions": {
	"piggyback_apt": {
	    "description": "Specify packages from APT software system that should be used for constructing this package",
	    "type": "object",
	    "required": [
		"system",
		"packages",
		"dependencies"
	    ],
	    "properties": {
		"system": {
		    "description": "Which software system to use",
		    "const": "apt"
		},
		"distribution": {
		    "description": "Which pre-defined APT-based distribution to use (currently the only available one is Trisquel 10 Nabia)",
		    "const": "nabia"
		},
		"sources_list": {
		    "description": "What lines should be added to the sources.list file that will be generated; those will be used together with pre-defined lines for chosen distribution (if any)",
		    "type": "array",
		    "items": {
			"description": "A sources.list line like \"deb-src http://archive.trisquel.info/trisquel/ nabia main\"",
			"type": "string",
			"pattern": "^deb(-src)?(\\s+[^\\s]+){3}$"
		    },
		    "default": []
		},
		"trusted_keys": {
		    "description": "Fingerprints of additional PGP keys that should be used with supplied sources.list entries",
		    "type": "array",
		    "items": {
			"description": "A PGP fingerprint (40 hexadecimal characters)",
			"type": "string",
			"pattern": "^[0-9A-E]{40}$"
		    },
		    "default": []
		},
		"packages": {
		    "description": "Specifiers of packages that should be used, can include version constraints",
		    "type": "array",
		    "items": {
			"description": "A package specifier like \"libjs-jquery=3.3.1~dfsg-3\"",
			"type": "string"
		    },
		    "minItems": 1
		},
		"dependencies": {
		    "description": "Boolean indicating whether dependent APT packages should also be downloaded and used",
		    "type": "boolean"
		},
		"depend_on_base_packages": {
		    "description": "Boolean indicating whether the resulting resource packages should depend on 'apt-common-licenses' Haketilo package",
		    "type": "boolean",
		    "default": true
		}
	    }
	},
	"item_definition": {
	    "description": "Definition of either a site resource, a pattern->payload mapping or both combined together",
	    "if": {
		"type": "object",
		"required": ["type"],
		"properties": {
		    "type": {
			"const": "resource"
		    }
		}
	    },
	    "then": {
		"$ref": "./common_definitions-2.schema.json#/definitions/resource_definition_base"
	    },
	    "else": {
		"if": {
		    "type": "object",
		    "required": ["type"],
		    "properties": {
			"type": {
			    "const": "mapping"
			}
		    }
		},
		"then": {
		    "$ref": "./common_definitions-2.schema.json#/definitions/mapping_definition_base"
		},
		"else": {
		    "allOf": [{
			"type": "object",
			"required": ["type"],
			"properties": {
			    "type": {
				"const": "mapping_and_resource"
			    }
			}
		    }, {
			"$ref": "#/definitions/combined_mapping_resource_definition"
		    }]
		}
	    }
	},
	"combined_mapping_resource_definition": {
	    "allOf": [{
		"$ref": "./common_definitions-2.schema.json#/definitions/mapping_definition_base"
	    }, {
		"$ref": "./common_definitions-2.schema.json#/definitions/resource_definition_base"
	    }]
	}
    }
}