From 4225f09dd8fdce22d517893cb2f063e7a090ff0c Mon Sep 17 00:00:00 2001 From: Michael Marchetti Date: Wed, 29 Nov 2023 09:43:28 -0500 Subject: [PATCH] separate draft from implemented schema --- schema/deploy.toml | 20 - schema/draft/deploy.toml | 67 +++ .../posit-publishing-record-schema-v3.json | 65 +++ schema/draft/posit-publishing-schema-v3.json | 531 ++++++++++++++++++ schema/draft/record.toml | 72 +++ schema/posit-publishing-schema-v3.json | 167 ------ schema/record.toml | 30 +- 7 files changed, 739 insertions(+), 213 deletions(-) create mode 100644 schema/draft/deploy.toml create mode 100644 schema/draft/posit-publishing-record-schema-v3.json create mode 100644 schema/draft/posit-publishing-schema-v3.json create mode 100644 schema/draft/record.toml diff --git a/schema/deploy.toml b/schema/deploy.toml index a125a1612..a6e75db99 100644 --- a/schema/deploy.toml +++ b/schema/deploy.toml @@ -3,10 +3,6 @@ type = "quarto" entrypoint = "report.qmd" title = "Regional Quarterly Sales Report" description = "This is the quarterly sales report, broken down by region." -thumbnail = "images/thumbnail.jpg" -tags = [ "sales", "quarterly", "regional" ] - -secrets = ["API_KEY"] [python] version = "3.11.3" @@ -24,22 +20,6 @@ version = "1.4" [environment] API_URL = "https://example.com/api" -[[schedules]] -start = "2023-10-25T08:00:00Z" -recurrence = "FREQ=MONTHLY;INTERVAL=3" - -[[access.users]] -id = "jqpublic" -guid = "536b456e-0311-4f92-ba10-dbf1db8a468e" -name = "John Q. Public" -permissions = "editor" - -[[access.groups]] -id = "Data Science Team" -guid = "8b4fde3e-f995-4894-bc02-ae47538262ff" -name = "Data Science Team" -permissions = "editor" - [connect.access] run-as = "rstudio-connect" run-as-current-user = false diff --git a/schema/draft/deploy.toml b/schema/draft/deploy.toml new file mode 100644 index 000000000..a125a1612 --- /dev/null +++ b/schema/draft/deploy.toml @@ -0,0 +1,67 @@ +"$schema" = "./posit-publishing-schema-v3.json" +type = "quarto" +entrypoint = "report.qmd" +title = "Regional Quarterly Sales Report" +description = "This is the quarterly sales report, broken down by region." +thumbnail = "images/thumbnail.jpg" +tags = [ "sales", "quarterly", "regional" ] + +secrets = ["API_KEY"] + +[python] +version = "3.11.3" +package-file = "requirements.txt" +package-manager = "pip" + +[r] +version = "4.3.1" +package-file = "renv.lock" +package-manager = "renv" + +[quarto] +version = "1.4" + +[environment] +API_URL = "https://example.com/api" + +[[schedules]] +start = "2023-10-25T08:00:00Z" +recurrence = "FREQ=MONTHLY;INTERVAL=3" + +[[access.users]] +id = "jqpublic" +guid = "536b456e-0311-4f92-ba10-dbf1db8a468e" +name = "John Q. Public" +permissions = "editor" + +[[access.groups]] +id = "Data Science Team" +guid = "8b4fde3e-f995-4894-bc02-ae47538262ff" +name = "Data Science Team" +permissions = "editor" + +[connect.access] +run-as = "rstudio-connect" +run-as-current-user = false + +[connect.runtime] +connection-timeout = 5 +read-timeout = 30 +init-timeout = 60 +idle-timeout = 120 +max-processes = 5 +min-processes = 1 +max-connections = 50 +load-factor = 0.5 + +[connect.kubernetes] +amd-gpu-limit = 0 +cpu-limit = 1 +cpu-request = 0.5 +image-name = "posit/connect-runtime-python3.11-r4.3" +memory-limit = "100000000" +memory-request = "20000000" +nvidia-gpu-limit = 0 +service-account-name = "posit-connect-content" +r-environment-management = true +py-environment-management = true diff --git a/schema/draft/posit-publishing-record-schema-v3.json b/schema/draft/posit-publishing-record-schema-v3.json new file mode 100644 index 000000000..3701e9f8c --- /dev/null +++ b/schema/draft/posit-publishing-record-schema-v3.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/rstudio/publishing-client/posit-publishing-record-schema-v3.json", + "type": "object", + "additionalProperties": false, + "description": "Posit Publishing Record", + "required": [ + "$schema", + "server-url", + "id", + "configuration-name" + ], + "properties": { + "$schema": { + "type": "string", + "format": "url", + "description": "URL of the json-schema definition for this file. Must be 'https://cdn.posit.co/connect/posit-publishing-record-schema-v3.json'.", + "enum": [ + "./posit-publishing-record-schema-v3.json" + ], + "examples": [ + "https://cdn.posit.co/connect/posit-publishing-record-schema-v3.json" + ] + }, + "server-url": { + "type": "string", + "format": "uri", + "description": "URL of the server where this content was deployed.", + "examples": [ + "https://connect.example.com" + ] + }, + "id": { + "type": "string", + "description": "Unique ID of this deployment.", + "examples": [ + "de2e7bdb-b085-401e-a65c-443e40009749" + ] + }, + "configuration-name": { + "type": "string", + "description": "Name of the configuration that was used during deployment.", + "examples": [ + "production" + ] + }, + "configuration": { + "$ref": "./posit-publishing-schema-v3.json" + }, + "files": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "Project-relative paths of the files that were included in the deployment.", + "examples": [ + "app.py", + "model/weights.csv" + ] + + } + } +} diff --git a/schema/draft/posit-publishing-schema-v3.json b/schema/draft/posit-publishing-schema-v3.json new file mode 100644 index 000000000..faa3b29c0 --- /dev/null +++ b/schema/draft/posit-publishing-schema-v3.json @@ -0,0 +1,531 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/rstudio/publishing-client/posit-publishing-schema-v3.json", + "type": "object", + "additionalProperties": false, + "description": "Posit Publishing Configuration", + "required": [ + "$schema", + "type", + "entrypoint" + ], + "properties": { + "$schema": { + "type": "string", + "format": "url", + "description": "URL of the json-schema definition for this file. Must be 'https://cdn.posit.co/connect/posit-publishing-schema-v3.json'.", + "enum": [ + "./posit-publishing-schema-v3.json" + ], + "examples": [ + "https://cdn.posit.co/connect/posit-publishing-schema-v3.json" + ] + }, + "type": { + "type": "string", + "description": "Indicates the type of content being deployed.", + "enum": [ + "html", + "jupyter-notebook", + "jupyter-voila", + "python-bokeh", + "python-dash", + "python-fastapi", + "python-flask", + "python-shiny", + "python-streamlit", + "quarto-shiny", + "quarto", + "r-plumber", + "r-shiny", + "rmd-shiny", + "rmd" + ], + "examples": [ + "quarto" + ] + }, + "entrypoint": { + "type": "string", + "description": "Name of the primary file containing the content. For some types of Python executable content, this may also indicate the object within the file in module:object format.", + "examples": [ + "app.py", + "report.qmd" + ] + }, + "title": { + "type": "string", + "pattern": "^[^\t\n\f\r]{3,1024}$|", + "description": "Human-readable title for this content.", + "examples": [ + "Quarterly Sales Report" + ] + }, + "description": { + "type": "string", + "description": "Human-readable description for this content.", + "examples": [ + "This is the quarterly sales report, broken down by region." + ] + }, + "thumbnail": { + "type": "string", + "description": "Path to thumbnail preview image for this content.", + "examples": [ + "images/thumbnail.jpg" + ] + }, + "tags": { + "type": "array", + "description": "List of tags to apply to this deployment. When publishing to Connect, tags must be pre-defined by an administrator.", + "items": { + "type": "string", + "examples": [ + "sales", + "quarterly", + "regional" + ] + } + }, + "python": { + "type": "object", + "additionalProperties": false, + "description": "Python language and dependencies.", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string", + "description": "Python version. The server must have a matching Python version in order to run the content.", + "examples": [ + "3.11.3", + "3.11" + ] + }, + "package-file": { + "type": "string", + "description": "File containing package dependencies. The file must exist and be listed under 'files'.", + "default": "requirements.txt", + "examples": [ + "requirements.txt" + ] + }, + "package-manager": { + "type": "string", + "default": "pip", + "enum": [ + "pip", + "conda", + "pipenv", + "poetry", + "none" + ], + "description": "Package manager that will install the dependencies. If package-manager is none, dependencies will not be installed.", + "examples": [ + "pip" + ] + } + } + }, + "r": { + "type": "object", + "additionalProperties": false, + "description": "R language and dependencies.", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string", + "description": "R version. The server must have a similar R version in order to run the content.", + "examples": [ + "4.3.1" + ] + }, + "package-file": { + "type": "string", + "default": "renv.lock", + "description": "File containing package dependencies. The file must exist and be listed under 'files'.", + "examples": [ + "renv.lock" + ] + }, + "package-manager": { + "type": "string", + "default": "renv", + "enum": [ + "renv", + "none" + ], + "description": "Package manager that will install the dependencies. If package-manager is none, dependencies will not be installed.", + "examples": [ + "renv" + ] + } + } + }, + "quarto": { + "type": "object", + "additionalProperties": false, + "description": "Quarto version required to run the content.", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string", + "description": "Quarto version. The server must have a similar Quarto version in order to run the content.", + "examples": [ + "1.4" + ] + }, + "engines": { + "type": "array", + "description": "List of Quarto engines required for this content.", + "items": { + "type": "string", + "enum": [ + "knitr", + "jupyter" + ], + "examples": [ + "knitr", + "jupyter" + ] + } + } + } + }, + "environment": { + "type": "object", + "additionalProperties": { + "type": [ + "string" + ] + }, + "description": "Environment variable/value map. Secrets such as API keys or tokens should not be stored here.", + "examples": [ + { + "API_URL": "https://example.com/api" + } + ] + }, + "secrets": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "Names of secrets that should be injected as environment variables.", + "examples": [ + "API_KEY" + ] + }, + "schedules": { + "type": "array", + "description": "Schedules for recurring execution of this content. Only applies to reports, such as Quarto, R Markdown, and Jupyter Notebooks.", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "start", + "recurrence" + ], + "properties": { + "start": { + "type": "string", + "description": "Time for the first run of the content.", + "examples": [ + "2023-10-25T08:00:00Z" + ] + }, + "recurrence": { + "type": "string", + "description": "Recurrence scheme for the content, in cron or iCalendar RRULE format.", + "examples": [ + "FREQ=MONTHLY;INTERVAL=3", + "0 2 * * *" + ] + } + } + } + }, + "access": { + "type": "object", + "additionalProperties": false, + "description": "Access control settings.", + "properties": { + "type": { + "type": "string", + "default": "acl", + "description": "Type of access control. 'public' make the deployment public (no login required), with no login required. 'all-users' allows all logged-in users to access the content. 'acl' (the default) allows only specific users and groups to access the content.", + "enum": [ + "public", + "all-users", + "acl" + ], + "examples": [ + "all-users" + ] + }, + "users": { + "type": "array", + "description": "List of users who have access to this content.", + "items": { + "type": "object", + "additionalProperties": false, + "anyOf": [ + { "required": ["id"] }, + { "required": ["guid"] } + ], + "properties": { + "id": { + "type": "string", + "description": "Unique ID from the authentication provider that identifies this user. This may be a username, LDAP CN/DN, email address, etc. depending on the provider.", + "examples": [ + "jqpublic" + ] + }, + "guid": { + "type": "string", + "description": "Unique identifier assigned by Connect. When deploying to the same server, this will determine the user who is granted access. When deploying to a different server, the provider-id will be used to look up the user.", + "examples": [ + "cd2e7cef-a195-512e-b76d-554f4f5a239c" + ] + }, + "name": { + "type": "string", + "description": "User's name. This field is informational only.", + "examples": [ + "John Q. Public" + ] + }, + "permissions": { + "type": "string", + "description": "Permission level assigned to this user.", + "enum": ["viewer", "editor", "owner"], + "examples": [ + "viewer" + ] + } + } + } + }, + "groups": { + "type": "array", + "description": "List of groups who have access to this content.", + "items": { + "type": "object", + "additionalProperties": false, + "anyOf": [ + { "required": ["id"] }, + { "required": ["guid"] } + ], + "properties": { + "id": { + "type": "string", + "description": "Unique ID from the authentication provider that identifies this group. For groups created by Connect, this will be the group name. This may be a group name, LDAP CN/DN, etc. depending on the provider.", + "examples": [ + "Data Science Team" + ] + }, + "guid": { + "type": "string", + "description": "Unique identifier assigned by Connect. When deploying to the same server, this will determine the user who is granted access. When deploying to a different server, the provider-id will be used to look up the user.", + "examples": [ + "8b4fde3e-f995-4894-bc02-ae47538262ff" + ] + }, + "name": { + "type": "string", + "description": "Group name. This field is informational only.", + "examples": [ + "Data Science Team" + ] + }, + "permissions": { + "type": "string", + "default": "viewer", + "description": "Permission level assigned to this group.", + "enum": ["viewer", "editor", "owner"], + "examples": [ + "editor" + ] + } + } + } + } + } + }, + "connect": { + "type": "object", + "additionalProperties": false, + "description": "Setting specific to Posit Connect deployments.", + "properties": { + "access": { + "run-as": { + "type": "string", + "description": "The system username under which the content should be run. Must be an existing user in the allowed group. You must be an administrator to set this value.", + "examples": [ + "rstudio-connect" + ] + }, + "run-as-current-user": { + "type": "boolean", + "default": false, + "description": "For application content types, run a separate process for each visiting user under that user's server account. Requires PAM authentication on the Posit Connect server. You must be an administrator to set this value." + } + }, + "runtime": { + "type": "object", + "additionalProperties": false, + "description": "Runtime settings for application content types.", + "properties": { + "connection-timeout": { + "type": "integer", + "minimum": 0, + "description": "Maximum number of seconds allowed without data sent or received across a client connection. A value of `0` means connections will never time-out (not recommended).", + "examples": [ + 5 + ] + }, + "read-timeout": { + "type": "integer", + "minimum": 0, + "description": "Maximum number of seconds allowed without data received from a client connection. A value of `0` means a lack of client (browser) interaction never causes the connection to close.", + "examples": [ + 30 + ] + }, + "init-timeout": { + "type": "integer", + "description": "The maximum number of seconds allowed for an interactive application to start. Posit Connect must be able to connect to a newly launched application before this threshold has elapsed.", + "examples": [ + 60 + ] + }, + "idle-timeout": { + "type": "integer", + "description": "The maximum number of seconds a worker process for an interactive application to remain alive after it goes idle (no active connections).", + "examples": [ + 120 + ] + }, + "max-processes": { + "type": "integer", + "minimum": 1, + "description": "Specifies the total number of concurrent processes allowed for a single interactive application.", + "examples": [ + 5 + ] + }, + "min-processes": { + "type": "integer", + "minimum": 0, + "description": "Specifies the minimum number of concurrent processes allowed for a single interactive application.", + "examples": [ + 1 + ] + }, + "max-connections": { + "type": "integer", + "minimum": 1, + "description": "Specifies the maximum number of client connections allowed to an individual process. Incoming connections which will exceed this limit are routed to a new process or rejected.", + "examples": [ + 50 + ] + }, + "load-factor": { + "type": "number", + "minimum": 0, + "maximum": 1, + "description": "Controls how aggressively new processes are spawned. The valid range is between 0.0 and 1.0.", + "examples": [ + 0.5 + ] + } + } + }, + "kubernetes": { + "type": "object", + "additionalProperties": false, + "description": "Settings used with Posit Connect's off-host execution feature, where content is run in Kubernetes.", + "properties": { + "amd-gpu-limit": { + "type": "integer", + "description": "The number of AMD GPUs that will be allocated by Kubernetes to run this content.", + "examples": [ + 0 + ] + }, + "cpu-limit": { + "type": "integer", + "description": "The maximum amount of compute power this content will be allowed to consume when executing or rendering, expressed in CPU Units, where 1.0 unit is equivalent to 1 physical or virtual core. Fractional values are allowed. If the process tries to use more CPU than allowed, it will be throttled.", + "examples": [ + 1 + ] + }, + "cpu-request": { + "type": "number", + "description": "The minimum amount of compute power this content needs when executing virtual core. Fractional values are allowed.", + "examples": [ + 0.5 + ] + }, + "image-name": { + "type": "string", + "description": "Name of the target container image.", + "examples": [ + "posit/connect-runtime-python3.11-r4.3" + ] + }, + "memory-limit": { + "type": "string", + "description": "The maximum amount of RAM this content will be allowed to consume when executing or rendering, expressed in bytes. If the process tries to use more memory than allowed, it will be terminated", + "examples": [ + "100000000" + ] + }, + "memory-request": { + "type": "string", + "description": "The minimum amount of RAM this content needs when executing or rendering, expressed in bytes.", + "examples": [ + "20000000" + ] + }, + "nvidia-gpu-limit": { + "type": "integer", + "description": "The number of NVIDIA GPUs that will be allocated by Kubernetes to run this content.", + "examples": [ + 0 + ] + }, + "service-account-name": { + "type": "string", + "description": "The name of the Kubernetes service account that is used to run this content. It must adhere to Kubernetes service account naming rules. You must be an administrator to set this value.", + "examples": [ + "posit-connect-content" + ] + }, + "r-environment-management": { + "type": "boolean", + "description": "Enables or disables R environment management. When false, Posit Connect will not install R packages and instead assume that all required packages are present in the container image.", + "examples": [ + true + ] + }, + "py-environment-management": { + "type": "boolean", + "description": "Enables or disables Python environment management. When false, Posit Connect will not install Python packages and instead assume that all required packages are present in the container image.", + "examples": [ + true + ] + } + } + } + } + } + } +} diff --git a/schema/draft/record.toml b/schema/draft/record.toml new file mode 100644 index 000000000..aad3d9ad3 --- /dev/null +++ b/schema/draft/record.toml @@ -0,0 +1,72 @@ +"$schema" = "./posit-publishing-record-schema-v3.json" +server-url = "https://connect.example.com" +id = "de2e7bdb-b085-401e-a65c-443e40009749" +configuration-name = "production.json" + +[configuration] +"$schema" = "./posit-publishing-schema-v3.json" +type = "quarto" +entrypoint = "report.qmd" +title = "Regional Quarterly Sales Report" +description = "This is the quarterly sales report, broken down by region." +thumbnail = "images/thumbnail.jpg" +tags = [ "sales", "quarterly", "regional" ] +secrets = ["API_KEY"] + +[configuration.python] +version = "3.11.3" +package_file = "requirements.txt" +package_manager = "pip" + +[configuration.r] +version = "4.3.1" +package_file = "renv.lock" +package_manager = "renv" + +[configuration.quarto] +version = "1.4" + +[configuration.environment] +API_URL = "https://example.com/api" + +[[configuration.schedules]] +start = "2023-10-25T08:00:00Z" +recurrence = "FREQ=MONTHLY;INTERVAL=3" + +[[configuration.access.users]] +id = "jqpublic" +guid = "536b456e-0311-4f92-ba10-dbf1db8a468e" +name = "John Q. Public" +permissions = "editor" + +[[configuration.access.groups]] +id = "Data Science Team" +guid = "8b4fde3e-f995-4894-bc02-ae47538262ff" +name = "Data Science Team" +permissions = "editor" + +[configuration.connect.access] +run_as = "rstudio-connect" +run_as_current_user = false + +[configuration.connect.runtime] +connection_timeout = 5 +read_timeout = 30 +init_timeout = 60 +idle_timeout = 120 +max_processes = 5 +min_processes = 1 +max_conns_per_process = 50 +load_factor = 0.5 + +[configuration.connect.kubernetes] +amd_gpu_limit = 0 +cpu_limit = 1 +cpu_request = 0.5 +image_name = "posit/connect-runtime-python3.11-r4.3" +memory_limit = "100000000" +memory_request = "20000000" +nvidia_gpu_limit = 0 +service_account_name = "posit-connect-content" +r_environment_management = true +py_environment_management = true diff --git a/schema/posit-publishing-schema-v3.json b/schema/posit-publishing-schema-v3.json index faa3b29c0..9b883e198 100644 --- a/schema/posit-publishing-schema-v3.json +++ b/schema/posit-publishing-schema-v3.json @@ -68,25 +68,6 @@ "This is the quarterly sales report, broken down by region." ] }, - "thumbnail": { - "type": "string", - "description": "Path to thumbnail preview image for this content.", - "examples": [ - "images/thumbnail.jpg" - ] - }, - "tags": { - "type": "array", - "description": "List of tags to apply to this deployment. When publishing to Connect, tags must be pre-defined by an administrator.", - "items": { - "type": "string", - "examples": [ - "sales", - "quarterly", - "regional" - ] - } - }, "python": { "type": "object", "additionalProperties": false, @@ -211,154 +192,6 @@ } ] }, - "secrets": { - "type": "array", - "items": { - "type": [ - "string" - ] - }, - "description": "Names of secrets that should be injected as environment variables.", - "examples": [ - "API_KEY" - ] - }, - "schedules": { - "type": "array", - "description": "Schedules for recurring execution of this content. Only applies to reports, such as Quarto, R Markdown, and Jupyter Notebooks.", - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "start", - "recurrence" - ], - "properties": { - "start": { - "type": "string", - "description": "Time for the first run of the content.", - "examples": [ - "2023-10-25T08:00:00Z" - ] - }, - "recurrence": { - "type": "string", - "description": "Recurrence scheme for the content, in cron or iCalendar RRULE format.", - "examples": [ - "FREQ=MONTHLY;INTERVAL=3", - "0 2 * * *" - ] - } - } - } - }, - "access": { - "type": "object", - "additionalProperties": false, - "description": "Access control settings.", - "properties": { - "type": { - "type": "string", - "default": "acl", - "description": "Type of access control. 'public' make the deployment public (no login required), with no login required. 'all-users' allows all logged-in users to access the content. 'acl' (the default) allows only specific users and groups to access the content.", - "enum": [ - "public", - "all-users", - "acl" - ], - "examples": [ - "all-users" - ] - }, - "users": { - "type": "array", - "description": "List of users who have access to this content.", - "items": { - "type": "object", - "additionalProperties": false, - "anyOf": [ - { "required": ["id"] }, - { "required": ["guid"] } - ], - "properties": { - "id": { - "type": "string", - "description": "Unique ID from the authentication provider that identifies this user. This may be a username, LDAP CN/DN, email address, etc. depending on the provider.", - "examples": [ - "jqpublic" - ] - }, - "guid": { - "type": "string", - "description": "Unique identifier assigned by Connect. When deploying to the same server, this will determine the user who is granted access. When deploying to a different server, the provider-id will be used to look up the user.", - "examples": [ - "cd2e7cef-a195-512e-b76d-554f4f5a239c" - ] - }, - "name": { - "type": "string", - "description": "User's name. This field is informational only.", - "examples": [ - "John Q. Public" - ] - }, - "permissions": { - "type": "string", - "description": "Permission level assigned to this user.", - "enum": ["viewer", "editor", "owner"], - "examples": [ - "viewer" - ] - } - } - } - }, - "groups": { - "type": "array", - "description": "List of groups who have access to this content.", - "items": { - "type": "object", - "additionalProperties": false, - "anyOf": [ - { "required": ["id"] }, - { "required": ["guid"] } - ], - "properties": { - "id": { - "type": "string", - "description": "Unique ID from the authentication provider that identifies this group. For groups created by Connect, this will be the group name. This may be a group name, LDAP CN/DN, etc. depending on the provider.", - "examples": [ - "Data Science Team" - ] - }, - "guid": { - "type": "string", - "description": "Unique identifier assigned by Connect. When deploying to the same server, this will determine the user who is granted access. When deploying to a different server, the provider-id will be used to look up the user.", - "examples": [ - "8b4fde3e-f995-4894-bc02-ae47538262ff" - ] - }, - "name": { - "type": "string", - "description": "Group name. This field is informational only.", - "examples": [ - "Data Science Team" - ] - }, - "permissions": { - "type": "string", - "default": "viewer", - "description": "Permission level assigned to this group.", - "enum": ["viewer", "editor", "owner"], - "examples": [ - "editor" - ] - } - } - } - } - } - }, "connect": { "type": "object", "additionalProperties": false, diff --git a/schema/record.toml b/schema/record.toml index 802dd74ea..1de26aeac 100644 --- a/schema/record.toml +++ b/schema/record.toml @@ -1,7 +1,7 @@ "$schema" = "./posit-publishing-record-schema-v3.json" server-url = "https://connect.example.com" id = "de2e7bdb-b085-401e-a65c-443e40009749" -configuration-file = "production.json" +configuration-name = "production" [configuration] "$schema" = "./posit-publishing-schema-v3.json" @@ -9,42 +9,20 @@ type = "quarto" entrypoint = "report.qmd" title = "Regional Quarterly Sales Report" description = "This is the quarterly sales report, broken down by region." -thumbnail = "images/thumbnail.jpg" -tags = [ "sales", "quarterly", "regional" ] -secrets = ["API_KEY"] -[configuration.dependencies.python] +[configuration.python] version = "3.11.3" package_file = "requirements.txt" package_manager = "pip" -[configuration.dependencies.r] +[configuration.r] version = "4.3.1" package_file = "renv.lock" package_manager = "renv" -[configuration.dependencies.quarto] +[configuration.quarto] version = "1.4" -[configuration.environment] -API_URL = "https://example.com/api" - -[[configuration.schedules]] -start = "2023-10-25T08:00:00Z" -recurrence = "FREQ=MONTHLY;INTERVAL=3" - -[[configuration.access.users]] -id = "jqpublic" -guid = "536b456e-0311-4f92-ba10-dbf1db8a468e" -name = "John Q. Public" -permissions = "editor" - -[[configuration.access.groups]] -id = "Data Science Team" -guid = "8b4fde3e-f995-4894-bc02-ae47538262ff" -name = "Data Science Team" -permissions = "editor" - [configuration.connect.access] run_as = "rstudio-connect" run_as_current_user = false