@webship.co/workspace 1.0.0-beta1 → 1.0.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +339 -0
- package/README.md +28 -364
- package/core/bin/workspace.js +135 -0
- package/core/config/settings.labels.yml +514 -0
- package/core/config/settings.template.yml +292 -0
- package/core/config/style.yml +53 -0
- package/core/config/theme.default.yml +161 -0
- package/core/config/theme.dispatch.yml +166 -0
- package/core/config/theme.drupal.yml +175 -0
- package/core/config/theme.ember.yml +160 -0
- package/core/config/theme.github.yml +172 -0
- package/core/config/theme.gitlab.yml +168 -0
- package/core/config/theme.press.yml +161 -0
- package/core/config/theme.slate.yml +160 -0
- package/core/config/theme.upsun.yml +174 -0
- package/core/docs/architecture.svg +65 -0
- package/core/docs/getting-started.md +51 -0
- package/core/docs/plugins.md +27 -0
- package/core/docs/releases.md +23 -0
- package/core/docs/testing.md +15 -0
- package/core/docs/workspaces.md +25 -0
- package/core/scripts/args/arg-ai-items.sh +65 -0
- package/core/scripts/args/arg-autostart.sh +31 -0
- package/core/scripts/args/arg-avatar-agent.sh +28 -0
- package/core/scripts/args/arg-avatar-catalog.sh +12 -0
- package/core/scripts/args/arg-avatar-character.sh +68 -0
- package/core/scripts/args/arg-avatar-voice.sh +24 -0
- package/core/scripts/args/arg-avatar.sh +22 -0
- package/core/scripts/args/arg-checks.sh +36 -0
- package/core/scripts/args/arg-clone.sh +42 -0
- package/core/scripts/args/arg-commands.sh +51 -0
- package/core/scripts/args/arg-cucumber.sh +34 -0
- package/core/scripts/args/arg-distribution.sh +30 -0
- package/core/scripts/args/arg-drupal.sh +39 -0
- package/core/scripts/args/arg-drupal_cms.sh +18 -0
- package/core/scripts/args/arg-gitlab-ci-local.sh +25 -0
- package/core/scripts/args/arg-graphify.sh +36 -0
- package/core/scripts/args/arg-graphs.sh +12 -0
- package/core/scripts/args/arg-hostnames.sh +23 -0
- package/core/scripts/args/arg-milvus-backup.sh +8 -0
- package/core/scripts/args/arg-milvus-mcp.sh +12 -0
- package/core/scripts/args/arg-milvus.sh +32 -0
- package/core/scripts/args/arg-obsidian.sh +17 -0
- package/core/scripts/args/arg-odoo.sh +18 -0
- package/core/scripts/args/arg-penpot-backup.sh +8 -0
- package/core/scripts/args/arg-penpot-mcp.sh +15 -0
- package/core/scripts/args/arg-penpot-token.sh +17 -0
- package/core/scripts/args/arg-penpot.sh +44 -0
- package/core/scripts/args/arg-rag.sh +21 -0
- package/core/scripts/args/arg-ragify.sh +35 -0
- package/core/scripts/args/arg-reclaim.sh +18 -0
- package/core/scripts/args/arg-release.sh +21 -0
- package/core/scripts/args/arg-screen.sh +28 -0
- package/core/scripts/args/arg-site-template.sh +13 -0
- package/core/scripts/args/arg-spdd.sh +16 -0
- package/core/scripts/args/arg-specs.sh +22 -0
- package/core/scripts/args/arg-storage.sh +36 -0
- package/core/scripts/args/arg-testing.sh +36 -0
- package/core/scripts/args/arg-webship.sh +34 -0
- package/core/scripts/args/arg-webships-project.sh +22 -0
- package/core/scripts/args/arg-webships-site-template.sh +17 -0
- package/core/scripts/args/arg-webships.sh +34 -0
- package/core/scripts/args/arg-website-site-template.sh +17 -0
- package/core/scripts/args/arg-website.sh +25 -0
- package/core/scripts/args/arg-wordpress.sh +18 -0
- package/core/scripts/autostart-run.sh +162 -0
- package/core/scripts/autostart-stop.sh +30 -0
- package/core/scripts/autostart-watch.sh +43 -0
- package/core/scripts/autostart.sh +26 -0
- package/core/scripts/bootstrap-functions.sh +117 -0
- package/core/scripts/bootstrap-libraries.sh +10 -0
- package/core/scripts/bootstrap.sh +71 -0
- package/core/scripts/ddev-shim/ddev +122 -0
- package/core/scripts/docker-gid.sh +119 -0
- package/core/scripts/functions/arg-site-template.sh +28 -0
- package/core/scripts/functions/fun-ai-items-lock.sh +175 -0
- package/core/scripts/functions/fun-ai-items-sources.sh +298 -0
- package/core/scripts/functions/fun-ai-items.sh +621 -0
- package/core/scripts/functions/fun-ai-providers.sh +72 -0
- package/core/scripts/functions/fun-autostart.sh +429 -0
- package/core/scripts/functions/fun-avatar.sh +441 -0
- package/core/scripts/functions/fun-backup-item.sh +50 -0
- package/core/scripts/functions/fun-build-distribution.sh +226 -0
- package/core/scripts/functions/fun-build-site-template.sh +104 -0
- package/core/scripts/functions/fun-build-webships.sh +161 -0
- package/core/scripts/functions/fun-build-website.sh +199 -0
- package/core/scripts/functions/fun-checks.sh +243 -0
- package/core/scripts/functions/fun-clone-project.sh +289 -0
- package/core/scripts/functions/fun-commands.sh +521 -0
- package/core/scripts/functions/fun-database.sh +63 -0
- package/core/scripts/functions/fun-ddev-hostnames.sh +213 -0
- package/core/scripts/functions/fun-ddev-nodejs.sh +15 -0
- package/core/scripts/functions/fun-ddev-telemetry.sh +15 -0
- package/core/scripts/functions/fun-default-settings.sh +28 -0
- package/core/scripts/functions/fun-distribution-cucumber.sh +45 -0
- package/core/scripts/functions/fun-distribution-drupal.sh +25 -0
- package/core/scripts/functions/fun-distribution-drupal_cms.sh +35 -0
- package/core/scripts/functions/fun-distribution-webship.sh +28 -0
- package/core/scripts/functions/fun-distribution-webships.sh +33 -0
- package/core/scripts/functions/fun-distribution-website.sh +19 -0
- package/core/scripts/functions/fun-drush.sh +48 -0
- package/core/scripts/functions/fun-elevenlabs.sh +179 -0
- package/core/scripts/functions/fun-files.sh +19 -0
- package/core/scripts/functions/fun-git-worktrees.sh +142 -0
- package/core/scripts/functions/fun-gitlab-ci.sh +156 -0
- package/core/scripts/functions/fun-hostnames-cli.sh +88 -0
- package/core/scripts/functions/fun-milvus.sh +584 -0
- package/core/scripts/functions/fun-odoo.sh +121 -0
- package/core/scripts/functions/fun-penpot.sh +724 -0
- package/core/scripts/functions/fun-project-name.sh +20 -0
- package/core/scripts/functions/fun-rag.sh +253 -0
- package/core/scripts/functions/fun-ragify.sh +165 -0
- package/core/scripts/functions/fun-reclaim.sh +297 -0
- package/core/scripts/functions/fun-release.sh +159 -0
- package/core/scripts/functions/fun-remove-project.sh +319 -0
- package/core/scripts/functions/fun-screen.sh +96 -0
- package/core/scripts/functions/fun-spdd.sh +676 -0
- package/core/scripts/functions/fun-specs-share.sh +237 -0
- package/core/scripts/functions/fun-storage.sh +347 -0
- package/core/scripts/functions/fun-testing.sh +329 -0
- package/core/scripts/functions/fun-users.sh +87 -0
- package/core/scripts/functions/fun-version.sh +72 -0
- package/core/scripts/functions/fun-video-edit.sh +48 -0
- package/core/scripts/functions/fun-voice.sh +45 -0
- package/core/scripts/functions/fun-wordpress.sh +59 -0
- package/core/scripts/host-mounts.sh +161 -0
- package/core/scripts/install.sh +602 -0
- package/core/scripts/libs/__pycache__/video_edit.cpython-312.pyc +0 -0
- package/core/scripts/libs/argparse.sh +93 -0
- package/core/scripts/libs/bash-yaml.sh +52 -0
- package/core/scripts/libs/checks_plan.js +312 -0
- package/core/scripts/libs/elevenlabs.py +627 -0
- package/core/scripts/libs/progress-bar.sh +19 -0
- package/core/scripts/libs/rag_index.py +446 -0
- package/core/scripts/libs/video_edit.py +636 -0
- package/core/scripts/libs/voice.py +430 -0
- package/core/scripts/plugins/jira/host-install.sh +119 -0
- package/core/scripts/plugins/jira/host-mounts.txt +2 -0
- package/core/scripts/plugins/upsun/args/arg-upsun.sh +51 -0
- package/core/scripts/plugins/upsun/functions/fun-upsun.sh +304 -0
- package/core/scripts/plugins/upsun/host-install.sh +99 -0
- package/core/scripts/plugins/upsun/host-mounts.txt +1 -0
- package/core/scripts/plugins/upsun/upsun-ai.sh +133 -0
- package/core/scripts/plugins.sh +152 -0
- package/core/scripts/release.sh +69 -0
- package/core/scripts/storage.sh +39 -0
- package/core/scripts/sync-tooling.sh +246 -0
- package/core/scripts/tests/cmd-smoke-test.sh +109 -0
- package/core/scripts/trust-https.sh +257 -0
- package/core/workspace-app/.ddev/commands/web/test-dashboard +49 -0
- package/core/workspace-app/.ddev/config.yaml +400 -0
- package/core/workspace-app/.ddev/docker-compose.dood.yaml +45 -0
- package/core/workspace-app/.ddev/docker-compose.plugin-jira-twg.yaml +26 -0
- package/core/workspace-app/.ddev/docker-compose.plugin-upsun-upsun-cli.yaml +8 -0
- package/core/workspace-app/.ddev/docker-compose.screens.yaml +15 -0
- package/core/workspace-app/.ddev/nginx_full/nginx-site.conf +114 -0
- package/core/workspace-app/.ddev/web-build/Dockerfile.workspace-app +203 -0
- package/core/workspace-app/.ddev/web-build/ddev-shim-ddev +122 -0
- package/core/workspace-app/README.md +380 -0
- package/{actions → core/workspace-app/actions}/ddev.js +0 -1
- package/{actions → core/workspace-app/actions}/rag.js +0 -1
- package/{actions → core/workspace-app/actions}/testing.js +0 -1
- package/{assistant.js → core/workspace-app/assistant.js} +1 -10
- package/{git-info.js → core/workspace-app/git-info.js} +17 -1
- package/core/workspace-app/package.json +29 -0
- package/core/workspace-app/plugin-catalog.js +50 -0
- package/{plugins-page.js → core/workspace-app/plugins-page.js} +28 -2
- package/{server.js → core/workspace-app/server.js} +18 -0
- package/core/workspace-app/tests/features/actions-rail.feature +44 -0
- package/core/workspace-app/tests/features/ai-items.feature +23 -0
- package/core/workspace-app/tests/features/assistant-speech.feature +63 -0
- package/core/workspace-app/tests/features/checks.feature +39 -0
- package/core/workspace-app/tests/features/clone-project.feature +30 -0
- package/core/workspace-app/tests/features/command-authoring.feature +58 -0
- package/core/workspace-app/tests/features/dashboard.feature +57 -0
- package/core/workspace-app/tests/features/menus.feature +29 -0
- package/core/workspace-app/tests/features/plugins/jira/jira.feature +47 -0
- package/core/workspace-app/tests/features/plugins.feature +20 -0
- package/core/workspace-app/tests/features/project-actions.feature +40 -0
- package/core/workspace-app/tests/features/screens.feature +29 -0
- package/core/workspace-app/tests/features/settings.feature +46 -0
- package/core/workspace-app/tests/features/test-reports.feature +32 -0
- package/core/workspace-app/tests/features/theme.feature +40 -0
- package/core/workspace-app/tests/step-definitions/actions-post.steps.js +25 -0
- package/core/workspace-app/tests/step-definitions/assistant-speech.steps.js +152 -0
- package/core/workspace-app/tests/step-definitions/preconditions.steps.js +100 -0
- package/core/workspace-app/tests/unit/_isolated-config.js +31 -0
- package/core/workspace-app/tests/unit/accessibility.test.js +124 -0
- package/core/workspace-app/tests/unit/actions-rail-ux.test.js +56 -0
- package/core/workspace-app/tests/unit/actions-rail.test.js +51 -0
- package/core/workspace-app/tests/unit/ai-inventory.test.js +64 -0
- package/core/workspace-app/tests/unit/app-docs.test.js +64 -0
- package/core/workspace-app/tests/unit/assistant-avatar.test.js +110 -0
- package/core/workspace-app/tests/unit/assistant-cast.test.js +105 -0
- package/core/workspace-app/tests/unit/assistant-send-animation.test.js +15 -0
- package/core/workspace-app/tests/unit/assistant-suggestions.test.js +112 -0
- package/core/workspace-app/tests/unit/assistant-switches.test.js +53 -0
- package/core/workspace-app/tests/unit/assistant-views.test.js +146 -0
- package/core/workspace-app/tests/unit/assistant-working-indicator.test.js +49 -0
- package/core/workspace-app/tests/unit/assistant.test.js +61 -0
- package/core/workspace-app/tests/unit/audio-player.test.js +147 -0
- package/core/workspace-app/tests/unit/audio-voice.test.js +634 -0
- package/core/workspace-app/tests/unit/auth-google.test.js +180 -0
- package/core/workspace-app/tests/unit/autostart-watch.test.js +76 -0
- package/core/workspace-app/tests/unit/browsers.test.js +76 -0
- package/core/workspace-app/tests/unit/build-distribution.test.js +125 -0
- package/core/workspace-app/tests/unit/build-order.test.js +153 -0
- package/core/workspace-app/tests/unit/builder-args.test.js +113 -0
- package/core/workspace-app/tests/unit/builders.test.js +158 -0
- package/core/workspace-app/tests/unit/card-state-toggle.test.js +29 -0
- package/core/workspace-app/tests/unit/changelog.test.js +177 -0
- package/core/workspace-app/tests/unit/chat-thread.test.js +92 -0
- package/core/workspace-app/tests/unit/checks-plan.test.js +205 -0
- package/core/workspace-app/tests/unit/claude-args.test.js +182 -0
- package/core/workspace-app/tests/unit/claude-code-here.test.js +15 -0
- package/core/workspace-app/tests/unit/claude-resume.test.js +147 -0
- package/core/workspace-app/tests/unit/claude-screen-options.test.js +84 -0
- package/core/workspace-app/tests/unit/claude-session.test.js +41 -0
- package/core/workspace-app/tests/unit/command-flags.test.js +45 -0
- package/core/workspace-app/tests/unit/command-palette.test.js +105 -0
- package/core/workspace-app/tests/unit/commands-center.test.js +338 -0
- package/core/workspace-app/tests/unit/composer-menu.test.js +187 -0
- package/core/workspace-app/tests/unit/config-yaml.test.js +116 -0
- package/core/workspace-app/tests/unit/confirm-dialog.test.js +69 -0
- package/core/workspace-app/tests/unit/create-card.test.js +85 -0
- package/core/workspace-app/tests/unit/ddev-addons.test.js +144 -0
- package/core/workspace-app/tests/unit/ddev-auth-ssh.test.js +40 -0
- package/core/workspace-app/tests/unit/ddev-custom-commands.test.js +56 -0
- package/core/workspace-app/tests/unit/ddev-diagnose.test.js +57 -0
- package/core/workspace-app/tests/unit/ddev-domains.test.js +153 -0
- package/core/workspace-app/tests/unit/ddev-hostnames.test.js +143 -0
- package/core/workspace-app/tests/unit/ddev-import.test.js +82 -0
- package/core/workspace-app/tests/unit/ddev-mail.test.js +135 -0
- package/core/workspace-app/tests/unit/ddev-menu-and-create.test.js +28 -0
- package/core/workspace-app/tests/unit/ddev-mutagen.test.js +37 -0
- package/core/workspace-app/tests/unit/ddev-options.test.js +51 -0
- package/core/workspace-app/tests/unit/ddev-share.test.js +40 -0
- package/core/workspace-app/tests/unit/ddev-shim.test.js +57 -0
- package/core/workspace-app/tests/unit/ddev-snapshots.test.js +142 -0
- package/core/workspace-app/tests/unit/ddev-start-daemons.test.js +62 -0
- package/core/workspace-app/tests/unit/ddev-xdebug.test.js +41 -0
- package/core/workspace-app/tests/unit/deep-chat-origin.test.js +38 -0
- package/core/workspace-app/tests/unit/density.test.js +52 -0
- package/core/workspace-app/tests/unit/elevenlabs.test.js +453 -0
- package/core/workspace-app/tests/unit/event-log.test.js +102 -0
- package/core/workspace-app/tests/unit/favicon.test.js +68 -0
- package/core/workspace-app/tests/unit/files-browser.test.js +224 -0
- package/core/workspace-app/tests/unit/git-info.test.js +26 -0
- package/core/workspace-app/tests/unit/grid-and-list.test.js +103 -0
- package/core/workspace-app/tests/unit/host-tool-wrapper.test.js +18 -0
- package/core/workspace-app/tests/unit/html-patterns.test.js +51 -0
- package/core/workspace-app/tests/unit/ide-infra.test.js +28 -0
- package/core/workspace-app/tests/unit/images-ai.test.js +201 -0
- package/core/workspace-app/tests/unit/images-create.test.js +59 -0
- package/core/workspace-app/tests/unit/images-providers.test.js +248 -0
- package/core/workspace-app/tests/unit/images-svg.test.js +213 -0
- package/core/workspace-app/tests/unit/images-workspace.test.js +144 -0
- package/core/workspace-app/tests/unit/jobs-fragment.test.js +66 -0
- package/core/workspace-app/tests/unit/media-ux.test.js +164 -0
- package/core/workspace-app/tests/unit/modal-fit.test.js +87 -0
- package/core/workspace-app/tests/unit/modules-load.test.js +23 -0
- package/core/workspace-app/tests/unit/narration.test.js +186 -0
- package/core/workspace-app/tests/unit/navigation-editor.test.js +260 -0
- package/core/workspace-app/tests/unit/navigation.test.js +254 -0
- package/core/workspace-app/tests/unit/new-folder.test.js +121 -0
- package/core/workspace-app/tests/unit/new-screen-form.test.js +149 -0
- package/core/workspace-app/tests/unit/node-menu.test.js +161 -0
- package/core/workspace-app/tests/unit/notes.test.js +128 -0
- package/core/workspace-app/tests/unit/page-structure.test.js +40 -0
- package/core/workspace-app/tests/unit/page-width.test.js +59 -0
- package/core/workspace-app/tests/unit/php-version.test.js +90 -0
- package/core/workspace-app/tests/unit/plan-card.test.js +44 -0
- package/core/workspace-app/tests/unit/plugin-catalog.test.js +31 -0
- package/core/workspace-app/tests/unit/plugin-system.test.js +251 -0
- package/core/workspace-app/tests/unit/plugins-page.test.js +28 -0
- package/core/workspace-app/tests/unit/plugins.test.js +58 -0
- package/core/workspace-app/tests/unit/project-activity-filter.test.js +180 -0
- package/core/workspace-app/tests/unit/project-make.test.js +143 -0
- package/core/workspace-app/tests/unit/project-name.test.js +202 -0
- package/core/workspace-app/tests/unit/reader.test.js +62 -0
- package/core/workspace-app/tests/unit/release.test.js +92 -0
- package/core/workspace-app/tests/unit/remove-confirm.test.js +37 -0
- package/core/workspace-app/tests/unit/report-pdf.test.js +171 -0
- package/core/workspace-app/tests/unit/round-11.test.js +31 -0
- package/core/workspace-app/tests/unit/round-12.test.js +37 -0
- package/core/workspace-app/tests/unit/row-layout.test.js +585 -0
- package/core/workspace-app/tests/unit/row-menus-fold.test.js +29 -0
- package/core/workspace-app/tests/unit/rows-add-modal.test.js +68 -0
- package/core/workspace-app/tests/unit/screen-runner-queue.test.js +41 -0
- package/core/workspace-app/tests/unit/screen-window.test.js +116 -0
- package/core/workspace-app/tests/unit/screens-beside-running.test.js +19 -0
- package/core/workspace-app/tests/unit/screens-columns.test.js +79 -0
- package/core/workspace-app/tests/unit/screens-menu.test.js +84 -0
- package/core/workspace-app/tests/unit/screens-modal-overlay.test.js +14 -0
- package/core/workspace-app/tests/unit/screens-waiting.test.js +129 -0
- package/core/workspace-app/tests/unit/screens.test.js +74 -0
- package/core/workspace-app/tests/unit/second-storage.test.js +218 -0
- package/core/workspace-app/tests/unit/session-name.test.js +64 -0
- package/core/workspace-app/tests/unit/settings-file.test.js +173 -0
- package/core/workspace-app/tests/unit/settings-nested-list.test.js +54 -0
- package/core/workspace-app/tests/unit/settings-raw.test.js +177 -0
- package/core/workspace-app/tests/unit/shared-prefs.test.js +49 -0
- package/core/workspace-app/tests/unit/speech.test.js +290 -0
- package/core/workspace-app/tests/unit/static-caching.test.js +39 -0
- package/core/workspace-app/tests/unit/status-language.test.js +47 -0
- package/core/workspace-app/tests/unit/tab-modal.test.js +69 -0
- package/core/workspace-app/tests/unit/tab-title.test.js +37 -0
- package/core/workspace-app/tests/unit/template-literals.test.js +52 -0
- package/core/workspace-app/tests/unit/terminal-scrollback.test.js +61 -0
- package/core/workspace-app/tests/unit/terminal-size.test.js +103 -0
- package/core/workspace-app/tests/unit/terminal-style.test.js +84 -0
- package/core/workspace-app/tests/unit/terminal-windows.test.js +154 -0
- package/core/workspace-app/tests/unit/themes.test.js +453 -0
- package/core/workspace-app/tests/unit/tool-labels.test.js +34 -0
- package/core/workspace-app/tests/unit/topbar-icons.test.js +47 -0
- package/core/workspace-app/tests/unit/update-docker-gid.test.js +51 -0
- package/core/workspace-app/tests/unit/user-guide.test.js +60 -0
- package/core/workspace-app/tests/unit/version-check.test.js +98 -0
- package/core/workspace-app/tests/unit/version-link.test.js +50 -0
- package/core/workspace-app/tests/unit/video-borrow.test.js +198 -0
- package/core/workspace-app/tests/unit/video-edit-ask.test.js +93 -0
- package/core/workspace-app/tests/unit/video-edit-short.test.js +42 -0
- package/core/workspace-app/tests/unit/video-edit.test.js +417 -0
- package/core/workspace-app/tests/unit/video-transcript.test.js +237 -0
- package/core/workspace-app/tests/unit/waiting.test.js +48 -0
- package/core/workspace-app/tests/unit/wordpress-odoo-builders.test.js +38 -0
- package/core/workspace-app/tests/unit/workspace-bin.test.js +48 -0
- package/core/workspace-app/tests/unit/workspace-card-tools.test.js +30 -0
- package/core/workspace-app/tests/unit/workspace-delete.test.js +77 -0
- package/core/workspace-app/tests/unit/workspace-types.test.js +68 -0
- package/core/workspace-app/tests/unit/worktree-clone.test.js +250 -0
- package/package.json +38 -36
- /package/{PLUGINS.md → core/workspace-app/PLUGINS.md} +0 -0
- /package/{WORKSPACES.md → core/workspace-app/WORKSPACES.md} +0 -0
- /package/{actions → core/workspace-app/actions}/ai-items.js +0 -0
- /package/{actions → core/workspace-app/actions}/audio.js +0 -0
- /package/{actions → core/workspace-app/actions}/build-order.js +0 -0
- /package/{actions → core/workspace-app/actions}/checks.js +0 -0
- /package/{actions → core/workspace-app/actions}/claude-session.js +0 -0
- /package/{actions → core/workspace-app/actions}/commands-center.js +0 -0
- /package/{actions → core/workspace-app/actions}/composer.js +0 -0
- /package/{actions → core/workspace-app/actions}/ddev-addons.js +0 -0
- /package/{actions → core/workspace-app/actions}/ddev-mail.js +0 -0
- /package/{actions → core/workspace-app/actions}/folders.js +0 -0
- /package/{actions → core/workspace-app/actions}/images-svg.js +0 -0
- /package/{actions → core/workspace-app/actions}/images.js +0 -0
- /package/{actions → core/workspace-app/actions}/navigation.js +0 -0
- /package/{actions → core/workspace-app/actions}/node.js +0 -0
- /package/{actions → core/workspace-app/actions}/notes.js +0 -0
- /package/{actions → core/workspace-app/actions}/plugins.js +0 -0
- /package/{actions → core/workspace-app/actions}/project-make.js +0 -0
- /package/{actions → core/workspace-app/actions}/row-actions.js +0 -0
- /package/{actions → core/workspace-app/actions}/screens.js +0 -0
- /package/{actions → core/workspace-app/actions}/video-edit.js +0 -0
- /package/{ai-inventory.js → core/workspace-app/ai-inventory.js} +0 -0
- /package/{ai-items.js → core/workspace-app/ai-items.js} +0 -0
- /package/{assistant-cast.js → core/workspace-app/assistant-cast.js} +0 -0
- /package/{assistant-suggestions.js → core/workspace-app/assistant-suggestions.js} +0 -0
- /package/{audio-voice.js → core/workspace-app/audio-voice.js} +0 -0
- /package/{auth-google.js → core/workspace-app/auth-google.js} +0 -0
- /package/{build-ai.js → core/workspace-app/build-ai.js} +0 -0
- /package/{build-order-page.js → core/workspace-app/build-order-page.js} +0 -0
- /package/{build-order.js → core/workspace-app/build-order.js} +0 -0
- /package/{builder-args.js → core/workspace-app/builder-args.js} +0 -0
- /package/{changelog.js → core/workspace-app/changelog.js} +0 -0
- /package/{chat-threads.js → core/workspace-app/chat-threads.js} +0 -0
- /package/{checks.js → core/workspace-app/checks.js} +0 -0
- /package/{claude-args.js → core/workspace-app/claude-args.js} +0 -0
- /package/{claude-sessions.js → core/workspace-app/claude-sessions.js} +0 -0
- /package/{command-author.js → core/workspace-app/command-author.js} +0 -0
- /package/{command-block.js → core/workspace-app/command-block.js} +0 -0
- /package/{commands → core/workspace-app/commands}/defaults.yml +0 -0
- /package/{commands-page.js → core/workspace-app/commands-page.js} +0 -0
- /package/{commands.js → core/workspace-app/commands.js} +0 -0
- /package/{cucumber.js → core/workspace-app/cucumber.js} +0 -0
- /package/{ddev-addons-page.js → core/workspace-app/ddev-addons-page.js} +0 -0
- /package/{ddev-addons.js → core/workspace-app/ddev-addons.js} +0 -0
- /package/{ddev-custom-commands.js → core/workspace-app/ddev-custom-commands.js} +0 -0
- /package/{ddev-domains.js → core/workspace-app/ddev-domains.js} +0 -0
- /package/{ddev-import.js → core/workspace-app/ddev-import.js} +0 -0
- /package/{ddev-mail-page.js → core/workspace-app/ddev-mail-page.js} +0 -0
- /package/{ddev-mail.js → core/workspace-app/ddev-mail.js} +0 -0
- /package/{ddev-options.js → core/workspace-app/ddev-options.js} +0 -0
- /package/{ddev-snapshots.js → core/workspace-app/ddev-snapshots.js} +0 -0
- /package/{ddev.js → core/workspace-app/ddev.js} +0 -0
- /package/{docs → core/workspace-app/docs}/DEVELOPER-GUIDE.md +0 -0
- /package/{docs → core/workspace-app/docs}/README.md +0 -0
- /package/{docs → core/workspace-app/docs}/REFERENCE.md +0 -0
- /package/{docs → core/workspace-app/docs}/USER-GUIDE.md +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-board.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-coffee.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-colours.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-icons.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-moves.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-pick-cookieman.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-settings-voices.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-status.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/create-card/create-card.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/create-card/start-ai.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-address.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-off.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-on.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-ddev-menu.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-domains.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-home.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-ide-menu.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-remove-refusal.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-rows-worktree.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-screens.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-settings.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-workspace-page.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/home/card-settings.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/home/drag-reorder.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/home/edit-card.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/claude-code-image.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/edit-with-ai.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/gallery.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/generate-description.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/generate-plan.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/providers.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/svg-form.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/svg-result.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/upload.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/new-folder/2-form.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/new-folder/8-ddev-options.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/new-folder/files-folder.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/projects/ddev-custom-commands.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/projects/state-chip-stop.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/ai.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/code.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/docs.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/services.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/sites.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-scenarios.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-steps.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/screens-menu.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/screens-new.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/auth-google-lists.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-1-row.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-2-confirm.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-3-type-name.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-4-type-yes.png +0 -0
- /package/{event-log.js → core/workspace-app/event-log.js} +0 -0
- /package/{files-browser.js → core/workspace-app/files-browser.js} +0 -0
- /package/{folders.js → core/workspace-app/folders.js} +0 -0
- /package/{format.js → core/workspace-app/format.js} +0 -0
- /package/{github-auth.js → core/workspace-app/github-auth.js} +0 -0
- /package/{html.js → core/workspace-app/html.js} +0 -0
- /package/{icons.js → core/workspace-app/icons.js} +0 -0
- /package/{images-ai.js → core/workspace-app/images-ai.js} +0 -0
- /package/{images-create.js → core/workspace-app/images-create.js} +0 -0
- /package/{images-page.js → core/workspace-app/images-page.js} +0 -0
- /package/{images-records.js → core/workspace-app/images-records.js} +0 -0
- /package/{images-render.js → core/workspace-app/images-render.js} +0 -0
- /package/{images-svg-core.js → core/workspace-app/images-svg-core.js} +0 -0
- /package/{images-svg-sanitize.js → core/workspace-app/images-svg-sanitize.js} +0 -0
- /package/{images-svg.js → core/workspace-app/images-svg.js} +0 -0
- /package/{images.js → core/workspace-app/images.js} +0 -0
- /package/{jobs.js → core/workspace-app/jobs.js} +0 -0
- /package/{linger.js → core/workspace-app/linger.js} +0 -0
- /package/{lists.js → core/workspace-app/lists.js} +0 -0
- /package/{media-info.js → core/workspace-app/media-info.js} +0 -0
- /package/{navigation-page.js → core/workspace-app/navigation-page.js} +0 -0
- /package/{navigation.js → core/workspace-app/navigation.js} +0 -0
- /package/{notes.js → core/workspace-app/notes.js} +0 -0
- /package/{palette-index.js → core/workspace-app/palette-index.js} +0 -0
- /package/{playwright.config.js → core/workspace-app/playwright.config.js} +0 -0
- /package/{plugin-install.js → core/workspace-app/plugin-install.js} +0 -0
- /package/{plugin-loader.js → core/workspace-app/plugin-loader.js} +0 -0
- /package/{plugin-manifest.js → core/workspace-app/plugin-manifest.js} +0 -0
- /package/{plugin-settings.js → core/workspace-app/plugin-settings.js} +0 -0
- /package/{plugins → core/workspace-app/plugins}/workspace-notes/index.js +0 -0
- /package/{project-make.js → core/workspace-app/project-make.js} +0 -0
- /package/{project-name.js → core/workspace-app/project-name.js} +0 -0
- /package/{public → core/workspace-app/public}/assistant-avatar-moves.js +0 -0
- /package/{public → core/workspace-app/public}/assistant-avatar-ui.js +0 -0
- /package/{public → core/workspace-app/public}/assistant-avatar.js +0 -0
- /package/{public → core/workspace-app/public}/avatar/druplicon.vrm +0 -0
- /package/{public → core/workspace-app/public}/css/base.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/ai-assistant.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/assistant-avatar.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/assistant-views.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/build-order.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/clone-as-a-git-worktree.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/command-palette.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/commands-center.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/confirm-dialog.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/create-card.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/ddev-menu.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/deep-chat.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/density.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/floating-assistant-workspace-pages.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/folders.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/full-height-left-assistant-sidebar-all-pages.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/full-height-right-actions-rail-pages-that-have-actions.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/grid-and-list.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/help-page.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/hero.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/images.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/layout-rhythm-and-spacing-polish.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/mic-on-any-field-that-wants-typing.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/modal-fit.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/page-width.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/plugins-page.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/project-cards.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/project-rows.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/reordering-the-workspace-cards.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/responsive-home-and-the-workspace-pages.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/running-commands-as-toasts.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/settings-editor-core-config-yml.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/short-results-as-a-toast-at-the-top.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/sound-player.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/suggest-agents-skills-commands.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/tab-modal.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/terminals.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/test-report-media-one-file-per-row-paged.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/top-toolbar-logo-breadcrumb.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/video-edit.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/web-ide-open-with.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/working-indicators.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/workspace-cards.css +0 -0
- /package/{public → core/workspace-app/public}/favicon.ico +0 -0
- /package/{public → core/workspace-app/public}/favicon.png +0 -0
- /package/{public → core/workspace-app/public}/htmx.min.js +0 -0
- /package/{public → core/workspace-app/public}/logo.png +0 -0
- /package/{public → core/workspace-app/public}/media-player.js +0 -0
- /package/{public → core/workspace-app/public}/mic.js +0 -0
- /package/{public → core/workspace-app/public}/narration.js +0 -0
- /package/{public → core/workspace-app/public}/palette.js +0 -0
- /package/{public → core/workspace-app/public}/sortable.js +0 -0
- /package/{public → core/workspace-app/public}/suggest.js +0 -0
- /package/{public → core/workspace-app/public}/terminal.js +0 -0
- /package/{public → core/workspace-app/public}/themes/default/theme.css +0 -0
- /package/{public → core/workspace-app/public}/themes/ember/theme.css +0 -0
- /package/{public → core/workspace-app/public}/themes/press/theme.css +0 -0
- /package/{public → core/workspace-app/public}/themes/slate/theme.css +0 -0
- /package/{public → core/workspace-app/public}/touch-icon.png +0 -0
- /package/{public → core/workspace-app/public}/ui.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/ace.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/ext-language_tools.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/ext-searchbox.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-css.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-html.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-javascript.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-markdown.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-sh.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-yaml.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/theme-textmate.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/theme-tomorrow_night.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/worker-yaml.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/deep-chat.LICENSE +0 -0
- /package/{public → core/workspace-app/public}/vendor/deep-chat.bundle.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/tabler-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/tabler-sprite.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/LICENSE +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/addons/loaders/GLTFLoader.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/addons/utils/BufferGeometryUtils.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/addons/utils/SkeletonUtils.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/three.core.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/three.module.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three-vrm/LICENSE +0 -0
- /package/{public → core/workspace-app/public}/vendor/three-vrm/three-vrm.module.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/uikit-icons.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/uikit.min.css +0 -0
- /package/{public → core/workspace-app/public}/vendor/uikit.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/bookmark-outlined.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/headset.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/menu.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/pause.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/play.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/share.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-off.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-on.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/stop.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/addon-fit.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/addon-unicode11.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/addon-web-links.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/xterm.css +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/xterm.js +0 -0
- /package/{rag.js → core/workspace-app/rag.js} +0 -0
- /package/{reader.js → core/workspace-app/reader.js} +0 -0
- /package/{repo-blobs.js → core/workspace-app/repo-blobs.js} +0 -0
- /package/{report-pdf.js → core/workspace-app/report-pdf.js} +0 -0
- /package/{row-layout.js → core/workspace-app/row-layout.js} +0 -0
- /package/{screenrc → core/workspace-app/screenrc} +0 -0
- /package/{screens.js → core/workspace-app/screens.js} +0 -0
- /package/{scripts → core/workspace-app/scripts}/code-server-start.sh +0 -0
- /package/{scripts → core/workspace-app/scripts}/images-claude-finish.js +0 -0
- /package/{scripts → core/workspace-app/scripts}/screen-host.sh +0 -0
- /package/{scripts → core/workspace-app/scripts}/screen-runner.js +0 -0
- /package/{scripts → core/workspace-app/scripts}/screen-then.js +0 -0
- /package/{scripts → core/workspace-app/scripts}/update.sh +0 -0
- /package/{settings-file.js → core/workspace-app/settings-file.js} +0 -0
- /package/{speech.js → core/workspace-app/speech.js} +0 -0
- /package/{tab-modal.js → core/workspace-app/tab-modal.js} +0 -0
- /package/{test-reports.js → core/workspace-app/test-reports.js} +0 -0
- /package/{themes.js → core/workspace-app/themes.js} +0 -0
- /package/{transcripts.js → core/workspace-app/transcripts.js} +0 -0
- /package/{urls.js → core/workspace-app/urls.js} +0 -0
- /package/{validate.js → core/workspace-app/validate.js} +0 -0
- /package/{version-check.js → core/workspace-app/version-check.js} +0 -0
- /package/{video-edit.js → core/workspace-app/video-edit.js} +0 -0
- /package/{waiting.js → core/workspace-app/waiting.js} +0 -0
- /package/{workspace-card-tools.js → core/workspace-app/workspace-card-tools.js} +0 -0
- /package/{workspace-delete.js → core/workspace-app/workspace-delete.js} +0 -0
- /package/{workspace-types.js → core/workspace-app/workspace-types.js} +0 -0
- /package/{workspaces.js → core/workspace-app/workspaces.js} +0 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# composer install, once more if it fails: the first install in a fresh project can fail on a git cache hiccup
|
|
4
|
+
# ("<commit> is gone") and pass straight away on the second try. A real dependency problem fails both times.
|
|
5
|
+
function composer_install_retry() {
|
|
6
|
+
ddev composer install --no-interaction && return 0 ;
|
|
7
|
+
echo "composer install failed once, trying it again before giving up." ;
|
|
8
|
+
ddev composer install --no-interaction ;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function build_distribution() {
|
|
12
|
+
# Include distribution functions.
|
|
13
|
+
source ${WORKSPACE_SCRIPTS}/functions/fun-distribution-${distribution_name}.sh || exit 1 ;
|
|
14
|
+
|
|
15
|
+
base_url="https://${PROJECT_NAME}.ddev.site";
|
|
16
|
+
|
|
17
|
+
# Change directory to the workspace for this full operation.
|
|
18
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
19
|
+
|
|
20
|
+
if [ ! "${SKIP_DROP_DATABASE}" == 'yes' ] ; then
|
|
21
|
+
drop_database;
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
if [ -d "${PROJECT_NAME}" ]; then
|
|
25
|
+
rm -rf ${PROJECT_NAME}
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Create the project folder and bring up its DDEV environment first, so
|
|
29
|
+
# composer/drush run inside the project's own containers from here on.
|
|
30
|
+
mkdir -p ${PROJECT_NAME} ;
|
|
31
|
+
cd ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME} ;
|
|
32
|
+
|
|
33
|
+
# Which PHP the project gets, from the most specific answer available:
|
|
34
|
+
#
|
|
35
|
+
# 1. --php-version, if whoever ran this asked for one;
|
|
36
|
+
# 2. site_php_version, if the BUILDER declares one its core requires — Drupal 12 does, its
|
|
37
|
+
# composer.json says `php: >=8.5.0` and DDEV's default is 8.4, so without it the build gets as
|
|
38
|
+
# far as composer and stops on a platform requirement, which reads as the builder being broken
|
|
39
|
+
# rather than as a version being needed;
|
|
40
|
+
# 3. nothing, and DDEV picks its own default exactly as before.
|
|
41
|
+
#
|
|
42
|
+
# The flag wins over the builder's declaration on purpose: a builder says what its core NEEDS, and
|
|
43
|
+
# somebody passing --php-version is saying what they want to build on — testing an older PHP against
|
|
44
|
+
# a core that allows it is the whole reason the flag exists. A version the core cannot take fails in
|
|
45
|
+
# composer with a platform requirement that names it, which is a better answer than silently
|
|
46
|
+
# ignoring what was asked for.
|
|
47
|
+
php_version="${PHP_VERSION:-${site_php_version:-}}" ;
|
|
48
|
+
ddev config --project-type=drupal --docroot=${distribution_webroot} --project-name=${PROJECT_NAME} \
|
|
49
|
+
${php_version:+--php-version=${php_version}} --nodejs-version=$(ddev_nodejs_version) --auto ;
|
|
50
|
+
ddev_telemetry_off ;
|
|
51
|
+
ddev_up start ;
|
|
52
|
+
|
|
53
|
+
# Capture the db type actually running before composer create-project can change it,
|
|
54
|
+
# so the re-align below restores it instead of a stale hardcoded version.
|
|
55
|
+
provisioned_db_type=$(grep -A2 '^database:' .ddev/config.yaml | grep 'version:' | awk '{print $2}' | tr -d '"') ;
|
|
56
|
+
|
|
57
|
+
# --dev builds the development branch instead of the pinned release. Each
|
|
58
|
+
# builder that supports it declares site_version_dev next to site_version;
|
|
59
|
+
# asking for --dev on one that does not is an error, not a silent fallback.
|
|
60
|
+
if [ "${DEV}" == 'yes' ] ; then
|
|
61
|
+
if [ -z "${site_version_dev}" ] ; then
|
|
62
|
+
echo "--dev is not supported by this builder (no development branch declared)." ;
|
|
63
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
64
|
+
return 1 ;
|
|
65
|
+
fi
|
|
66
|
+
site_version="${site_version_dev}" ;
|
|
67
|
+
# A development branch's dependencies are development branches too.
|
|
68
|
+
dev_stability="--stability dev" ;
|
|
69
|
+
elif [ -n "${site_version_stability}" ] ; then
|
|
70
|
+
# A major that has not reached a stable release yet. Composer's default minimum is
|
|
71
|
+
# `stable`, so a caret constraint that today matches only an alpha resolves to
|
|
72
|
+
# NOTHING and the build stops with "could not find a version in a stable enough
|
|
73
|
+
# version" — which is how a latest-per-major builder looks broken on the day the
|
|
74
|
+
# major it tracks opens. A declared floor says how far down this builder is willing
|
|
75
|
+
# to go, and it needs no edit later: composer still prefers the highest match, so
|
|
76
|
+
# the first stable release wins over every pre-release of it on its own.
|
|
77
|
+
dev_stability="--stability ${site_version_stability}" ;
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# A failed create-project (e.g. an upstream patch no longer applying) must stop the
|
|
81
|
+
# build here — every step after this assumes a real vendor/autoload.php exists.
|
|
82
|
+
#
|
|
83
|
+
# A release line may need two things before its first install, or composer cannot resolve it at all:
|
|
84
|
+
# site_composer_requires root requirements, e.g. an alias. a Drupal 10 line may ask for a package
|
|
85
|
+
# that moved to Drupal 11, so the line aliases the last Drupal 10 release.
|
|
86
|
+
# site_patches_ignore "<package> <patch-url>" pairs that webship/patches declares and the release
|
|
87
|
+
# already contains, so applying the patch fails (patches-ignore, added to composer.json).
|
|
88
|
+
# Both are declared by the builder as bash arrays. A builder that declares neither installs in one step as before.
|
|
89
|
+
site_requires=("${site_composer_requires[@]}") ;
|
|
90
|
+
site_ignores=("${site_patches_ignore[@]}") ;
|
|
91
|
+
if [ -n "${site_requires[0]:-}${site_ignores[0]:-}" ] ; then
|
|
92
|
+
if ! ddev composer create-project ${distribution_project_template}:${site_version} . --no-interaction --no-install --no-scripts ${dev_stability:-} ; then
|
|
93
|
+
echo "composer create-project failed for ${distribution_project_template}:${site_version} — aborting, not installing." ;
|
|
94
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
95
|
+
return 1 ;
|
|
96
|
+
fi
|
|
97
|
+
if [ -n "${site_requires[0]:-}" ] ; then
|
|
98
|
+
ddev composer require "${site_requires[@]}" --no-update --no-interaction || { cd ${WORKSPACE_ROOT}/${doc_name}; return 1 ; } ;
|
|
99
|
+
fi
|
|
100
|
+
if [ -n "${site_ignores[0]:-}" ] ; then
|
|
101
|
+
patches_ignore_json=$(python3 -c 'import sys, json; d = {}; [d.setdefault("webship/patches", {}).setdefault(a.split(" ", 1)[0], []).append(a.split(" ", 1)[1]) for a in sys.argv[1:]]; print(json.dumps(d))' "${site_ignores[@]}") ;
|
|
102
|
+
ddev composer config --json extra.patches-ignore "${patches_ignore_json}" || { cd ${WORKSPACE_ROOT}/${doc_name}; return 1 ; } ;
|
|
103
|
+
fi
|
|
104
|
+
if ! composer_install_retry || ! ddev composer run-script post-create-project-cmd ; then
|
|
105
|
+
echo "composer could not install ${distribution_project_template}:${site_version} — aborting, not installing." ;
|
|
106
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
107
|
+
return 1 ;
|
|
108
|
+
fi
|
|
109
|
+
elif ! ddev composer create-project ${distribution_project_template}:${site_version} . --no-interaction ${dev_stability:-} ; then
|
|
110
|
+
# When the project reached the install step, composer.json is already in place: install once more.
|
|
111
|
+
if [ -f composer.json ] && composer_install_retry && ddev composer run-script post-create-project-cmd ; then
|
|
112
|
+
echo "composer create-project needed a second install, which worked." ;
|
|
113
|
+
else
|
|
114
|
+
echo "composer create-project failed for ${distribution_project_template}:${site_version} — aborting, not installing." ;
|
|
115
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
116
|
+
return 1 ;
|
|
117
|
+
fi
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
# A failed create-project (an upstream patch that no longer applies, a yanked tag) has to stop
|
|
121
|
+
# the build here. Every step below assumes a real vendor/autoload.php, so carrying on used to
|
|
122
|
+
# mean "installing" nothing and then announcing success.
|
|
123
|
+
if ! ddev composer create-project ${distribution_project_template}:${site_version} . --no-interaction ; then
|
|
124
|
+
echo "composer create-project failed for ${distribution_project_template}:${site_version} — aborting, nothing was installed." ;
|
|
125
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
126
|
+
return 1 ;
|
|
127
|
+
fi
|
|
128
|
+
|
|
129
|
+
# Some project templates ship their own .ddev config that
|
|
130
|
+
# changes the docroot/database/webimage packages after our initial ddev
|
|
131
|
+
# config. Re-align: keep the database type we already provisioned, drop
|
|
132
|
+
# optional apt extras (avoids third-party repo key failures), keep our Node.js, and restart
|
|
133
|
+
# so the webserver serves the template's real docroot.
|
|
134
|
+
ddev config --database=mariadb:${provisioned_db_type} --webimage-extra-packages="" --nodejs-version=$(ddev_nodejs_version) ;
|
|
135
|
+
ddev_telemetry_off ;
|
|
136
|
+
ddev_up restart ;
|
|
137
|
+
|
|
138
|
+
# The template may define a different webroot than the distribution config
|
|
139
|
+
# assumed — trust the project's own .ddev config from here on.
|
|
140
|
+
actual_docroot=$(grep '^docroot:' .ddev/config.yaml | awk '{print $2}') ;
|
|
141
|
+
if [ -n "${actual_docroot}" ] && [ "${actual_docroot}" != "${distribution_webroot}" ]; then
|
|
142
|
+
echo "Template webroot is '${actual_docroot}' (distribution config said '${distribution_webroot}') — using the template's." ;
|
|
143
|
+
distribution_webroot=${actual_docroot} ;
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
# Change the minimum stablility to dev for development
|
|
147
|
+
ddev composer config minimum-stability dev ;
|
|
148
|
+
|
|
149
|
+
# Require all custom required packages.
|
|
150
|
+
echo "Require all custom required packages.";
|
|
151
|
+
# argparse.sh emits an nargs='+' option as a bash ARRAY, so a plain ${REQUIRE} is only its
|
|
152
|
+
# FIRST element: `--require drupal/token drupal/ctools` used to install token and drop ctools
|
|
153
|
+
# without a word. [0] still reads the sentinel when the default scalar is in place.
|
|
154
|
+
if [ "${REQUIRE[0]}" == '_none_' ] ; then
|
|
155
|
+
echo "No extra composer required." ;
|
|
156
|
+
else
|
|
157
|
+
ddev composer require ${REQUIRE[*]} ;
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
## Add default settings file before starting the install.
|
|
161
|
+
if [ ! "$SKIP_SET_DEFULT_SETTINGS" == 'yes' ] ; then
|
|
162
|
+
set_default_settings ;
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
## Install the site.
|
|
166
|
+
if [ "$INSTALL" == 'yes' ] ; then
|
|
167
|
+
echo "Install the site";
|
|
168
|
+
|
|
169
|
+
# Add Drush if it was not in the system.
|
|
170
|
+
add_drush ;
|
|
171
|
+
|
|
172
|
+
# Change directory to the webroot.
|
|
173
|
+
cd ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME}/${distribution_webroot};
|
|
174
|
+
|
|
175
|
+
# Install distribution with Drush. A failed install stops the build: every step after it assumes an
|
|
176
|
+
# installed site, and carrying on printed "has been installed" over a half-installed one.
|
|
177
|
+
if ! install_${distribution_name}_with_drush ; then
|
|
178
|
+
echo "The install of ${doc_name} ${PROJECT_NAME} failed — drush site:install did not finish, so the site is not usable." ;
|
|
179
|
+
echo "The project is kept for inspection: ${base_url} (ddev logs, ddev drush status)." ;
|
|
180
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
181
|
+
return 1 ;
|
|
182
|
+
fi
|
|
183
|
+
# Enable extra components;
|
|
184
|
+
enable_${distribution_name}_extra_components ;
|
|
185
|
+
# Set Aggrigation off and error level all
|
|
186
|
+
drush_set_debug_on;
|
|
187
|
+
# Cache Rebuilding ...
|
|
188
|
+
drush_cr;
|
|
189
|
+
|
|
190
|
+
# A step above can leave the site installed but broken (a module that fails half way). Say so here,
|
|
191
|
+
# instead of announcing an installed site that answers with a 500.
|
|
192
|
+
if ! ddev drush status --field=bootstrap 2>/dev/null | grep -q Successful ; then
|
|
193
|
+
echo "${doc_name} ${PROJECT_NAME} was installed, but Drupal does not bootstrap: a step above failed half way." ;
|
|
194
|
+
echo "Read the 'Failed to run' lines above, or run: ddev drush status ; ddev logs." ;
|
|
195
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
196
|
+
return 1 ;
|
|
197
|
+
fi
|
|
198
|
+
|
|
199
|
+
if [ "${ENABLE[0]}" == '_none_' ] ; then
|
|
200
|
+
echo "No extra selected modules to enable." ;
|
|
201
|
+
else
|
|
202
|
+
ddev drush pm:enable ${ENABLE[*]} --yes;
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
## Add default set of users.
|
|
206
|
+
if [ "$ADD_USERS" == 'yes' ] ; then
|
|
207
|
+
add_users ;
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# Send a notification.
|
|
211
|
+
echo "${doc_name} ${PROJECT_NAME} has been installed!!!!";
|
|
212
|
+
echo "Go to ${base_url}";
|
|
213
|
+
|
|
214
|
+
else
|
|
215
|
+
echo "${doc_name} ${PROJECT_NAME} is ready to install!!!!";
|
|
216
|
+
echo "Go to ${base_url}";
|
|
217
|
+
fi
|
|
218
|
+
|
|
219
|
+
# --launch opens the site in the browser: the installed site, or the browser
|
|
220
|
+
# installer when --install was not asked for.
|
|
221
|
+
if [ "${LAUNCH}" == 'yes' ] ; then
|
|
222
|
+
ddev launch ;
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
226
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Build a Drupal CMS site from a site template, and install it.
|
|
4
|
+
#
|
|
5
|
+
# A site template is a `Site` recipe (https://new.drupal.org/browse/site-templates).
|
|
6
|
+
# The installer normally asks which one to use; `drush site:install` answers that
|
|
7
|
+
# step non-interactively through the installer form:
|
|
8
|
+
#
|
|
9
|
+
# installer_site_template_form.add_ons=<recipe directory name>
|
|
10
|
+
#
|
|
11
|
+
# The recipe directory name is the package name without the `drupal/` vendor
|
|
12
|
+
# prefix, which is where composer puts a `drupal-recipe` package. The question
|
|
13
|
+
# comes from the `drupal_cms_installer` profile; any distribution that asks it
|
|
14
|
+
# with the same form id and the same `add_ons` element works too — set
|
|
15
|
+
# `installer_profile` to pick which one.
|
|
16
|
+
#
|
|
17
|
+
# The calling cmd-*.sh sets: site_template_name, site_template_package and,
|
|
18
|
+
# optionally, site_template_title and installer_profile.
|
|
19
|
+
function build_site_template() {
|
|
20
|
+
|
|
21
|
+
# Which install profile asks the site-template question.
|
|
22
|
+
installer_profile="${installer_profile:-drupal_cms_installer}";
|
|
23
|
+
|
|
24
|
+
# No flags: the latest release of the template, and the PHP version DDEV chooses.
|
|
25
|
+
SITE_TEMPLATE_VERSION="";
|
|
26
|
+
PHP_VERSION="${PHP_VERSION:-8.3}";
|
|
27
|
+
|
|
28
|
+
base_url="https://${PROJECT_NAME}.ddev.site";
|
|
29
|
+
hub_url="https://${PROJECT_NAME}.${doc_name}.workspace.ddev.site";
|
|
30
|
+
|
|
31
|
+
# Change directory to the workspace for this full operation.
|
|
32
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
33
|
+
|
|
34
|
+
drop_database;
|
|
35
|
+
|
|
36
|
+
if [ -d "${PROJECT_NAME}" ]; then
|
|
37
|
+
rm -rf ${PROJECT_NAME}
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
mkdir -p ${PROJECT_NAME} ;
|
|
41
|
+
cd ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME} ;
|
|
42
|
+
|
|
43
|
+
ddev config --project-type=drupal11 --docroot=${distribution_webroot} --php-version=${PHP_VERSION} --nodejs-version=$(ddev_nodejs_version) --project-name=${PROJECT_NAME} --auto ;
|
|
44
|
+
ddev start ;
|
|
45
|
+
|
|
46
|
+
# Capture the database version DDEV actually provisioned, before composer create-project can
|
|
47
|
+
# bring its own .ddev config in and change it.
|
|
48
|
+
provisioned_db_type=$(grep -A2 '^database:' .ddev/config.yaml | grep 'version:' | awk '{print $2}' | tr -d '"') ;
|
|
49
|
+
|
|
50
|
+
if ! ddev composer create-project ${distribution_project_template} . --no-interaction ; then
|
|
51
|
+
echo "composer create-project failed for ${distribution_project_template} — aborting, nothing was installed." ;
|
|
52
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
53
|
+
return 1 ;
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Keep the database we provisioned and drop optional apt extras, in case the
|
|
57
|
+
# project template shipped its own .ddev config.
|
|
58
|
+
ddev config --database=mariadb:${provisioned_db_type} --webimage-extra-packages="" --php-version=${PHP_VERSION} --nodejs-version=$(ddev_nodejs_version) ;
|
|
59
|
+
ddev restart ;
|
|
60
|
+
|
|
61
|
+
# Add the site template itself.
|
|
62
|
+
if [ -n "${SITE_TEMPLATE_VERSION}" ]; then
|
|
63
|
+
ddev composer require "${site_template_package}:${SITE_TEMPLATE_VERSION}" --no-interaction;
|
|
64
|
+
else
|
|
65
|
+
ddev composer require "${site_template_package}" --no-interaction;
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
echo "Install ${distribution_title:-Drupal CMS} with the ${site_template_title:-${site_template_name}} site template.";
|
|
69
|
+
# Stop here when the install fails: a site template that throws part way
|
|
70
|
+
# through leaves a half-installed site (config applied, default content
|
|
71
|
+
# never imported), and running the user/debug steps on top of that hides
|
|
72
|
+
# which step actually broke.
|
|
73
|
+
if ! ddev drush site:install ${installer_profile} --yes \
|
|
74
|
+
installer_site_template_form.add_ons=${site_template_name} \
|
|
75
|
+
--site-name="${site_template_title:-${site_template_name}}" \
|
|
76
|
+
--account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" \
|
|
77
|
+
--locale="en" ; then
|
|
78
|
+
echo "" ;
|
|
79
|
+
echo "The ${site_template_title:-${site_template_name}} install failed — the site is half-installed." ;
|
|
80
|
+
echo "Read the error above: a site template that pins a stale Canvas component_version," ;
|
|
81
|
+
echo "or ships config another module already provides, fails at the recipe step." ;
|
|
82
|
+
echo "To take the same steps by hand, use ${base_url}/core/install.php and pick the template there." ;
|
|
83
|
+
cd ${WORKSPACE_ROOT}/${doc_name} ;
|
|
84
|
+
return 1 ;
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Set aggregation off and the error level to all, then rebuild caches.
|
|
88
|
+
drush_set_debug_on;
|
|
89
|
+
drush_cr;
|
|
90
|
+
|
|
91
|
+
## Add the default set of users.
|
|
92
|
+
if [ "${ADD_USERS}" == 'yes' ] ; then
|
|
93
|
+
add_users ;
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
echo "";
|
|
97
|
+
echo "*---------------------------------------------------------------------*";
|
|
98
|
+
echo " ${site_template_title:-${site_template_name}} is ready:";
|
|
99
|
+
echo " ${hub_url}";
|
|
100
|
+
echo " ${base_url}";
|
|
101
|
+
echo "*---------------------------------------------------------------------*";
|
|
102
|
+
|
|
103
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
104
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Build the Webships API stack (Drupal 11.4, PHP 8.4):
|
|
4
|
+
#
|
|
5
|
+
# build_webships_project drupal/webships_project, installed by the Webships
|
|
6
|
+
# installer (`drush site:install webships`) with the
|
|
7
|
+
# chosen API site template.
|
|
8
|
+
# build_webships_site_template one API site-template recipe on
|
|
9
|
+
# drupal/recommended-project 11.4.x, installed with
|
|
10
|
+
# `drush site:install <recipe directory>`.
|
|
11
|
+
#
|
|
12
|
+
# The calling cmd-*.sh sets distribution_* and site_version, and for a recipe build
|
|
13
|
+
# site_template_name, site_template_title and site_template_package.
|
|
14
|
+
#
|
|
15
|
+
# Two things differ from the website stack and are easy to get wrong:
|
|
16
|
+
#
|
|
17
|
+
# 1. The installer profile is on 3.0.x while the project template is on 1.0.x. The
|
|
18
|
+
# version a builder sets is the PROJECT TEMPLATE's, because that is what
|
|
19
|
+
# `composer create-project` receives. The profile comes in through the template's
|
|
20
|
+
# own `webship/webships: ^3` constraint.
|
|
21
|
+
# 2. The API documentation asset library only installs from a root project package,
|
|
22
|
+
# so it is the project template's job. A recipe build has no Swagger assets, and
|
|
23
|
+
# that is expected rather than a fault.
|
|
24
|
+
|
|
25
|
+
webships_php_version="8.4";
|
|
26
|
+
webships_core_version="11.4.x-dev";
|
|
27
|
+
|
|
28
|
+
# A clean DDEV project for PROJECT_NAME in this workspace, with the codebase of
|
|
29
|
+
# `$1` (a composer project template with its version) in it.
|
|
30
|
+
function webships_create_project() {
|
|
31
|
+
base_url="https://${PROJECT_NAME}.ddev.site";
|
|
32
|
+
|
|
33
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
34
|
+
drop_database;
|
|
35
|
+
if [ -d "${PROJECT_NAME}" ]; then
|
|
36
|
+
rm -rf ${PROJECT_NAME}
|
|
37
|
+
fi
|
|
38
|
+
mkdir -p ${PROJECT_NAME} ;
|
|
39
|
+
cd ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME} ;
|
|
40
|
+
|
|
41
|
+
ddev config --project-type=drupal --docroot=${distribution_webroot} --php-version=${PHP_VERSION:-${webships_php_version}} --nodejs-version=$(ddev_nodejs_version) --project-name=${PROJECT_NAME} --auto ;
|
|
42
|
+
ddev start -y ;
|
|
43
|
+
|
|
44
|
+
if ! ddev composer create-project "$1" . --no-interaction ; then
|
|
45
|
+
echo "composer create-project failed for $1 — aborting, nothing was installed." ;
|
|
46
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
47
|
+
return 1 ;
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# The API packages ship stable releases and development releases side by side;
|
|
51
|
+
# a build of the development line needs dev to be acceptable.
|
|
52
|
+
ddev composer config minimum-stability dev ;
|
|
53
|
+
ddev composer config prefer-stable true ;
|
|
54
|
+
|
|
55
|
+
# Keep the API site templates as recipes, the way the project template does:
|
|
56
|
+
# the installer finds them in recipes/ without Composer unpacking them.
|
|
57
|
+
ddev composer config --json --merge extra.drupal-recipe-unpack.ignore '["drupal/webships_starter", "drupal/webapi_starter"]' ;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# The shared steps after a successful install.
|
|
61
|
+
function webships_after_install() {
|
|
62
|
+
drush_set_debug_on;
|
|
63
|
+
drush_cr;
|
|
64
|
+
|
|
65
|
+
if [ "${ADD_USERS}" == 'yes' ] ; then
|
|
66
|
+
add_users ;
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
echo "";
|
|
70
|
+
echo "*---------------------------------------------------------------------*";
|
|
71
|
+
echo " ${PROJECT_NAME} is ready: ${base_url}";
|
|
72
|
+
echo " The API is served from ${base_url}/api";
|
|
73
|
+
echo " The API documentation is at ${base_url}/api-docs";
|
|
74
|
+
echo "*---------------------------------------------------------------------*";
|
|
75
|
+
|
|
76
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# Report what the built site actually serves, rather than assuming the recipe applied.
|
|
80
|
+
function webships_report_api_state() {
|
|
81
|
+
echo "";
|
|
82
|
+
echo "JSON:API read-only setting:";
|
|
83
|
+
ddev drush config:get jsonapi.settings read_only 2>/dev/null || echo " (jsonapi.settings not readable)" ;
|
|
84
|
+
echo "Themes:";
|
|
85
|
+
ddev drush config:get system.theme 2>/dev/null || echo " (system.theme not readable)" ;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
# drupal/webships_project installed by the Webships installer with --template.
|
|
89
|
+
function build_webships_project() {
|
|
90
|
+
local template="${TEMPLATE:-webships_starter}" ;
|
|
91
|
+
|
|
92
|
+
webships_create_project "${distribution_project_template}:${site_version}" || return 1 ;
|
|
93
|
+
|
|
94
|
+
# Add whatever the published project template does not require yet, so a build
|
|
95
|
+
# of an older tag still gets both API site templates.
|
|
96
|
+
local require_block missing=() ;
|
|
97
|
+
require_block=$(sed -n '/"require": {/,/}/p' composer.json) ;
|
|
98
|
+
for package in "drupal/webships_starter:^1" "drupal/webapi_starter:^1" ; do
|
|
99
|
+
if ! echo "${require_block}" | grep -q "\"${package%%:*}\"" ; then
|
|
100
|
+
echo "${distribution_project_template} does not require ${package%%:*} yet — adding it." ;
|
|
101
|
+
missing+=("${package}") ;
|
|
102
|
+
fi
|
|
103
|
+
done
|
|
104
|
+
|
|
105
|
+
local composer_ok=1 ;
|
|
106
|
+
if [ ${#missing[@]} -gt 0 ] ; then
|
|
107
|
+
ddev composer require --no-update --no-interaction "${missing[@]}" || composer_ok=0 ;
|
|
108
|
+
if [ ${composer_ok} -eq 1 ] ; then
|
|
109
|
+
ddev composer update -W --no-interaction || composer_ok=0 ;
|
|
110
|
+
fi
|
|
111
|
+
fi
|
|
112
|
+
if [ ${composer_ok} -eq 0 ] ; then
|
|
113
|
+
echo "composer failed — aborting before the install." ;
|
|
114
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
115
|
+
return 1 ;
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
set_default_settings ;
|
|
119
|
+
|
|
120
|
+
echo "Install ${distribution_title} with the Webships installer and the ${template} site template.";
|
|
121
|
+
if ! ddev drush site:install webships --yes \
|
|
122
|
+
installer_site_template_form.add_ons=${template} \
|
|
123
|
+
--site-name="${distribution_title}" \
|
|
124
|
+
--account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" \
|
|
125
|
+
--locale="en" ; then
|
|
126
|
+
echo "" ;
|
|
127
|
+
echo "The ${template} install failed — read the error above. The codebase is kept: ${base_url}/core/install.php" ;
|
|
128
|
+
cd ${WORKSPACE_ROOT}/${doc_name} ;
|
|
129
|
+
return 1 ;
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
webships_report_api_state ;
|
|
133
|
+
webships_after_install ;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
# One API site-template recipe on a plain Drupal 11.4.x recommended project.
|
|
137
|
+
function build_webships_site_template() {
|
|
138
|
+
webships_create_project "drupal/recommended-project:${webships_core_version}" || return 1 ;
|
|
139
|
+
|
|
140
|
+
if ! ddev composer require -W --no-interaction "drush/drush:^13" "${site_template_package}:${site_version}" ; then
|
|
141
|
+
echo "composer require ${site_template_package}:${site_version} failed — aborting before the install." ;
|
|
142
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
143
|
+
return 1 ;
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
set_default_settings ;
|
|
147
|
+
|
|
148
|
+
echo "Install Drupal ${webships_core_version} with the ${site_template_title} recipe.";
|
|
149
|
+
if ! ddev drush site:install /var/www/html/recipes/${site_template_name} --yes \
|
|
150
|
+
--site-name="${site_template_title}" \
|
|
151
|
+
--account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" \
|
|
152
|
+
--locale="en" ; then
|
|
153
|
+
echo "" ;
|
|
154
|
+
echo "The ${site_template_title} install failed — read the error above." ;
|
|
155
|
+
cd ${WORKSPACE_ROOT}/${doc_name} ;
|
|
156
|
+
return 1 ;
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
webships_report_api_state ;
|
|
160
|
+
webships_after_install ;
|
|
161
|
+
}
|