Skip to content

Releases: rstudio/rsconnect

rsconnect 1.3.1

04 Jun 12:20
Compare
Choose a tag to compare
  • Skip tests when packages "foreign" and "MASS" are not available. (#1081)

rsconnect 1.3.0

24 May 12:32
Compare
Choose a tag to compare
  • deployApp(logLevel = "quiet") suppresses Posit Connect deployment task
    output. (#1051)

  • deployApp(logLevel = "quiet") and writeManifest(quiet=TRUE) suppress
    output when using renv to analyze dependencies. (#1051)

  • deployApp() and writeManifest() receive the default value for the
    image argument from the RSCONNECT_IMAGE environment variable. (#1063)

  • deployTF() can deploy a TensorFlow model to Posit Connect. Requires Posit
    Connect 2024.05.0 or higher.

  • Skip tests when suggested packages are not available. Skip Quarto tests when
    run by CRAN. (#1074)

rsconnect 1.2.2

04 Apr 16:26
Compare
Choose a tag to compare
  • Use internally computed SHA1 sums and PKI signing when SHA1 is disabled
    in FIPS mode. (#768, #1054)

  • Allow Quarto content with a rendered script as its primary target. (#1055)

rsconnect 1.2.1

01 Feb 13:55
Compare
Choose a tag to compare
  • Restore the LC_TIME locale after computing an RFC-2616 date. (#1035)
  • Address a problem inspecting Quarto content when the file names and paths
    needed to be quoted. The resulting manifest lacked information about the
    Quarto runtime, which caused difficult-to-understand deployment errors.
    (#1037)
  • Produce an error when Quarto content cannot be inspected. (#1032)

rsconnect 1.2.0

15 Dec 13:58
Compare
Choose a tag to compare
  • Addressed a number of republishing and collaboration issues where the
    content was incorrectly published to a new location rather than reusing an
    existing deployment. (#981, #1007, #1013, #1019)

  • showLogs(), configureApp(), setProperty(), and unsetProperty()
    search for the application by name when there are no matching deployment
    records. (#985, #989)

  • rpubsUpload() correctly records the initial RPubs destination, allowing
    republishing. (#976)

  • deployApp() and friends record multi-value metadata entries as
    comma-separated values. (#1017)

  • accountInfo() includes name and username fields. Older versions of
    rsconnect store account records with a username field. Recent rsconnect
    versions record name. Both name and username should contain the same
    value. (#1024)

rsconnect 1.1.1

04 Oct 15:55
Compare
Choose a tag to compare
  • Added space parameter to deploy directly to a space in Posit Cloud.

  • Improve reporting of errors returned by shinyapps.io. (#997)

  • Remove most directory layout validation checks. (#998)

  • Do not use getOption("available_packages_filters") option when calling
    available.packages(). (#1002)

  • Packages installed from source within an renv project are not associated
    with repositories. (#1004)

rsconnect 1.1.0

05 Sep 20:44
Compare
Choose a tag to compare
  • Fixed analysis of directories that were smaller than the
    rsconnect.max.bundle.files=10000 limit but larger than the
    renv.config.dependencies.limit=1000 limit. (#968)

  • Ignore .env, .venv, and venv files only when they reference Python
    virtual environments. (#972)

  • deployApp() and writeManifest() accept optional envManagement,
    envManagementR, and envManagementPy arguments. These args specify whether
    Posit Connect should install packages in the package cache.
    If envManagement is FALSE then Connect will not perform any package
    installation and it is the administrator's responsibility to ensure the
    required R/Python packages are available in the runtime environment. This is
    especially useful if off-host execution is enabled, when the execution
    environment (specified by the image argument) already contains the required
    packages. These values are ignored when
    Applications.ManifestEnvironmentManagementSelection = false.
    Requires Posit Connect >=2023.07.0. (#977)

  • Fix account discovery by showProperties(). (#980)

rsconnect 1.0.2

17 Aug 15:53
58e35b1
Compare
Choose a tag to compare
  • Fixed redeployments to shinyapps.io where appName is provided, but no local
    record of the deployment exists. (#932)

  • deployApp() and writeManifest() now error if your library and renv.lock
    are out-of-sync. Previously it always used what was defined in the renv.lock
    but that was (a) slow and (b) could lead to different results than what you
    see when running locally (#930).

  • Deploying from an renv project includes the renv.lock in the bundle. A
    manifest created for an renv project references the renv.lock in the
    manifest.json. (#926)

  • Use the environment variable RSCONNECT_PACKRAT to analyze dependencies
    using packrat, as was done prior to rsconnect-1.0.0. Use of the
    rsconnect.packrat option is discouraged, as it is not effective when using
    push-button deployment in the RStudio IDE. (#935)

  • The renv.lock is ignored when the RSCONNECT_PACKRAT environment variable
    or the rsconnect.packrat option is set. (#936)

  • The content type is inferred by analyzing the set of top-level files. (#942)

  • deployApp() and writeManifest() accept an optional appMode argument.
    Provide this argument if your project includes auxiliary files which mislead
    the existing appMode inference. For example, if an HTML project includes
    a downloadable Shiny app.R, that content will be assumed to be a Shiny
    application even if that application is not meant to be run. (#948)

  • appDependencies() accepts an appFileManifest argument as an alternate
    way of providing the target set of files.

rsconnect 1.0.1

20 Jul 19:58
Compare
Choose a tag to compare
  • deployDoc() includes .Rprofile, requirements.txt and renv.lock when
    deploying .Rmd or .qmd. These additional files are not included with
    rendered HTML documents. (#919)

  • Explicit renv dependencies are preserved. (#916)

rsconnect 1.0.0

17 Jul 20:28
Compare
Choose a tag to compare

New features

  • deployApp() and deployDoc() now support deploying static content to Posit
    Cloud. Static RMarkdown and Quarto content can be rendered server-side.

  • deployApp() and writeManifest() now respect renv lock files, if present.
    If you don't want to use these lockfiles, and instead return the previous
    behaviour of snapshotting on every deploy, add your renv.lock to
    .rscignore (#671). Learn more ?appDependencies().

    Additionally, deployApp() and writeManifest() now use renv to capture app
    dependencies, rather than packrat. If this causes a previously working deploy
    to fail, please file an issue then set options(rsconnect.packrat = TRUE) to
    revert to the previous behaviour.

  • deployApp()'s quarto argument now takes values TRUE, FALSE or
    NA. The previous value (a path to a quarto binary) is now ignored,
    and instead we automatically figure out the package from QUARTO_PATH and
    PATH env vars (#658). deploySite() now supports quarto websites (#813).

  • deployApp() gains a new envVars argument which takes a vector of the
    names of environment variables that should be securely copied to the server.
    The names (not values) of these environment variables are also saved in the
    deployment record and will be updated each time you re-deploy the app (#667).
    This currently only works with Connect, but we hope to add support to
    Posit cloud and shinyapps.io in the future.

  • rsconnect gains two new functions for understanding and updating the
    environment variables that your apps currently use. listServerEnvVars()
    will return a data frame of applications, with a envVars list-column
    giving the names of the environment variables used by each application.
    updateServerEnvVars() will update all applications that use a specific
    environment variable with the current value of that environment variable
    (#667).

Lifecycle changes

  • Non-libcurl rsconnect.http options have been deprecated. This allows us to
    focus our efforts on a single backend, rather than spreading development
    efforts across five. The old backends will remain available for at least 2
    years, but if you are using them because libcurl doesn't work for you, please
    report the problem ASAP so we can fix it.

  • addConnectServer() has been deprecated because it does the same
    thing as addServer() now that addServer() also validates URLs.

  • deployTFModel() is defunct. Posit Connect no longer supports hosting of
    TensorFlow Model APIs. A TensorFlow model can be deployed as a Plumber
    API
    , Shiny
    application
    , or other
    supported content type.

  • discoverServer() has been deprecated; it never worked.

  • deployApp("foo.Rmd") has been deprecated. It was never documented, and
    it does the same job as deployDoc() (#698).

Minor improvements and bug fixes

  • New rsconnect.http.headers and rsconnect.http.cookies allow you to
    set extra arbitrary additional headers/cookies on each request (#405).
    Their use is documented in the new vignette("custom-http").

  • Uploading large files to RPubs works once more (#450).

  • When recording details about deployments to Posit Cloud, appId now represents
    the content id (as seen in URLs of the format
    https://posit.cloud/content/{id}) instead of the application id.

  • Deployment records no longer contain the time the app was deployed (when)
    or when it's metadata was last synced (lastSyncTime) as these variables
    are not very useful, and they lead to uninteresting diffs if you have
    committed the deployment records to git (#770). A version field has been
    added to deployment DCF files to facilitate future file format changes, if
    needed. Its value for this release is 1.,

  • accounts() returns a zero-row data frame if no accounts are registered.

  • accountInfo() and removeAccount() no longer require account be
    supplied (#666).

  • accountInfo() and servers() redact sensitive information (secrets,
    private keys, and certificates) to make it hard to accidentally reveal
    such information in logs (#675).

  • addServer() includes the port in the default server name, if present.

  • appDependencies() includes implicit dependencies, and returns an additional
    column giving the Repository (#670). Its documentation contains more
    information about how dependency discovery works, and how you can control
    it, if needed.

  • applications() now returns the application title, if available (#484),
    and processes multiple pages of results from a Connect server (#860).

  • connectApiUser() now clearly requires an apiKey (#741).

  • deployApp() output has been thoroughly reviewed and tweaked. As well as
    general polish it now gives you more information about what it has discovered
    about the deployment, like the app name, account & server, and which files
    are included in the bundle (#669).

  • deployApp() is more aggressive about saving deployment data, which should
    make it less likely that you need to repeat yourself after a failed
    deployment. In particular, it now saves both before and after uploading the
    contents (#677) and it saves when you're updating content originally created
    by someone else (#270).

  • deployApp() now gives an actionable error if you attempt to set
    visibility of an app deployed to posit.cloud (#838).

  • deployApp() now uses a stricter policy for determining whether or not
    a locally installed package can be successfully installed on the deployment
    server. This means that you're more likely to get a clean failure prior to
    deployment (#659).

  • deployApp() will now detect if you're attempting to publish to an app
    that has been deleted and will prompt you to create a new app (#226).

  • deployApp() includes some new conveniences for large uploads including
    reporting the size of the bundle you're uploading and showing a progress bar
    in interactive sessions (#754).

  • deployApp() now follows redirects, which should make it more robust to your
    server moving to a new url (#674).

  • deployApp() uses simpler logic for determining whether it should create a
    new app or update an existing app. Now appName, account, and server are
    used to find existing deployments. If none are found, it will create a new
    deployment; if one is found, it'll be updated; if more than one are found, it
    will prompt you to disambiguate (#666).

  • deployApp() improves account resolution from account and server
    arguments by giving specific recommendations on the values that you might use
    in the case of ambiguity or lack of matches (#666). Additionally, you'll now
    receive a clear error if you accidentally provide something other than a
    string or NULL to these arguments.

  • deployApp() now generates an interactive prompt to select account/server
    (if no previous deployments) or appName/account/server (if multiple
    previous deployments) (#691).

  • deployApp() now advertises which startup scripts are run at the normal
    logLevel, and it evaluates each script in its own environment (#542).

  • deployApp() now derives appName from appDir and appPrimaryDoc,
    never using the title (#538). It now only simplifies the path if you are
    publishing to shinyapps.io, since its restrictions on application names are
    much tighter than those of Posit Connect.

  • deployApp() will now warn if appFiles or appManifestFiles contain
    files that don't exist, rather than silently ignoring them (#706).

  • deployApp() excludes temporary backup files (names starting or ending
    with ~) when automatically determining files to bundle (#111) as well as
    directories that are likely to be python virtual environments (#632).
    Additionally, ignore rules are always now applied to all directories;
    previously some (like .Rproj.user and "manifest.json") were only
    applied to the root directory. It correctly handles .rscignore files
    (i.e. as documented) (#568).

  • deployApp(appSourceDoc) has been deprecated; it did the same job as
    recordDir.

  • deployDoc() includes a .Rprofile in the bundle, if one is found in the
    same directory as the document.

  • lint() should have fewer false positives for path problems:
    the relative path linter has been removed (#244) and the case-sensitive
    linter now only checks strings containing a / (#611).

  • New listDeploymentFiles(), which supsersedes listBundleFiles().
    It now errors when if the bundle is either too large or contains too many
    files, rather than silently truncating as before (#684).

  • serverInfo() and removeServer() no longer require a server when
    called interactively.

  • showMetrics() once again returns a correctly named data frame (#528).

  • Removed Rmd generation code (writeRmdIndex()) which had not worked, or
    been necessary, for quite some time (#106, #109).

  • Locale detection has been improved on windows (#233).

  • The rsconnect.pre.deploy and rsconnect.post.deploy hooks are now always
    called with the content directory, not sometimes the path to a specific file
    (#696).

  • Functions that should only interact with shinyapps.io enforce the server
    type. Updated addAuthorizedUser(), removeAuthorizedUser(),
    showUsers(), showInvited(), resendInvitation(), configureApp(),
    setProperty(), unsetProperty(), purgeApp(), restartApp(),
    terminateApp(), showUsage(), and showMetrics() (#863, #864).

  • When needed packages are not installed, and you're in an interactive
    environment, rsconnect will now prompt you to install them (#665).

  • The confirmation prompt presented upon lint failures indicates "no" as its
    default. (#652)