Skip to content

Releases: rstudio/rsconnect

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)

CRAN Release v0.8.29

10 Jan 13:42
9ce427e
Compare
Choose a tag to compare
  • Introduced support for publishing to Posit Cloud. This feature is currently
    in closed beta and requires access to an enabled account on Posit Cloud.
    See Posit Cloud's Announcement
    for more information and to request access.

  • Update company and product names for rebranding to Posit.

CRAN Release v0.8.28

24 Oct 14:54
e1cba5a
Compare
Choose a tag to compare
  • Shiny applications and Shiny documents no longer include an implicit
    dependency on ragg when that package is present
    in the local environment. This reverts a change introduced in 0.8.27.

    Shiny applications should add an explicit dependency on ragg (usually with
    a library("ragg") statement) to see it used by shiny::renderPlot (via
    shiny::plotPNG).

    The documentation for shiny::plotPNG explains the use of ragg. (#598)

  • Fix bug that prevented publishing or writing manifests for non-Quarto content
    when a Quarto path was provided to the quarto argument of writeManifest(),
    deployApp(), and related functions.

  • Escape account names when performing a directory search to determine an
    appropriate server. (#620)

CRAN Release v0.8.27

12 Jul 17:09
b044289
Compare
Choose a tag to compare
  • Quarto content will no longer silently deploy as R Markdown content when
    Quarto metadata is missing or cannot be gathered. Functions will error,
    requesting the path to a Quarto binary in the quarto argument. (#594)
  • Fix typo for .rscignore. (#599)
  • Quarto deployments specifying only an appDir and quarto binary but not an
    appPrimaryDoc work more consistently. A directory containing a .qmd file
    will deploy as Quarto content instead of failing, and a directory containing
    an .Rmd file will successfully deploy as Quarto content instead of falling
    back to R Markdown. (#601)
  • If the ragg package is installed locally, it is now added as an implicit
    dependency to shiny apps since shiny::renderPlot() now uses it by default
    (when available). This way, shiny apps won't have to add library(ragg) to
    get consistent (higher-quality) PNG images when deployed. (#598)

CRAN Release v0.8.26

31 May 21:05
e287b58
Compare
Choose a tag to compare
  • Add ability to resend shinyapps.io application invitations (#543)
  • Show expiration status in shinyapps.io for invitations (#543)
  • Allow shinyapps.io deployments to be private at creation time (#403)
  • Update the minimum openssl version to 2.0.0 to enable publishing for users
    on FIPS-compliant systems without the need for API keys. (#452)
  • Added Quarto support to writeManifest, which requires passing the absolute
    path to a Quarto executable to its new quarto parameter
  • Added quarto parameter to deployApp to enable deploying Quarto documents
    and websites by supplying the path to a Quarto executable
  • Added support for deploying Quarto content that uses only the jupyter runtime
  • Added support for selecting a target image in the bundle manifest
  • The showLogs function takes a server parameter. (#57)
  • Added the rsconnect.tar option, which can be used to specify the path to a
    tar implementation instead of R's internal implementation. The previous
    method, using the RSCONNECT_TAR environment variable, still works, but the
    new option will take precedence if both are set.

CRAN Release v0.8.25

19 Nov 13:44
95d6674
Compare
Choose a tag to compare
  • Use the curl option -T when uploading files to avoid out of memory
    errors with large files. (#544)
  • The rsconnect.max.bundle.size and rsconnect.max.bundle.files options are
    enforced when processing an enumerated set of files. Previously, these
    limits were enforced only when bundling an entire content directory. (#542)
  • Preserve file time stamps when copying files into the bundle staging
    directory, which then propagates into the created tar file. (#540)
  • Configuration directories align with CRAN policy and use the location named
    by tools::R_user_dir. Configuration created by earlier versions of this
    package is automatically migrated to the new location. (#550)