From 2378ae19795489a8010670557775ba205b38c2ee Mon Sep 17 00:00:00 2001 From: Neal Richardson Date: Thu, 25 Jun 2026 17:01:42 -0400 Subject: [PATCH 1/4] fix: Remove minimum Connect version indicators for pre-2024 versions CLI help strings advertised minimum Connect versions like [v2021.08.0+] that are no longer relevant. Drop all version indicators for releases older than 2024 while retaining 2024+ indicators (gradio, panel, tensorflow, metadata upload). Fixes #797 Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/CHANGELOG.md | 3 +++ docs/server-administration.md | 5 +---- rsconnect/main.py | 33 ++++++++++++++++++--------------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c98046fc0..ac87ccba5 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Removed minimum Connect version indicators from CLI help for versions older + than 2024 (e.g. `[v2021.08.0+]`), since those releases are no longer relevant. + Indicators for 2024 and newer versions are retained. - The "no package-lock.json" error when deploying Node.js content now states that Connect installs Node.js dependencies with npm, helping publishers who build with yarn or pnpm understand why a `package-lock.json` is required. diff --git a/docs/server-administration.md b/docs/server-administration.md index a62272b64..21168dbc9 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/main.py b/rsconnect/main.py index 0a64a1e4e..a9ec32b7a 100644 --- a/rsconnect/main.py +++ b/rsconnect/main.py @@ -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, ) @@ -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 or Posit Cloud.", help=( "Deploy a Quarto document or project to Posit Connect or Posit Cloud. 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." ), @@ -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,12 +2563,15 @@ 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}, Posit Cloud, 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). " @@ -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 From ac5853e8407c3484b54c7ae1ac346615003394eb Mon Sep 17 00:00:00 2001 From: Neal Richardson Date: Thu, 25 Jun 2026 17:03:54 -0400 Subject: [PATCH 2/4] docs: Move changelog bullet to end of Unreleased list Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index ac87ccba5..2355b92bd 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,9 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased -- Removed minimum Connect version indicators from CLI help for versions older - than 2024 (e.g. `[v2021.08.0+]`), since those releases are no longer relevant. - Indicators for 2024 and newer versions are retained. - The "no package-lock.json" error when deploying Node.js content now states that Connect installs Node.js dependencies with npm, helping publishers who build with yarn or pnpm understand why a `package-lock.json` is required. @@ -23,6 +20,9 @@ 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 relevant. + Indicators for 2024 and newer versions are retained. ### Added From 60570829f483a153669a7666c340022aa749f0e7 Mon Sep 17 00:00:00 2001 From: Neal Richardson Date: Thu, 25 Jun 2026 17:06:30 -0400 Subject: [PATCH 3/4] docs: Remove Posit Cloud references from command help and docstrings Publishing to Posit Cloud is no longer supported, but command help strings and docstrings still advertised it as a deploy target. Drop those mentions while leaving historical CHANGELOG entries intact. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/CHANGELOG.md | 2 ++ rsconnect/api.py | 2 +- rsconnect/main.py | 32 ++++++++++++++++---------------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 2355b92bd..d324e5719 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed minimum Connect version indicators from CLI help for versions older than 2024 (e.g. `[v2021.08.0+]`), since those releases are no longer relevant. 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/rsconnect/api.py b/rsconnect/api.py index d9c5840dc..ef2aadf27 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 a9ec32b7a..6c014fdbc 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 @@ -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,9 +2120,9 @@ def quickstart_hint() -> str: # noinspection SpellCheckingInspection,DuplicatedCode @deploy.command( name="quarto", - short_help="Deploy Quarto content to Posit Connect 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." "\n\n" @@ -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 @@ -2569,12 +2569,12 @@ def generate_deploy_python( # noinspection SpellCheckingInspection @deploy.command( name=alias, - short_help="Deploy a {desc} to Posit Connect{version_note}, Posit Cloud, or shinyapps.io.".format( + short_help="Deploy a {desc} to Posit Connect{version_note} or shinyapps.io.".format( desc=desc, 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, From 216205c0bf2bc4719efcfeab41f6c994a406602e Mon Sep 17 00:00:00 2001 From: "E. David Aja" Date: Fri, 26 Jun 2026 10:39:36 -0400 Subject: [PATCH 4/4] Update docs/CHANGELOG.md --- docs/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d324e5719..e9c02b38d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -21,7 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - 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 relevant. + 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.