{"id":16273299,"url":"https://github.com/colearendt/multi-dir-deploy","last_synced_at":"2026-02-09T09:02:01.422Z","repository":{"id":85835968,"uuid":"225386068","full_name":"colearendt/multi-dir-deploy","owner":"colearendt","description":"Experimental multi-directory deploys to RStudio Connect","archived":false,"fork":false,"pushed_at":"2019-12-02T14:48:41.000Z","size":300,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T16:34:32.993Z","etag":null,"topics":["deployment","experimental","manifest","rstudio-connect"],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/colearendt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-02T13:51:24.000Z","updated_at":"2020-03-07T03:20:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"dbd89a4a-c095-438d-92c0-5818f57f1816","html_url":"https://github.com/colearendt/multi-dir-deploy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/colearendt/multi-dir-deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colearendt%2Fmulti-dir-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colearendt%2Fmulti-dir-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colearendt%2Fmulti-dir-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colearendt%2Fmulti-dir-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/colearendt","download_url":"https://codeload.github.com/colearendt/multi-dir-deploy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colearendt%2Fmulti-dir-deploy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270729211,"owners_count":24635382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deployment","experimental","manifest","rstudio-connect"],"created_at":"2024-10-10T18:23:40.615Z","updated_at":"2026-02-09T09:01:56.230Z","avatar_url":"https://github.com/colearendt.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multi Dir Deploy - EXPERIMENTAL\n\n**HACKY EXPERIMENT: DO NOT USE**\n\nTo try:\n\n- Copy `manifest_rmd.json` or `manifest_shiny.json` to `manifest.json`\n- Use `bnd \u003c- connectapi::bundle_dir()`\n- Deploy with `connectapi::deploy(connectapi::connect(), bnd)`\n\n## Important Notes\n\n- Rmd requires changing the `manifest.json` to specify the proper subdirectory\n- Shiny requires a little wrapper to run the app properly\n- Working directory is different when run this way... and can cause problems\n- `manifest.json` must be the name of the manifest, so the client has to be\n  smart enough to change dynamically\n  \n## Pain Points\n\n- **Working Directory?** The IDE knows how to set the working directory when\nrunning a Shiny application. If I want to reference the `helpers` folder, do I\nuse `../helpers` from the app's perspective, or `./helpers` from the root? What\nabout a local `.css` file usually referenced directly? Do I need to specify the\napp directory? Working directory problems are hard for users to reason about,\nespecially in non-interactive contexts like Connect. I used `rprojroot` to solve\nthis problem, but I see users mostly using `here::here()` (which has been known\nto cause problems on Connect). There may need to be some IDE functionality or\nuser training / conventions to make this easier for users.\n\n- **Which files?** The IDE usually scopes deployments to just a directory with\nan app and gives me a nice file selector. How do I figure out which files to\ninclude? This experiment includes the WHOLE DIRECTORY (every time) and only\npivots based on the manifest. Some IDE functionality would be helpful here,\nalong with some type of simple file format structure (a part of the manifest? an\n\"ignore\" file?) that makes clear what files to include. The `.dcf` format does\nthis but is hard to reason about because it is pipe delimited. Further, this is\nhard to marshal for git-backed content / programmatic deployment.\n\n- **Which manifest?** Although `rsconnect` could dynamically build the manifest\nsomehow, the root directory needs to be the basis (which is different from the\ncurrent pattern of the \"app\" directory). Further, things get tricky with\nprogrammatic / git-backed deployment, because Connect only understands the notion\nof a single `manifest.json`. So we will either need smarter clients (to rename /\nrewrite manifests) or Connect to somehow allow the manifest to be specified.\n\n- **Inconsistent manifest specifications** The Shiny deployment method just\nlooks for an `app.R` (or maybe some other types of `.R` files?), and does not\nallow specification in the manifest. Rmd allows the specification of the\n\"primary document.\" As a result, I wrote a [hacky wrapper](./app.R) (which is\nnot advisable). The manifest is inconsistent, uses unclear heuristics, and is\ntherefore a bit hard for a user to reason about here. It would be nice if the\nmanifest was consistent and explicit about what it was going to do, so that it\nis easier to reason about.\n\n- **What is going on on Connect?** I specified the wrong \"primary document\", had\nforgotten to update the manifest.json, and struggled through the working\ndirectory / other issues above. Ultimately, a pattern for \"inspecting the\nbundle\" as a publisher would potentially help the debugging process a bit. At a\nminimum, maybe this would be inspecting the manifest? Further, when developing\nthe Shiny wrapper, Connect and the IDE behaved differently regarding `runApp()`.\nThe non-interactive context makes things challenging to debug, so more exposure\nhere might be nice to support a more complex / complicated workflow. I.e. can I\nsee what the working directory is? The content being executed? The list of\npackages being used?\n\n- **A way to link these deployments together** If these deployments are related,\nis it possible for them to link to each other? Reference one another as \"peers\"\nor \"co-dependents\"? What if one has a strict dependency on the other? I.e. a\npin, Rmd updating a pin, Rmd ETL, etc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolearendt%2Fmulti-dir-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcolearendt%2Fmulti-dir-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolearendt%2Fmulti-dir-deploy/lists"}