diff --git a/content/en/docs/reference/score-schema-reference.md b/content/en/docs/reference/score-schema-reference.md index 7171df8a..ed0df49c 100644 --- a/content/en/docs/reference/score-schema-reference.md +++ b/content/en/docs/reference/score-schema-reference.md @@ -8,341 +8,6 @@ description: > The Score schema is a JSON schema that defines the structure of a Score file. It's used to validate the Score file before an implementation CLI (such as `score-compose` or `score-helm`) is executed. The Score implementation CLI validates the Score file against the schema before generating the platform-specific configuration, by default. -```json -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://score.dev/schemas/score", - "title": "Score schema", - "description": "Score workload specification", - "type": "object", - "required": [ - "apiVersion", - "metadata", - "containers" - ], - "additionalProperties": false, - "properties": { - "apiVersion": { - "description": "The declared Score Specification version.", - "type": "string" - }, - "metadata": { - "description": "The metadata description of the Workload.", - "type": "object", - "required": [ - "name" - ], - "additionalProperties": true, - "properties": { - "name": { - "description": "A string that can describe the Workload.", - "type": "string" - } - } - }, - "service": { - "description": "The service that the workload provides.", - "type": "object", - "additionalProperties": false, - "properties": { - "ports": { - "description": "List of network ports published by the service.", - "type": "object", - "additionalProperties": true, - "minProperties": 1, - "patternProperties": { - "^*": { - "description": "The network port description.", - "type": "object", - "required": [ - "targetPort" - ], - "additionalProperties": false, - "properties": { - "port": { - "description": "The public service port.", - "type": "number" - }, - "targetPort": { - "description": "The internal service port.", - "type": "number" - } - } - } - } - } - } - }, - "containers": { - "description": "The declared Score Specification version.", - "type": "object", - "additionalProperties": true, - "minProperties": 1, - "patternProperties": { - "^*": { - "description": "The container name.", - "type": "object", - "required": [ - "image" - ], - "additionalProperties": false, - "properties": { - "image": { - "description": "The image name and tag.", - "type": "string" - }, - "command": { - "description": "If specified, overrides container entry point.", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "args": { - "description": "If specified, overrides container entry point arguments.", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "variables": { - "description": "The environment variables for the container.", - "type": "object", - "minProperties": 1, - "additionalProperties": { "type": "string" } - }, - "files": { - "description": "The extra files to mount.", - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "target", - "content" - ], - "properties": { - "target": { - "description": "The file path and name.", - "type": "string" - }, - "mode": { - "description": "The file access mode.", - "type": "string" - }, - "content": { - "description": "The inline content for the file.", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - } - }, - "volumes": { - "description": "The volumes to mount.", - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "source", - "target" - ], - "properties": { - "source": { - "description": "The external volume reference.", - "type": "string" - }, - "path": { - "description": "An optional sub path in the volume.", - "type": "string" - }, - "target": { - "description": "The target mount on the container.", - "type": "string" - }, - "read_only": { - "description": "Indicates if the volume should be mounted in a read-only mode.", - "type": "boolean" - } - } - } - }, - "resources": { - "description": "The compute resources for the container.", - "type": "object", - "minProperties": 1, - "additionalProperties": false, - "properties": { - "limits": { - "description": "The maximum allowed resources for the container.", - "$ref": "#/properties/containers/definitions/resourcesLimits" - }, - "requests": { - "description": "The minimal resources required for the container.", - "$ref": "#/properties/containers/definitions/resourcesLimits" - } - } - }, - "livenessProbe": { - "description": "The liveness probe for the container.", - "type": "object", - "minProperties": 1, - "additionalProperties": false, - "properties": { - "httpGet": { - "description": "", - "$ref": "#/properties/containers/definitions/httpProbe" - } - } - }, - "readinessProbe": { - "description": "The readiness probe for the container.", - "type": "object", - "minProperties": 1, - "additionalProperties": false, - "properties": { - "httpGet": { - "description": "", - "$ref": "#/properties/containers/definitions/httpProbe" - } - } - } - } - } - }, - "definitions": { - "resourcesLimits": { - "description": "The compute resources limits.", - "type": "object", - "minProperties": 1, - "additionalProperties": false, - "properties": { - "memory": { - "description": "The memory limit.", - "type": "string" - }, - "cpu": { - "description": "The CPU limit.", - "type": "string" - } - } - }, - "httpProbe": { - "description": "An HTTP probe details.", - "type": "object", - "additionalProperties": false, - "required": [ - "path" - ], - "properties": { - "path": { - "description": "The path of the HTTP probe endpoint.", - "type": "string" - }, - "port": { - "description": "The path of the HTTP probe endpoint.", - "type": "number" - }, - "httpHeaders": { - "description": "Additional HTTP headers to send with the request", - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "description": "The HTTP header name.", - "type": "string" - }, - "value": { - "description": "The HTTP header value.", - "type": "string" - } - } - } - } - } - } - } - }, - "resources": { - "description": "The dependencies needed by the Workload.", - "type": "object", - "minProperties": 1, - "additionalProperties": true, - "patternProperties": { - "^*": { - "description": "The resource name.", - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "The resource in the target environment.", - "type": "string" - }, - "metadata": { - "description": "The metadata for the resource.", - "type": "object", - "minProperties": 1, - "additionalProperties": true, - "properties": { - "annotations": { - "description": "Annotattions that apply to the property.", - "type": "object", - "minProperties": 1, - "additionalProperties": { "type": "string" } - } - } - }, - "properties": { - "description": "The properties that can be referenced in other places in the Score Specification file.", - "type": "object", - "minProperties": 1, - "patternProperties": { - "^*": { - "description": "The property name.", - "type": ["object", "null"], - "minProperties": 1, - "additionalProperties": false, - "properties": { - "type": { - "description": "The property value type.", - "type": "string" - }, - "default": { - "description": "A value that applies for the property by default.", - "type": ["integer", "string", "boolean"] - }, - "required": { - "description": "Indictes if the property value is requred.", - "type": "boolean" - }, - "secret": { - "description": "Indicates if the property value contains sensitive information.", - "type": "boolean" - } - } - } - } - }, - "params": { - "description": "The parameters used to validate or provision the resource in the environment.", - "type": "object" - } - } - } - } - } - } -} -``` + + +{{< includeJSON "schemas/score-v1b1.json" >}} diff --git a/dprint.json b/dprint.json index 364fd585..1d25cdee 100644 --- a/dprint.json +++ b/dprint.json @@ -26,10 +26,10 @@ ], "plugins": [ "https://plugins.dprint.dev/typescript-0.71.2.wasm", - "https://plugins.dprint.dev/json-0.15.5.wasm", + "https://plugins.dprint.dev/json-0.17.4.wasm", "https://plugins.dprint.dev/markdown-0.14.0.wasm", "https://plugins.dprint.dev/toml-0.5.4.wasm", "https://plugins.dprint.dev/dockerfile-0.3.0.wasm", - "https://plugins.dprint.dev/prettier-0.11.0.json@385edfc0e1212b3be6412cda49322ecd62cb38ac71b9b463869bebf23a4767e3" + "https://plugins.dprint.dev/prettier-0.27.0.json@3557a62b4507c55a47d8cde0683195b14d13c41dda66d0f0b0e111aed107e2fe" ] } \ No newline at end of file diff --git a/layouts/shortcodes/include.html b/layouts/shortcodes/include.html index e14807c0..d000cc2e 100644 --- a/layouts/shortcodes/include.html +++ b/layouts/shortcodes/include.html @@ -1,27 +1,29 @@ -{{/* This will try to find a resource in the "includes" bundle */}} +{{/* Get the resource name. If missing, throw an error. */}} {{- $name := .Get 0 -}} -{{- if $name -}} - {{- $bundle := site.GetPage "page" "includes" -}} - {{- with $bundle -}} - {{- $pattern := printf "%s*" $name -}} - {{- range $bundle.Resources -}} - {{- end -}} - {{- $resource := $bundle.Resources.GetMatch $pattern -}} - {{- with $resource -}} - {{- .Content | safeHTML -}} - {{- else -}} - {{/* It is not a resource in the includes bundle. Try to find the page relative to the current. */}} - {{- $path := path.Join $.Page.File.Dir $name -}} - {{- $page := site.GetPage "page" $path -}} - {{- with $page }} - {{ .Content }} - {{- else -}} - {{ errorf "[%s] no Resource or Page matching %q." $.Page.Lang ($pattern | safeHTML ) }} - {{- end -}} - {{- end -}} - {{- else -}} - {{ errorf "[%s] the 'includes' bundle was not found." $.Page.Lang }} - {{- end -}} +{{- if not $name -}} + {{- errorf "[%s] missing resource name in include for page %q" $.Page.Lang $.Page.Path -}} + {{- return -}} +{{- end -}} + +{{/* Define the pattern for matching resources. */}} +{{- $pattern := printf "%s*" $name -}} + +{{/* Try to find the resource in the "includes" bundle. */}} +{{- $bundle := site.GetPage "page" "includes" -}} +{{- if $bundle -}} + {{- $resource := $bundle.Resources.GetMatch $pattern -}} + {{- with $resource -}} + {{- .Content | safeHTML -}} + {{- return -}} + {{- end -}} +{{- end -}} + +{{/* If not in the "includes" bundle, try to find a relative page. */}} +{{- $path := path.Join $.Page.File.Dir $name -}} +{{- $page := site.GetPage "page" $path -}} +{{- with $page -}} + {{ .Content }} + {{- return -}} {{- else -}} - {{- errorf "[%s] missing resource name in include for page %q" $.Page.Lang $.Page.Path -}} -{{- end -}} \ No newline at end of file + {{- errorf "[%s] no Resource or Page matching %q." $.Page.Lang ($pattern | safeHTML ) -}} +{{- end -}} diff --git a/layouts/shortcodes/includeJSON.html b/layouts/shortcodes/includeJSON.html new file mode 100644 index 00000000..ce52d58d --- /dev/null +++ b/layouts/shortcodes/includeJSON.html @@ -0,0 +1,9 @@ +{{/* Read the file and save its content to a variable */}} +{{ $content := readFile (printf "%s" (.Get 0)) }} + +{{/* Display the file content, you can add more styling or process it further if needed */}} +
+
+{{ $content | safeHTML }}
+
+
diff --git a/schemas/README.md b/schemas/README.md
index e5cc499f..8749fb09 100644
--- a/schemas/README.md
+++ b/schemas/README.md
@@ -1,7 +1,7 @@
# JSON schemas for Score files
-| version | file |
-| --- | --- |
+| version | file |
+| -------- | --------------- |
| v1-beta1 | score-v1b1.json |
## Embed schemas into project
@@ -31,4 +31,3 @@ git subtree pull \
## Contribute changes to upstream
All changes to `score-spec/schema` should be done via pull requests and comply with the review and sign-off policies.
-