Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Standardize single doc deployment #698

Merged
merged 12 commits into from
Feb 24, 2023
Merged

Conversation

hadley
Copy link
Member

@hadley hadley commented Feb 23, 2023

Extract out standardizeSingleDocDeployment() and use it in deployDoc() and deployApp().

I've also documented this feature of deployApp(), which lead to some other minor doc changes since other function inherited from deployApp(). This does raise a question of whether these functions should also support an appDir that's actually a path to a document.

R/deployApp.R Outdated
if (dirExists(appDir)) {
# ok
} else if (file.exists(appDir) && isStaticFile(appDir)) {
doc <- standardizeSingleDocDeployment(appDir)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing that's slightly unappealing about this approach is that we use a different approach to determining appFiles depending on whether you do deployApp("foo.Rmd") or deployApp(appPrimaryDoc = "foo.Rmd"). An alternative approach would be to add an appPrimaryDoc argument to appStandardizeFiles() and call rmarkdown::find_external_dependencies() there when appPrimaryDoc is supplied.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another approach, since this never appears to have been documented, would be to deprecate this use appDir and tell folks to call deployDoc() instead.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting. I forgot about this difference.

# Uses the default appDir=getwd() and enumerates all files in the directory for bundling
deployApp(appPrimaryDoc = "foo.Rmd")
# Uses the foo.Rmd to identify the dependencies of the document; only those are bundled
deployDoc("foo.Rmd")

The existing deployApp("foo.Rmd") feels like a convenience, but we should nudge folks towards using deployDoc should they provide a file.

Added in: #16, and before the notion of a "primary doc".

I'm uneasy about the automatic use of rmarkdown::find_external_dependencies. On the one hand, it does feel like it will produce the set of files that most folks want to include -- directory explosion is often too greedy. On the other hand, its use would add to the "magic" that happens in the "lower-level" deployApp. Its inclusion could suddenly force more folks to compute their own appFiles.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deprecating the deployApp -> deployDoc -> deployApp workflow feels like the right path.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think the fundamentally different mechanism of file discovery suggests that this is a deployDoc() feature, and we should deprecate this old path.

R/deployApp.R Outdated
if (dirExists(appDir)) {
# ok
} else if (file.exists(appDir) && isStaticFile(appDir)) {
doc <- standardizeSingleDocDeployment(appDir)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting. I forgot about this difference.

# Uses the default appDir=getwd() and enumerates all files in the directory for bundling
deployApp(appPrimaryDoc = "foo.Rmd")
# Uses the foo.Rmd to identify the dependencies of the document; only those are bundled
deployDoc("foo.Rmd")

The existing deployApp("foo.Rmd") feels like a convenience, but we should nudge folks towards using deployDoc should they provide a file.

Added in: #16, and before the notion of a "primary doc".

I'm uneasy about the automatic use of rmarkdown::find_external_dependencies. On the one hand, it does feel like it will produce the set of files that most folks want to include -- directory explosion is often too greedy. On the other hand, its use would add to the "magic" that happens in the "lower-level" deployApp. Its inclusion could suddenly force more folks to compute their own appFiles.

R/deployApp.R Outdated
if (dirExists(appDir)) {
# ok
} else if (file.exists(appDir) && isStaticFile(appDir)) {
doc <- standardizeSingleDocDeployment(appDir)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deprecating the deployApp -> deployDoc -> deployApp workflow feels like the right path.

@hadley hadley merged commit bb2faf2 into main Feb 24, 2023
@hadley hadley deleted the standardizeSingleDocDeployment branch February 24, 2023 17:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants