@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,199 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Build the Website stack (Drupal 11.4, PHP 8.4):
|
|
4
|
+
#
|
|
5
|
+
# build_website_project drupal/website, installed by the Webship installer
|
|
6
|
+
# (`drush site:install webship`) with the chosen site template.
|
|
7
|
+
# build_website_site_template one site-template recipe on drupal/recommended-project 11.4.x,
|
|
8
|
+
# installed with `drush site:install <recipe directory>`.
|
|
9
|
+
#
|
|
10
|
+
# The calling cmd-*.sh sets distribution_* and site_version, and for a recipe build
|
|
11
|
+
# site_template_name, site_template_title and site_template_package.
|
|
12
|
+
|
|
13
|
+
website_php_version="8.4";
|
|
14
|
+
website_core_version="11.4.x-dev";
|
|
15
|
+
|
|
16
|
+
# A clean DDEV project for PROJECT_NAME in this workspace, with the codebase of
|
|
17
|
+
# `$1` (a composer project template with its version) in it.
|
|
18
|
+
function website_create_project() {
|
|
19
|
+
base_url="https://${PROJECT_NAME}.ddev.site";
|
|
20
|
+
|
|
21
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
22
|
+
drop_database;
|
|
23
|
+
if [ -d "${PROJECT_NAME}" ]; then
|
|
24
|
+
rm -rf ${PROJECT_NAME}
|
|
25
|
+
fi
|
|
26
|
+
mkdir -p ${PROJECT_NAME} ;
|
|
27
|
+
cd ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME} ;
|
|
28
|
+
|
|
29
|
+
ddev config --project-type=drupal --docroot=${distribution_webroot} --php-version=${PHP_VERSION:-${website_php_version}} --nodejs-version=$(ddev_nodejs_version) --project-name=${PROJECT_NAME} --auto ;
|
|
30
|
+
ddev start -y ;
|
|
31
|
+
|
|
32
|
+
if ! ddev composer create-project "$1" . --no-interaction ; then
|
|
33
|
+
echo "composer create-project failed for $1 — aborting, nothing was installed." ;
|
|
34
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
35
|
+
return 1 ;
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# The web* packages and the site templates only have dev releases for now.
|
|
39
|
+
ddev composer config minimum-stability dev ;
|
|
40
|
+
ddev composer config prefer-stable true ;
|
|
41
|
+
|
|
42
|
+
# Keep the site templates as recipes, like drupal/website does: unpacking them
|
|
43
|
+
# into the root composer.json fails on aliased dev branches (the pending fixes).
|
|
44
|
+
ddev composer config --json --merge extra.drupal-recipe-unpack.ignore '["drupal/website_starter", "drupal/webship_starter", "drupal/webship_portal"]' ;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# -----------------------------------------------------------------------------
|
|
48
|
+
# @todo Remove this block (and --with-pending-fixes) once these are merged into
|
|
49
|
+
# 12.0.x — the builds work without the flag from then on:
|
|
50
|
+
# - webblog MR !4: https://git.drupalcode.org/project/webblog/-/merge_requests/4
|
|
51
|
+
# - webreleases MR !5: https://git.drupalcode.org/project/webreleases/-/merge_requests/5
|
|
52
|
+
#
|
|
53
|
+
# Pins the issue-fork branches with --with-pending-fixes. `composer config
|
|
54
|
+
# repositories.<name>` adds a repository ahead of packages.drupal.org, so the
|
|
55
|
+
# fork wins. Arguments: the pins to add — webblog, webreleases.
|
|
56
|
+
function website_add_pending_fixes() {
|
|
57
|
+
if [ ! "${WITH_PENDING_FIXES}" == 'yes' ] ; then
|
|
58
|
+
return 0 ;
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
local pins=() ;
|
|
62
|
+
for fix in "$@" ; do
|
|
63
|
+
case "${fix}" in
|
|
64
|
+
webship)
|
|
65
|
+
# drupal/webship has no 12.0.x-dev on packages.drupal.org yet
|
|
66
|
+
# ("Package drupal/webship not found"): take the installer from its 12.0.x branch.
|
|
67
|
+
# The repository's default branch (11.0.x) names the package webship/webship,
|
|
68
|
+
# and a vcs repository takes its package name from the default branch.
|
|
69
|
+
echo "Pending fix: webship/webship (the Webship installer) from its 12.0.x branch." ;
|
|
70
|
+
ddev composer config repositories.webship-12 vcs https://git.drupalcode.org/project/webship.git ;
|
|
71
|
+
pins+=("webship/webship:12.0.x-dev") ;
|
|
72
|
+
;;
|
|
73
|
+
webblog)
|
|
74
|
+
echo "Pending fix: webblog from issue/webblog-3591554 (3591554-display-builder)." ;
|
|
75
|
+
ddev composer config repositories.webblog-3591554 vcs https://git.drupalcode.org/issue/webblog-3591554.git ;
|
|
76
|
+
pins+=("drupal/webblog:dev-3591554-display-builder as 12.0.x-dev") ;
|
|
77
|
+
;;
|
|
78
|
+
webreleases)
|
|
79
|
+
echo "Pending fix: webreleases from issue/webreleases-3591672 (3591672-display-builder)." ;
|
|
80
|
+
ddev composer config repositories.webreleases-3591672 vcs https://git.drupalcode.org/issue/webreleases-3591672.git ;
|
|
81
|
+
pins+=("drupal/webreleases:dev-3591672-display-builder as 12.0.x-dev") ;
|
|
82
|
+
;;
|
|
83
|
+
esac
|
|
84
|
+
done
|
|
85
|
+
|
|
86
|
+
if [ ${#pins[@]} -gt 0 ] ; then
|
|
87
|
+
ddev composer require --no-update "${pins[@]}" ;
|
|
88
|
+
fi
|
|
89
|
+
}
|
|
90
|
+
# -----------------------------------------------------------------------------
|
|
91
|
+
|
|
92
|
+
# The pending fixes a site template needs: webship_starter and webship_portal
|
|
93
|
+
# bring webreleases on top of the Website Starter's webblog.
|
|
94
|
+
function website_pending_fixes_for() {
|
|
95
|
+
case "$1" in
|
|
96
|
+
webship_starter|webship_portal) echo "webblog webreleases" ;;
|
|
97
|
+
*) echo "webblog" ;;
|
|
98
|
+
esac
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
# Install the site, then the shared after-install steps.
|
|
102
|
+
function website_after_install() {
|
|
103
|
+
drush_set_debug_on;
|
|
104
|
+
drush_cr;
|
|
105
|
+
|
|
106
|
+
if [ "${ADD_USERS}" == 'yes' ] ; then
|
|
107
|
+
add_users ;
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
echo "";
|
|
111
|
+
echo "*---------------------------------------------------------------------*";
|
|
112
|
+
echo " ${PROJECT_NAME} is ready: ${base_url}";
|
|
113
|
+
echo "*---------------------------------------------------------------------*";
|
|
114
|
+
|
|
115
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
# drupal/website installed by the Webship installer with --template.
|
|
119
|
+
function build_website_project() {
|
|
120
|
+
local template="${TEMPLATE:-website_starter}" ;
|
|
121
|
+
|
|
122
|
+
website_create_project "${distribution_project_template}:${site_version}" || return 1 ;
|
|
123
|
+
|
|
124
|
+
# The Website project requires the Webship installer and the three site
|
|
125
|
+
# templates. Add whatever the published template does not require yet.
|
|
126
|
+
local require_block missing=() ;
|
|
127
|
+
require_block=$(sed -n '/"require": {/,/}/p' composer.json) ;
|
|
128
|
+
for package in "drupal/webship:12.0.x-dev" "drupal/website_starter:1.0.x-dev" "drupal/webship_starter:1.0.x-dev" "drupal/webship_portal:1.0.x-dev" ; do
|
|
129
|
+
# The installer is drupal/webship or webship/webship; the pending fixes pin the latter.
|
|
130
|
+
if [ "${package%%:*}" == "drupal/webship" ] && { [ "${WITH_PENDING_FIXES}" == 'yes' ] || echo "${require_block}" | grep -q '"webship/webship"' ; } ; then
|
|
131
|
+
continue ;
|
|
132
|
+
fi
|
|
133
|
+
if ! echo "${require_block}" | grep -q "\"${package%%:*}\"" ; then
|
|
134
|
+
echo "${distribution_project_template} does not require ${package%%:*} yet — adding it." ;
|
|
135
|
+
missing+=("${package}") ;
|
|
136
|
+
fi
|
|
137
|
+
done
|
|
138
|
+
|
|
139
|
+
# The codebase carries all three site templates, so it needs every pending fix.
|
|
140
|
+
website_add_pending_fixes webship $(website_pending_fixes_for webship_portal) ;
|
|
141
|
+
|
|
142
|
+
# Stage everything, then one full update, so no pin is held back by the lock file.
|
|
143
|
+
local composer_ok=1 ;
|
|
144
|
+
if [ ${#missing[@]} -gt 0 ] ; then
|
|
145
|
+
ddev composer require --no-update --no-interaction "${missing[@]}" || composer_ok=0 ;
|
|
146
|
+
fi
|
|
147
|
+
if [ ${composer_ok} -eq 1 ] && { [ ${#missing[@]} -gt 0 ] || [ "${WITH_PENDING_FIXES}" == 'yes' ] ; } ; then
|
|
148
|
+
ddev composer update -W --no-interaction || composer_ok=0 ;
|
|
149
|
+
fi
|
|
150
|
+
if [ ${composer_ok} -eq 0 ] ; then
|
|
151
|
+
echo "composer failed — aborting before the install." ;
|
|
152
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
153
|
+
return 1 ;
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
set_default_settings ;
|
|
157
|
+
|
|
158
|
+
echo "Install ${distribution_title} with the Webship installer and the ${template} site template.";
|
|
159
|
+
if ! ddev drush site:install webship --yes \
|
|
160
|
+
installer_site_template_form.add_ons=${template} \
|
|
161
|
+
--site-name="${distribution_title}" \
|
|
162
|
+
--account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" \
|
|
163
|
+
--locale="en" ; then
|
|
164
|
+
echo "" ;
|
|
165
|
+
echo "The ${template} install failed — read the error above. The codebase is kept: ${base_url}/core/install.php" ;
|
|
166
|
+
cd ${WORKSPACE_ROOT}/${doc_name} ;
|
|
167
|
+
return 1 ;
|
|
168
|
+
fi
|
|
169
|
+
|
|
170
|
+
website_after_install ;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
# One site-template recipe on a plain Drupal 11.4.x recommended project.
|
|
174
|
+
function build_website_site_template() {
|
|
175
|
+
website_create_project "drupal/recommended-project:${website_core_version}" || return 1 ;
|
|
176
|
+
|
|
177
|
+
website_add_pending_fixes $(website_pending_fixes_for ${site_template_name}) ;
|
|
178
|
+
|
|
179
|
+
if ! ddev composer require -W --no-interaction "drush/drush:^13" "${site_template_package}:${site_version}" ; then
|
|
180
|
+
echo "composer require ${site_template_package}:${site_version} failed — aborting before the install." ;
|
|
181
|
+
cd ${WORKSPACE_ROOT}/${doc_name};
|
|
182
|
+
return 1 ;
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
set_default_settings ;
|
|
186
|
+
|
|
187
|
+
echo "Install Drupal ${website_core_version} with the ${site_template_title} recipe.";
|
|
188
|
+
if ! ddev drush site:install /var/www/html/recipes/${site_template_name} --yes \
|
|
189
|
+
--site-name="${site_template_title}" \
|
|
190
|
+
--account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" \
|
|
191
|
+
--locale="en" ; then
|
|
192
|
+
echo "" ;
|
|
193
|
+
echo "The ${site_template_title} install failed — read the error above." ;
|
|
194
|
+
cd ${WORKSPACE_ROOT}/${doc_name} ;
|
|
195
|
+
return 1 ;
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
website_after_install ;
|
|
199
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Run the code-quality checks a package ALREADY declares.
|
|
4
|
+
#
|
|
5
|
+
# Nearly every package in this workspace carries its own quality scripts — `lint:js`, `lint:css`,
|
|
6
|
+
# `lint:yaml`, `spellcheck`, `phpcs`, `test:chromium` — and until now nothing ran them from one
|
|
7
|
+
# place. This verb reads a package's package.json, maps the names it happens to use onto a fixed set
|
|
8
|
+
# of canonical checks, and runs them. It never invents a command: every check is a script the
|
|
9
|
+
# package declared for itself.
|
|
10
|
+
#
|
|
11
|
+
# The map, the safety rule, the package manager and the dependency test all live in ONE place —
|
|
12
|
+
# core/scripts/libs/checks_plan.js — which the dashboard also requires for the caption under its
|
|
13
|
+
# Checks button. This file does not re-implement any of it; it asks for a plan and executes the rows
|
|
14
|
+
# the resolver marked `ready`. That is what stops the button and the command disagreeing.
|
|
15
|
+
#
|
|
16
|
+
# Everything runs inside DDEV. A site runs its scripts in its own web container. A PACKAGE has no
|
|
17
|
+
# DDEV project of its own, so it runs in the dashboard's container, which bind-mounts the whole
|
|
18
|
+
# workspace tree at the same absolute path — /home/…/workspace/products/webship_core means the same
|
|
19
|
+
# directory inside it and out. There is no host node, no host composer and no raw docker exec.
|
|
20
|
+
|
|
21
|
+
readonly CHECKS_PLAN_JS="${WORKSPACE_SCRIPTS}/libs/checks_plan.js";
|
|
22
|
+
readonly CHECKS_STATE_DIR="${WORKSPACE_PATH}/state/checks";
|
|
23
|
+
|
|
24
|
+
# Where a project's checks run, and how a command is wrapped to get there.
|
|
25
|
+
#
|
|
26
|
+
# site the project has its own .ddev/config.yaml -> its own web container
|
|
27
|
+
# here we are already inside a DDEV web container -> run in place, do not nest ddev exec
|
|
28
|
+
# dashboard a package, invoked from the host -> the dashboard's container
|
|
29
|
+
function checks_where() {
|
|
30
|
+
local project_path="$1";
|
|
31
|
+
if [ -f "${project_path}/.ddev/config.yaml" ] ; then printf 'site' ; return 0 ; fi
|
|
32
|
+
if [ -n "${IS_DDEV_PROJECT:-}" ] ; then printf 'here' ; return 0 ; fi
|
|
33
|
+
printf 'dashboard';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# One check, run where it belongs. Output streams through unmodified — nothing is swallowed, so the
|
|
37
|
+
# dashboard toast shows what a terminal would.
|
|
38
|
+
#
|
|
39
|
+
# `< /dev/null` on every one of them, and it is not decoration: the caller is a `while read` loop fed
|
|
40
|
+
# by a process substitution, and `ddev exec` reads stdin. Without it the first check swallows the
|
|
41
|
+
# rest of the plan and the run silently stops after one row — which is exactly what it did. It is the
|
|
42
|
+
# same reason every job the dashboard starts closes stdin.
|
|
43
|
+
function checks_run_one() {
|
|
44
|
+
local where="$1" project_path="$2" runner="$3" script="$4";
|
|
45
|
+
case "${where}" in
|
|
46
|
+
site)
|
|
47
|
+
( cd "${project_path}" && ddev exec "${runner} run ${script}" ) < /dev/null ;;
|
|
48
|
+
here)
|
|
49
|
+
( cd "${project_path}" && bash -lc "${runner} run ${script}" ) < /dev/null ;;
|
|
50
|
+
dashboard)
|
|
51
|
+
( cd "${WORKSPACE_PATH}/workspace-app" && ddev exec -d "${project_path}" "${runner} run ${script}" ) < /dev/null ;;
|
|
52
|
+
esac
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# The add-on's own commands, which are already whole checks — used only where the project carries
|
|
56
|
+
# github.com/Webship/ddev-dev-tools.
|
|
57
|
+
function checks_run_addon() {
|
|
58
|
+
local project_path="$1" command="$2";
|
|
59
|
+
( cd "${project_path}" && ${command} ) < /dev/null ;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Is the container this project needs actually up? A package with a stopped dashboard container has
|
|
63
|
+
# nowhere to run, and saying so beats a docker error.
|
|
64
|
+
function checks_require_container() {
|
|
65
|
+
local where="$1" project_path="$2";
|
|
66
|
+
case "${where}" in
|
|
67
|
+
site)
|
|
68
|
+
if ! ( cd "${project_path}" && ddev describe -j 2>/dev/null | grep -q '"status":"running"' ) ; then
|
|
69
|
+
echo "Starting ${doc_name}/${PROJECT_NAME}…";
|
|
70
|
+
( cd "${project_path}" && ddev start -y ) || return 1 ;
|
|
71
|
+
fi
|
|
72
|
+
;;
|
|
73
|
+
dashboard)
|
|
74
|
+
if ! docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^ddev-workspace-web$' ; then
|
|
75
|
+
echo "The workspace dashboard container is not running, and a package has no DDEV project of its own.";
|
|
76
|
+
echo " Start it: cd ${WORKSPACE_PATH}/workspace-app && ddev start -y";
|
|
77
|
+
return 1 ;
|
|
78
|
+
fi
|
|
79
|
+
;;
|
|
80
|
+
esac
|
|
81
|
+
return 0 ;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function checks_command() {
|
|
85
|
+
local project_path="${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME}";
|
|
86
|
+
local where runner runner_reason deps_installed deps_evidence postinstall_count has_package is_site;
|
|
87
|
+
local started status=0 ran=0 passed=0 failed=0 refused=0 skipped=0 declared=0;
|
|
88
|
+
local failed_ids="";
|
|
89
|
+
|
|
90
|
+
if [ ! -d "${project_path}" ] ; then
|
|
91
|
+
echo "No ${PROJECT_NAME} in ${WORKSPACE_ROOT}/${doc_name}.";
|
|
92
|
+
return 2 ;
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# The plan, from the one resolver. `--format=meta` answers the questions about the package as a
|
|
96
|
+
# whole; the default TSV answers them per check.
|
|
97
|
+
local plan_args="";
|
|
98
|
+
[ ! "${ONLY}" == '_none_' ] && plan_args="${plan_args} --only=${ONLY}";
|
|
99
|
+
[ ! "${SKIP}" == '_none_' ] && plan_args="${plan_args} --skip=${SKIP}";
|
|
100
|
+
[ ! "${RUNNER}" == '_none_' ] && plan_args="${plan_args} --runner=${RUNNER}";
|
|
101
|
+
[ "${E2E}" == 'yes' ] && plan_args="${plan_args} --e2e";
|
|
102
|
+
plan_args="${plan_args} --browser=${BROWSER}";
|
|
103
|
+
|
|
104
|
+
IFS=$'\t' read -r runner runner_reason deps_installed deps_evidence postinstall_count has_package is_site \
|
|
105
|
+
< <(node "${CHECKS_PLAN_JS}" "${project_path}" --format=meta ${plan_args} | head -1);
|
|
106
|
+
|
|
107
|
+
where="$(checks_where "${project_path}")";
|
|
108
|
+
|
|
109
|
+
echo "";
|
|
110
|
+
echo "── Checks · ${doc_name}/${PROJECT_NAME} ─────────────────────────────";
|
|
111
|
+
if [ "${has_package}" == 'yes' ] ; then
|
|
112
|
+
echo " ${runner:-(no runner)} (${runner_reason}) · dependencies $([ "${deps_installed}" == 'yes' ] && echo 'installed' || echo 'NOT installed') (${deps_evidence})";
|
|
113
|
+
else
|
|
114
|
+
echo " no package.json — only the checks a DDEV add-on provides can apply here";
|
|
115
|
+
fi
|
|
116
|
+
echo " running in: ${where}";
|
|
117
|
+
echo "";
|
|
118
|
+
|
|
119
|
+
# --list is pure filesystem work: it starts nothing and needs no dependencies.
|
|
120
|
+
if [ "${LIST}" == 'yes' ] ; then
|
|
121
|
+
node "${CHECKS_PLAN_JS}" "${project_path}" ${plan_args} \
|
|
122
|
+
| awk -F'\t' '{ printf " %-9s %-14s %-14s %s\n", $1, $3, $4, ($5 != "" ? $5 : $6) }';
|
|
123
|
+
if [ "${postinstall_count}" != '0' ] ; then
|
|
124
|
+
echo "";
|
|
125
|
+
echo " Installing this package would also run:";
|
|
126
|
+
node "${CHECKS_PLAN_JS}" "${project_path}" --format=meta | tail -n +2 | awk -F'\t' '{ printf " %s\n", $2 }';
|
|
127
|
+
fi
|
|
128
|
+
echo "";
|
|
129
|
+
return 0 ;
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
# Dependencies are never installed behind your back: a package's own postinstall can write into a
|
|
133
|
+
# docroot or run a webpack build, so --install is the arming step and it says what it will run.
|
|
134
|
+
if [ "${has_package}" == 'yes' ] && [ "${deps_installed}" == 'no' ] ; then
|
|
135
|
+
if [ "${INSTALL}" == 'yes' ] ; then
|
|
136
|
+
checks_require_container "${where}" "${project_path}" || return 2 ;
|
|
137
|
+
echo "Installing with ${runner} (${runner_reason}).";
|
|
138
|
+
if [ "${postinstall_count}" != '0' ] ; then
|
|
139
|
+
echo "This package runs ${postinstall_count} script(s) on install, which write into the tree:";
|
|
140
|
+
node "${CHECKS_PLAN_JS}" "${project_path}" --format=meta | tail -n +2 | awk -F'\t' '{ printf " %s\n", $2 }';
|
|
141
|
+
fi
|
|
142
|
+
case "${where}" in
|
|
143
|
+
site) ( cd "${project_path}" && ddev ${runner} install ) || return 2 ;;
|
|
144
|
+
here) ( cd "${project_path}" && bash -lc "${runner} install" ) || return 2 ;;
|
|
145
|
+
dashboard) ( cd "${WORKSPACE_PATH}/workspace-app" && ddev exec -d "${project_path}" "${runner} install" ) || return 2 ;;
|
|
146
|
+
esac
|
|
147
|
+
plan_args="${plan_args} --assume-installed";
|
|
148
|
+
else
|
|
149
|
+
echo "Nothing ran: the dependencies of ${doc_name}/${PROJECT_NAME} are not installed.";
|
|
150
|
+
echo " Install them and check: bash cmd-tools-checks.sh ${PROJECT_NAME} --install";
|
|
151
|
+
echo " See the plan first: bash cmd-tools-checks.sh ${PROJECT_NAME} --list";
|
|
152
|
+
return 2 ;
|
|
153
|
+
fi
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
started="$(date +%s)";
|
|
157
|
+
local summary="";
|
|
158
|
+
|
|
159
|
+
while IFS=$'\t' read -r id label row_status script command reason ; do
|
|
160
|
+
case "${row_status}" in
|
|
161
|
+
ready)
|
|
162
|
+
declared=$(( declared + 1 ));
|
|
163
|
+
checks_require_container "${where}" "${project_path}" || return 2 ;
|
|
164
|
+
echo "── ${id} ───────────────────────────────────────────────";
|
|
165
|
+
local one_started one_status;
|
|
166
|
+
one_started="$(date +%s)";
|
|
167
|
+
if [[ "${script}" == ddev\ * ]] ; then
|
|
168
|
+
checks_run_addon "${project_path}" "${command}";
|
|
169
|
+
elif [ "${id}" == 'e2e' ] && [ -f "${WORKSPACE_ROOT}/${doc_name}/cmd-tools-testing.sh" ] ; then
|
|
170
|
+
# The browser suite already has a command of its own, with the shared browser cache and the
|
|
171
|
+
# report handling in it. Hand over rather than reimplement half of it here.
|
|
172
|
+
bash "${WORKSPACE_ROOT}/${doc_name}/cmd-tools-testing.sh" "${PROJECT_NAME}" --run --browser "${BROWSER}" < /dev/null ;
|
|
173
|
+
else
|
|
174
|
+
checks_run_one "${where}" "${project_path}" "${runner}" "${script}";
|
|
175
|
+
fi
|
|
176
|
+
one_status=$? ;
|
|
177
|
+
ran=$(( ran + 1 ));
|
|
178
|
+
if [ ${one_status} -eq 0 ] ; then
|
|
179
|
+
passed=$(( passed + 1 ));
|
|
180
|
+
summary="${summary} ✅ $(printf '%-9s' "${id}") $(printf '%4ss' "$(( $(date +%s) - one_started ))") ${script}\n";
|
|
181
|
+
else
|
|
182
|
+
failed=$(( failed + 1 ));
|
|
183
|
+
failed_ids="${failed_ids} ${id}";
|
|
184
|
+
status=1 ;
|
|
185
|
+
summary="${summary} ❌ $(printf '%-9s' "${id}") $(printf '%4ss' "$(( $(date +%s) - one_started ))") ${script}\n";
|
|
186
|
+
if [ "${FAIL_FAST}" == 'yes' ] ; then
|
|
187
|
+
echo "";
|
|
188
|
+
echo "Stopping at the first failure, as asked (--fail-fast).";
|
|
189
|
+
break ;
|
|
190
|
+
fi
|
|
191
|
+
fi
|
|
192
|
+
echo "";
|
|
193
|
+
;;
|
|
194
|
+
masked)
|
|
195
|
+
# A masked script cannot be trusted and cannot be ignored: it FAILS the run. The visible
|
|
196
|
+
# escape is --skip <id>, which is printed in the summary rather than hidden in a config.
|
|
197
|
+
declared=$(( declared + 1 ));
|
|
198
|
+
failed=$(( failed + 1 ));
|
|
199
|
+
failed_ids="${failed_ids} ${id}";
|
|
200
|
+
status=1 ;
|
|
201
|
+
summary="${summary} ⛔ $(printf '%-9s' "${id}") — ${script} — ${reason}\n";
|
|
202
|
+
;;
|
|
203
|
+
refused)
|
|
204
|
+
declared=$(( declared + 1 ));
|
|
205
|
+
refused=$(( refused + 1 ));
|
|
206
|
+
summary="${summary} 🚫 $(printf '%-9s' "${id}") — ${script} — ${reason}\n";
|
|
207
|
+
;;
|
|
208
|
+
skipped|deps-missing|unresolved-runner)
|
|
209
|
+
declared=$(( declared + 1 ));
|
|
210
|
+
skipped=$(( skipped + 1 ));
|
|
211
|
+
summary="${summary} ⏭ $(printf '%-9s' "${id}") — ${script:-—} — ${reason}\n";
|
|
212
|
+
;;
|
|
213
|
+
*)
|
|
214
|
+
summary="${summary} ➖ $(printf '%-9s' "${id}") — ${reason}\n";
|
|
215
|
+
;;
|
|
216
|
+
esac
|
|
217
|
+
done < <(node "${CHECKS_PLAN_JS}" "${project_path}" ${plan_args});
|
|
218
|
+
|
|
219
|
+
echo "";
|
|
220
|
+
echo "── Summary · ${doc_name}/${PROJECT_NAME} ────────────────────────────";
|
|
221
|
+
printf "%b" "${summary}";
|
|
222
|
+
echo "";
|
|
223
|
+
echo " ${ran} ran · ${passed} passed · ${failed} failed · ${refused} refused · ${skipped} skipped ($(( $(date +%s) - started ))s)";
|
|
224
|
+
if [ -n "${failed_ids}" ] ; then
|
|
225
|
+
echo " Failed:${failed_ids}";
|
|
226
|
+
echo " Re-run just those: bash cmd-tools-checks.sh ${PROJECT_NAME} --only $(echo "${failed_ids}" | tr -s ' ' | sed 's/^ //;s/ /,/g')";
|
|
227
|
+
fi
|
|
228
|
+
if [ ${ran} -eq 0 ] && [ ${failed} -eq 0 ] ; then
|
|
229
|
+
echo " Nothing ran. ${PROJECT_NAME} declares no check this verb can run — see --list.";
|
|
230
|
+
fi
|
|
231
|
+
echo "";
|
|
232
|
+
|
|
233
|
+
# The marker the dashboard reads for its caption. Written outside the package, like a graph, so a
|
|
234
|
+
# shipped repository never carries a file this tooling made.
|
|
235
|
+
if [ ${ran} -gt 0 ] ; then
|
|
236
|
+
mkdir -p "${CHECKS_STATE_DIR}/${doc_name}";
|
|
237
|
+
printf '{"at":%s,"workspace":"%s","project":"%s","ran":%s,"passed":%s,"failed":%s,"refused":%s,"skipped":%s,"seconds":%s}\n' \
|
|
238
|
+
"$(date +%s)" "${doc_name}" "${PROJECT_NAME}" "${ran}" "${passed}" "${failed}" "${refused}" "${skipped}" "$(( $(date +%s) - started ))" \
|
|
239
|
+
> "${CHECKS_STATE_DIR}/${doc_name}/${PROJECT_NAME}.json";
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
return ${status} ;
|
|
243
|
+
}
|