diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c98046fc..e9c02b38 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -20,6 +20,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `--no-set-default` is passed. `CONNECT_SERVER` still takes precedence. - New `environment` subcommand for managing execution environments on Connect. - New `integration` subcommand for managing OAuth integrations on Connect. +- Removed minimum Connect version indicators from CLI help for versions older + than 2024 (e.g. `[v2021.08.0+]`), since those releases are no longer supported. + Indicators for 2024 and newer versions are retained. +- Removed references to Posit Cloud from command help and docstrings, as + publishing to Posit Cloud is no longer supported. ### Added diff --git a/docs/server-administration.md b/docs/server-administration.md index a62272b6..21168dbc 100644 --- a/docs/server-administration.md +++ b/docs/server-administration.md @@ -215,9 +215,6 @@ of the available search flags. ### Content Build -> **Note** -> The `rsconnect content build` subcommand requires Posit Connect >= 2021.11.1 - Posit Connect caches R and Python packages in the configured [`Server.DataDir`](https://docs.posit.co/connect/admin/appendix/configuration/#Server.DataDir). Under certain circumstances (examples below), these package caches can become stale @@ -249,7 +246,7 @@ The following are some common scenarios where performing a content build might b rsconnect content build --help Usage: rsconnect content build [OPTIONS] COMMAND [ARGS]... - Build content on Posit Connect. Requires Connect >= 2021.11.1 + Build content on Posit Connect. Options: --help Show this message and exit. diff --git a/rsconnect/api.py b/rsconnect/api.py index d9c5840d..ef2aadf2 100644 --- a/rsconnect/api.py +++ b/rsconnect/api.py @@ -195,7 +195,7 @@ def handle_bad_response(self, response: HTTPResponse | T, is_httpresponse: bool class PositServer(AbstractRemoteServer): """ - A class used to represent the server of the shinyapps.io and Posit Cloud APIs. + A class used to represent the server of the shinyapps.io API. """ def __init__(self, remote_name: str, url: str, account_name: str, token: str, secret: str): diff --git a/rsconnect/main.py b/rsconnect/main.py index 0a64a1e4..6c014fdb 100644 --- a/rsconnect/main.py +++ b/rsconnect/main.py @@ -248,21 +248,21 @@ def cloud_shinyapps_args(func: Callable[P, T]) -> Callable[P, T]: "--account", "-A", envvar=["SHINYAPPS_ACCOUNT"], - help="The shinyapps.io/Posit Cloud account name. (Also settable via \ + help="The shinyapps.io account name. (Also settable via \ SHINYAPPS_ACCOUNT environment variable.)", ) @click.option( "--token", "-T", envvar=["SHINYAPPS_TOKEN", "RSCLOUD_TOKEN"], - help="The shinyapps.io/Posit Cloud token. (Also settable via \ + help="The shinyapps.io token. (Also settable via \ SHINYAPPS_TOKEN or RSCLOUD_TOKEN environment variables.)", ) @click.option( "--secret", "-S", envvar=["SHINYAPPS_SECRET", "RSCLOUD_SECRET"], - help="The shinyapps.io/Posit Cloud token secret. \ + help="The shinyapps.io token secret. \ (Also settable via SHINYAPPS_SECRET or RSCLOUD_SECRET environment variables.)", ) @functools.wraps(func) @@ -497,7 +497,7 @@ def wrapper(*args: P.args, **kwargs: P.kwargs): def cli(future: bool): """ This command line tool may be used to deploy various types of content to Posit - Connect, Posit Cloud, and shinyapps.io. + Connect and shinyapps.io. The tool supports the notion of a simple nickname that represents the information needed to interact with a deployment target. Use the add, list and @@ -757,7 +757,7 @@ def bootstrap( # noinspection SpellCheckingInspection @cli.command( - short_help="Define a nickname for a Posit Connect, Posit Cloud, or shinyapps.io server and credential.", + short_help="Define a nickname for a Posit Connect or shinyapps.io server and credential.", help=( "Associate a simple nickname with the information needed to interact with a deployment target. " "Specifying an existing nickname will cause its stored information to be replaced by what is given " @@ -1349,7 +1349,7 @@ def quickstart(app_type: str, name: str, python_version: Optional[str]): run_quickstart(app_type=app_type, name=name, python_version=python_version) -@cli.group(no_args_is_help=True, help="Deploy content to Posit Connect, Posit Cloud, or shinyapps.io.") +@cli.group(no_args_is_help=True, help="Deploy content to Posit Connect or shinyapps.io.") def deploy(): pass @@ -1563,7 +1563,7 @@ def deploy_notebook( # noinspection SpellCheckingInspection,DuplicatedCode @deploy.command( name="voila", - short_help="Deploy Jupyter notebook in Voila mode to Posit Connect [v2023.03.0+].", + short_help="Deploy Jupyter notebook in Voila mode to Posit Connect.", help=("Deploy a Jupyter notebook in Voila mode to Posit Connect."), no_args_is_help=True, ) @@ -1731,9 +1731,9 @@ def deploy_voila( # noinspection SpellCheckingInspection,DuplicatedCode @deploy.command( name="manifest", - short_help="Deploy content to Posit Connect, Posit Cloud, or shinyapps.io by manifest.", + short_help="Deploy content to Posit Connect or shinyapps.io by manifest.", help=( - "Deploy content to Posit Connect, Posit Cloud, or shinyapps.io using an existing manifest.json " + "Deploy content to Posit Connect or shinyapps.io using an existing manifest.json " 'file. The specified file must either be named "manifest.json" or ' 'refer to a directory that contains a file named "manifest.json".' ), @@ -1821,7 +1821,7 @@ def deploy_manifest( @deploy.command( name="bundle", - short_help="Deploy a previously downloaded bundle to Posit Connect, Posit Cloud, or shinyapps.io.", + short_help="Deploy a previously downloaded bundle to Posit Connect or shinyapps.io.", help=( "Deploy a content bundle (a .tar.gz file, such as one downloaded from a Connect server) " "directly to a server. The bundle is uploaded as-is; its existing manifest.json determines " @@ -1911,7 +1911,7 @@ def deploy_bundle( @deploy.command( name="pyproject", - short_help="Deploy content to Posit Connect, Posit Cloud, or shinyapps.io by pyproject.", + short_help="Deploy content to Posit Connect or shinyapps.io by pyproject.", help=( "Deploy content described by a project's pyproject.toml. The given directory must contain " "a pyproject.toml with a [tool.rsconnect] table specifying app_mode and entrypoint. " @@ -2120,11 +2120,11 @@ def quickstart_hint() -> str: # noinspection SpellCheckingInspection,DuplicatedCode @deploy.command( name="quarto", - short_help="Deploy Quarto content to Posit Connect [v2021.08.0+] or Posit Cloud.", + short_help="Deploy Quarto content to Posit Connect.", help=( - "Deploy a Quarto document or project to Posit Connect or Posit Cloud. Should the content use the Quarto " + "Deploy a Quarto document or project to Posit Connect. Should the content use the Quarto " 'Jupyter engine, an environment file ("requirements.txt") is created and included in the deployment if one ' - "does not already exist. Requires Posit Connect 2021.08.0 or later." + "does not already exist." "\n\n" "FILE_OR_DIRECTORY is the path to a single-file Quarto document or the directory containing a Quarto project." ), @@ -2414,8 +2414,8 @@ def deploy_tensorflow( # noinspection SpellCheckingInspection,DuplicatedCode @deploy.command( name="html", - short_help="Deploy html content to Posit Connect or Posit Cloud.", - help=("Deploy an html file, or directory of html files with entrypoint, to Posit Connect or Posit Cloud."), + short_help="Deploy html content to Posit Connect.", + help=("Deploy an html file, or directory of html files with entrypoint, to Posit Connect."), no_args_is_help=True, ) @server_args @@ -2550,7 +2550,7 @@ def resolve_requirements_file(directory: str, requirements_file: Optional[str], def generate_deploy_python( app_mode: AppMode, - min_version: str, + min_version: Optional[str] = None, alias: Optional[str] = None, desc: Optional[str] = None, ): @@ -2563,15 +2563,18 @@ def generate_deploy_python( if desc is None: desc = app_mode.desc() + # Only surface a minimum Connect version indicator for recent (2024+) versions. + version_note = " [v{version}+]".format(version=min_version) if min_version else "" + # noinspection SpellCheckingInspection @deploy.command( name=alias, - short_help="Deploy a {desc} to Posit Connect [v{version}+], Posit Cloud, or shinyapps.io.".format( + short_help="Deploy a {desc} to Posit Connect{version_note} or shinyapps.io.".format( desc=desc, - version=min_version, + version_note=version_note, ), help=( - "Deploy a {desc} module to Posit Connect, Posit Cloud, or shinyapps.io (if supported by the platform). " + "Deploy a {desc} module to Posit Connect or shinyapps.io (if supported by the platform). " 'The "directory" argument must refer to an existing directory that contains the application code.' ).format(desc=desc), no_args_is_help=True, @@ -2768,13 +2771,13 @@ def deploy_app( return deploy_app -generate_deploy_python(app_mode=AppModes.PYTHON_API, min_version="1.8.2") -generate_deploy_python(app_mode=AppModes.PYTHON_API, min_version="1.8.2", alias="flask", desc="Flask API") -generate_deploy_python(app_mode=AppModes.PYTHON_FASTAPI, min_version="2021.08.0") -generate_deploy_python(app_mode=AppModes.DASH_APP, min_version="1.8.2") -generate_deploy_python(app_mode=AppModes.STREAMLIT_APP, min_version="1.8.4") -generate_deploy_python(app_mode=AppModes.BOKEH_APP, min_version="1.8.4") -generate_deploy_python(app_mode=AppModes.PYTHON_SHINY, min_version="2022.07.0") +generate_deploy_python(app_mode=AppModes.PYTHON_API) +generate_deploy_python(app_mode=AppModes.PYTHON_API, alias="flask", desc="Flask API") +generate_deploy_python(app_mode=AppModes.PYTHON_FASTAPI) +generate_deploy_python(app_mode=AppModes.DASH_APP) +generate_deploy_python(app_mode=AppModes.STREAMLIT_APP) +generate_deploy_python(app_mode=AppModes.BOKEH_APP) +generate_deploy_python(app_mode=AppModes.PYTHON_SHINY) generate_deploy_python(app_mode=AppModes.PYTHON_GRADIO, min_version="2024.12.0") generate_deploy_python(app_mode=AppModes.PYTHON_PANEL, min_version="2025.10.0") @@ -3227,7 +3230,7 @@ def write_manifest_voila( "deployment. Should the content use the Quarto Jupyter engine, " 'an environment file ("requirements.txt") is created if one does ' "not already exist. All files are created in the same directory " - "as the project. Requires Posit Connect 2021.08.0 or later." + "as the project." "\n\n" "FILE_OR_DIRECTORY is the path to a single-file Quarto document or the directory containing a Quarto project." ), @@ -4323,7 +4326,7 @@ def _guid_for_current_server(server_url: str) -> Optional[str]: logger.info("Environment ready. Activate with: source %s/bin/activate" % env_path) -@content.group(no_args_is_help=True, help="Build content on Posit Connect. Requires Connect >= 2021.11.1") +@content.group(no_args_is_help=True, help="Build content on Posit Connect.") def build(): pass