Releases: rstudio/rsconnect
rsconnect 1.0.1
rsconnect 1.0.0
New features
-
deployApp()
anddeployDoc()
now support deploying static content to Posit
Cloud. Static RMarkdown and Quarto content can be rendered server-side. -
deployApp()
andwriteManifest()
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 yourrenv.lock
to
.rscignore
(#671). Learn more?appDependencies()
.Additionally,
deployApp()
andwriteManifest()
now use renv to capture app
dependencies, rather than packrat. If this causes a previously working deploy
to fail, please file an issue then setoptions(rsconnect.packrat = TRUE)
to
revert to the previous behaviour. -
deployApp()
'squarto
argument now takes valuesTRUE
,FALSE
or
NA
. The previous value (a path to a quarto binary) is now ignored,
and instead we automatically figure out the package fromQUARTO_PATH
and
PATH
env vars (#658).deploySite()
now supports quarto websites (#813). -
deployApp()
gains a newenvVars
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 aenvVars
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 asaddServer()
now thataddServer()
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 asdeployDoc()
(#698).
Minor improvements and bug fixes
-
New
rsconnect.http.headers
andrsconnect.http.cookies
allow you to
set extra arbitrary additional headers/cookies on each request (#405).
Their use is documented in the newvignette("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). Aversion
field has been
added to deployment DCF files to facilitate future file format changes, if
needed. Its value for this release is1
., -
accounts()
returns a zero-row data frame if no accounts are registered. -
accountInfo()
andremoveAccount()
no longer requireaccount
be
supplied (#666). -
accountInfo()
andservers()
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 anapiKey
(#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. NowappName
,account
, andserver
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 fromaccount
andserver
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 orNULL
to these arguments. -
deployApp()
now generates an interactive prompt to selectaccount
/server
(if no previous deployments) orappName
/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 derivesappName
fromappDir
andappPrimaryDoc
,
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 ifappFiles
orappManifestFiles
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 supsersedeslistBundleFiles()
.
It now errors when if the bundle is either too large or contains too many
files, rather than silently truncating as before (#684). -
serverInfo()
andremoveServer()
no longer require aserver
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
andrsconnect.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. UpdatedaddAuthorizedUser()
,removeAuthorizedUser()
,
showUsers()
,showInvited()
,resendInvitation()
,configureApp()
,
setProperty()
,unsetProperty()
,purgeApp()
,restartApp()
,
terminateApp()
,showUsage()
, andshowMetrics()
(#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
-
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
-
Shiny applications and Shiny documents no longer include an implicit
dependency onragg
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
alibrary("ragg")
statement) to see it used byshiny::renderPlot
(via
shiny::plotPNG
).The documentation for
shiny::plotPNG
explains the use ofragg
. (#598) -
Fix bug that prevented publishing or writing manifests for non-Quarto content
when a Quarto path was provided to thequarto
argument ofwriteManifest()
,
deployApp()
, and related functions. -
Escape account names when performing a directory search to determine an
appropriate server. (#620)
CRAN Release v0.8.27
- 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 thequarto
argument. (#594) - Fix typo for
.rscignore
. (#599) - Quarto deployments specifying only an
appDir
andquarto
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 toshiny
apps sinceshiny::renderPlot()
now uses it by default
(when available). This way,shiny
apps won't have to addlibrary(ragg)
to
get consistent (higher-quality) PNG images when deployed. (#598)
CRAN Release v0.8.26
- 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 newquarto
parameter - Added
quarto
parameter todeployApp
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 aserver
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 theRSCONNECT_TAR
environment variable, still works, but the
new option will take precedence if both are set.
CRAN Release v0.8.25
- Use the
curl
option-T
when uploading files to avoid out of memory
errors with large files. (#544) - The
rsconnect.max.bundle.size
andrsconnect.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
bytools::R_user_dir
. Configuration created by earlier versions of this
package is automatically migrated to the new location. (#550)