Skip to content

feat(targets): add deploy-wordpress, a wp-cli backed target - #958

Merged
ralyodio merged 1 commit into
masterfrom
worktree-wp-cli-target
Aug 13, 2026
Merged

feat(targets): add deploy-wordpress, a wp-cli backed target#958
ralyodio merged 1 commit into
masterfrom
worktree-wp-cli-target

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Adds packages/targets/deploy-wordpress — a thin adapter over wp-cli that ships a WordPress plugin or theme to a live install.

  • buildwp dist-archive <src> <out>/<slug>-<version>.zip --format=zip, installing wp-cli/dist-archive-command first if the CLI doesn't have it. Dry runs write a wordpress-package.json plan and never exec wp-cli.
  • shipwp <plugin|theme> install <zip> --force --activate against the install named by ssh (--ssh=user@host:/path) or path (--path=), then reads the resulting version back from wp <type> get --field=version.
  • status — reports the shipped version plus the site URL.

Per the adapter rule in CLI_INTEGRATIONS.md: CLI-first, dryRun needs no secrets or network, and every vendor command is logged. ship refuses to run unless ssh or path names an install, so it can never guess which site to write to. Auth rides the SSH agent — nothing goes in the sh1pt vault.

Also wires the id into packages/cli/src/adapter-registry.ts, adds the App-hosting row in TARGETS.md, notes that plugin-wordpress (still 🚧) is the separate SVN release path to wordpress.org, and registers wp in CLI_INTEGRATIONS.md.

Testing

  • pnpm vitest run packages/targets/deploy-wordpress — 13 tests
  • pnpm vitest run — 710 files / 3521 tests pass

🤖 Generated with Claude Code

Ships a WordPress plugin or theme to a live install with wp-cli:
`wp dist-archive` builds the zip, `wp <plugin|theme> install --force
--activate` puts it on the site named by `ssh` or `path`, then the
version is read back from `wp <type> get`.

Dry runs write a wordpress-package.json plan and never exec wp-cli.
Ship refuses to run without `ssh` or `path` so it can't guess which
install to write to; auth is the SSH agent's job, so no vault secret.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

if (!config.ssh && !config.path) {
throw new Error(
'deploy-wordpress requires ssh or path so wp-cli knows which WordPress install to write to. '
+ 'Set ssh: "user@host:/var/www/html" for a remote site, or path: "/var/www/html" for a local one.',
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

311 finding(s)

HIGH/CRITICAL: 24 | MEDIUM: 51 | LOW: 236

Severity Rule Location
HIGH secret-generic-api-key packages/affiliates/sovrn/src/index.ts:28
HIGH js-nosql-injection packages/ai/amazon-bedrock/src/index.test.ts:121
HIGH secret-generic-credential packages/ai/amazon-bedrock/src/index.ts:9
HIGH secret-generic-credential packages/ai/amazon-bedrock/src/index.ts:10
HIGH secret-generic-credential packages/ai/amazon-bedrock/src/index.ts:11
HIGH js-host-header-trust packages/bots/wechat/src/index.ts:405
HIGH secret-generic-credential packages/bridges/matrix/src/index.ts:58
HIGH secret-generic-credential packages/bridges/matrix/src/index.ts:59
HIGH secret-generic-credential packages/captcha/captchasolver/src/index.ts:34
HIGH secret-generic-credential packages/cli/src/commands/secrets.ts:176
HIGH secret-generic-credential packages/cloud/linode/src/index.ts:15
HIGH secret-generic-credential packages/observability/sentry/src/index.ts:15
HIGH secret-generic-credential packages/outreach/producthunt/src/index.ts:103
HIGH secret-generic-credential packages/promo/posthog/src/index.ts:23
HIGH secret-generic-credential packages/security/snyk/src/index.ts:26
HIGH secret-generic-credential packages/social/hashnode/src/index.ts:4
HIGH secret-generic-credential packages/social/linkedin/src/index.ts:3
HIGH secret-generic-credential packages/social/linkedin/src/index.ts:4
HIGH secret-generic-credential packages/social/medium/src/index.ts:4
HIGH secret-generic-credential packages/social/snapchat/src/index.ts:5
HIGH secret-generic-credential packages/social/tiktok/src/index.ts:5
HIGH secret-generic-credential packages/targets/registry-ans/src/index.ts:49
HIGH secret-generic-credential sites/sh1pt.com/supabase/config.toml:303
HIGH secret-generic-credential sites/sh1pt.com/supabase/config.toml:335
MEDIUM redos-nested-quantifier packages/actions-fleet-core/src/action-pack/schema.ts:3
MEDIUM insecure-temp-file packages/agent-providers/opencode/src/__tests__/opencode.test.ts:19
MEDIUM insecure-temp-file packages/agent-providers/opencode/src/__tests__/opencode.test.ts:42
MEDIUM insecure-temp-file packages/agent-providers/opencode/src/__tests__/opencode.test.ts:45
MEDIUM insecure-temp-file packages/bridges/signal/src/index.test.ts:92
MEDIUM insecure-temp-file packages/bridges/signal/src/index.test.ts:118
MEDIUM insecure-temp-file packages/cli/src/input.test.ts:84
MEDIUM redos-nested-quantifier packages/core/src/setup-helpers.ts:583
MEDIUM insecure-temp-file packages/core/src/testing/harness.ts:15
MEDIUM insecure-temp-file packages/core/src/testing/harness.ts:16
MEDIUM insecure-temp-file packages/core/src/testing/harness.ts:30
MEDIUM insecure-temp-file packages/core/src/testing/harness.ts:42
MEDIUM insecure-temp-file packages/merch/printful/src/index.test.ts:9
MEDIUM insecure-temp-file packages/merch/printify/src/index.test.ts:11
MEDIUM insecure-temp-file packages/policy/src/linter.test.ts:8
MEDIUM redos-nested-quantifier packages/policy/src/rules/bundle-id.ts:3
MEDIUM insecure-temp-file packages/secrets/env-updater/src/index.test.ts:106
MEDIUM insecure-temp-file packages/social/facebook/src/index.test.ts:95
MEDIUM insecure-temp-file packages/social/instagram/src/index.test.ts:177
MEDIUM insecure-temp-file packages/social/pinterest/src/index.test.ts:91
MEDIUM insecure-temp-file packages/social/pinterest/src/index.test.ts:146
MEDIUM insecure-temp-file packages/social/threads/src/index.test.ts:108
MEDIUM insecure-temp-file packages/social/vimeo/src/index.test.ts:137
MEDIUM insecure-temp-file packages/social/x/src/index.test.ts:72
MEDIUM insecure-temp-file packages/social/x/src/index.test.ts:116
MEDIUM insecure-temp-file packages/targets/browser-safari/src/index.test.ts:22

…and 261 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 75f6d76 into master Aug 13, 2026
8 checks passed
@ralyodio
ralyodio deleted the worktree-wp-cli-target branch August 13, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants