pressship 0.1.3 → 0.1.4
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/README.md +266 -357
- package/assets/logo-new.png +0 -0
- package/assets/pressship-dark.png +0 -0
- package/assets/pressship-square-dark.png +0 -0
- package/assets/pressship-square.png +0 -0
- package/assets/pressship-symbol-dark.png +0 -0
- package/assets/pressship-symbol.png +0 -0
- package/assets/pressship-wordmark-dark.png +0 -0
- package/assets/pressship-wordmark.png +0 -0
- package/assets/pressship.png +0 -0
- package/dist/cli.js +22 -2
- package/dist/cli.js.map +1 -1
- package/dist/package/ignore.js +2 -0
- package/dist/package/ignore.js.map +1 -1
- package/dist/plugin/list.d.ts +24 -0
- package/dist/plugin/list.js +174 -0
- package/dist/plugin/list.js.map +1 -0
- package/dist/svn/credentials.d.ts +9 -0
- package/dist/svn/credentials.js +94 -0
- package/dist/svn/credentials.js.map +1 -0
- package/dist/svn/get.d.ts +45 -0
- package/dist/svn/get.js +139 -0
- package/dist/svn/get.js.map +1 -0
- package/dist/svn/release.d.ts +1 -0
- package/dist/svn/release.js +90 -13
- package/dist/svn/release.js.map +1 -1
- package/dist/svn/subversion.d.ts +18 -0
- package/dist/svn/subversion.js +171 -0
- package/dist/svn/subversion.js.map +1 -0
- package/dist/utils/paths.d.ts +1 -0
- package/dist/utils/paths.js +3 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/wordpress-org/publish.d.ts +1 -0
- package/dist/wordpress-org/publish.js +4 -2
- package/dist/wordpress-org/publish.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,573 +1,482 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/pressship-square-dark.png">
|
|
4
|
+
<img src="assets/pressship-square.png" alt="Pressship" width="120" />
|
|
5
|
+
</picture>
|
|
3
6
|
</p>
|
|
4
7
|
|
|
8
|
+
<h1 align="center">Pressship</h1>
|
|
9
|
+
|
|
5
10
|
<p align="center">
|
|
6
|
-
|
|
11
|
+
<em>WordPress.org plugin publishing, from the terminal.</em>
|
|
7
12
|
</p>
|
|
8
13
|
|
|
9
14
|
<p align="center">
|
|
10
|
-
<a href="https://nodejs.org/"><img alt="Node.js 20+" src="https://img.shields.io/badge/node-%3E%3D20-
|
|
11
|
-
<a href="https://
|
|
12
|
-
<a href="
|
|
15
|
+
<a href="https://nodejs.org/"><img alt="Node.js 20+" src="https://img.shields.io/badge/node-%3E%3D20-1e293b?logo=node.js&logoColor=white&style=flat-square" /></a>
|
|
16
|
+
<a href="https://www.npmjs.com/package/pressship"><img alt="npm" src="https://img.shields.io/npm/v/pressship?color=3858e9&logo=npm&logoColor=white&style=flat-square" /></a>
|
|
17
|
+
<a href="https://wordpress.org/plugins/developers/"><img alt="WordPress.org" src="https://img.shields.io/badge/WordPress.org-plugin%20directory-21759b?logo=wordpress&logoColor=white&style=flat-square" /></a>
|
|
18
|
+
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-3858e9?style=flat-square" /></a>
|
|
19
|
+
<a href="https://github.com/f/pressship"><img alt="GitHub stars" src="https://img.shields.io/github/stars/f/pressship?style=flat-square&logo=github&color=1e293b" /></a>
|
|
13
20
|
</p>
|
|
14
21
|
|
|
15
22
|
<p align="center">
|
|
16
|
-
<
|
|
23
|
+
<a href="#quick-start">Quick start</a> ·
|
|
24
|
+
<a href="#commands">Commands</a> ·
|
|
25
|
+
<a href="#managed-plugin-check">Managed Plugin Check</a> ·
|
|
26
|
+
<a href="#agent-skill">Agent skill</a> ·
|
|
27
|
+
<a href="https://pressship.org">Docs</a>
|
|
17
28
|
</p>
|
|
18
29
|
|
|
19
|
-
|
|
30
|
+
---
|
|
20
31
|
|
|
21
|
-
|
|
22
|
-
npx pressship login
|
|
23
|
-
npx pressship publish ./my-plugin --dry-run
|
|
24
|
-
npx pressship publish ./my-plugin
|
|
25
|
-
```
|
|
32
|
+
Pressship is a modern command-line tool for the entire WordPress.org plugin publishing lifecycle — validating, packaging, submitting for review, releasing through SVN, inspecting submission state, and even booting your plugin in [WordPress Playground](https://wordpress.org/playground/).
|
|
26
33
|
|
|
27
|
-
|
|
34
|
+
It keeps WordPress.org-specific behavior **explicit** and makes everything around it **quiet**.
|
|
28
35
|
|
|
29
36
|
```bash
|
|
30
|
-
npx
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
For other agents, replace `codex` with the target agent name, such as `claude-code`. To inspect available skills first, run:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
npx skills add f/pressship --list
|
|
37
|
+
npx pressship publish ./my-plugin
|
|
37
38
|
```
|
|
38
39
|
|
|
39
40
|
## Why Pressship?
|
|
40
41
|
|
|
41
|
-
Publishing a WordPress plugin to WordPress.org
|
|
42
|
+
Publishing a WordPress plugin to WordPress.org normally means juggling a lot of small things: the right zip layout, `readme.txt` validation, Plugin Check setup, the developer-page upload form, then SVN for releases. Pressship automates the chores while keeping the official WordPress.org review and SVN release behavior intact.
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## Features
|
|
44
|
+
If you've used `npm publish`, this should feel familiar.
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
- `whoami` and `logout` commands for session management.
|
|
49
|
-
- Plugin discovery from WordPress plugin headers.
|
|
50
|
-
- `readme.txt` parsing and local validation.
|
|
51
|
-
- WordPress.org readme validator automation.
|
|
52
|
-
- WordPress-installable zip generation.
|
|
53
|
-
- Modernized `publish` and `pack` commands.
|
|
54
|
-
- Managed WordPress.org Plugin Check setup and execution.
|
|
55
|
-
- Current WordPress.org submission state inspection.
|
|
56
|
-
- Local and hosted plugin info lookup.
|
|
57
|
-
- Local WordPress Playground demos for plugin paths or hosted slugs.
|
|
58
|
-
- Playground runtime selection from plugin WordPress/PHP requirements.
|
|
59
|
-
- Quieter Playground demos with deprecation noise suppressed.
|
|
60
|
-
- Pending-plugin reupload support via the WordPress.org developer page.
|
|
61
|
-
- SVN release workflow for approved plugins.
|
|
62
|
-
- Repeatable ignore globs and `.pressshipignore` support.
|
|
63
|
-
- Documentation site for GitHub Pages.
|
|
64
|
-
- Colorful CLI output with progress indicators.
|
|
65
|
-
|
|
66
|
-
## Quick Start
|
|
46
|
+
## Quick start
|
|
67
47
|
|
|
68
48
|
```bash
|
|
69
|
-
# Authenticate with WordPress.org
|
|
49
|
+
# 1. Authenticate with WordPress.org
|
|
70
50
|
npx pressship login
|
|
71
51
|
|
|
72
|
-
#
|
|
52
|
+
# 2. (Optional) Verify the saved session
|
|
73
53
|
npx pressship whoami
|
|
74
54
|
|
|
75
|
-
#
|
|
76
|
-
npx pressship status ./my-plugin
|
|
77
|
-
|
|
78
|
-
# Inspect local plugin metadata or hosted WordPress.org plugin info.
|
|
79
|
-
npx pressship info ./my-plugin
|
|
80
|
-
npx pressship info 16deza-table-cell-extras
|
|
81
|
-
|
|
82
|
-
# Open a local WordPress Playground demo.
|
|
83
|
-
npx pressship demo ./my-plugin
|
|
84
|
-
npx pressship demo 16deza-table-cell-extras
|
|
85
|
-
|
|
86
|
-
# Validate and package without uploading or committing.
|
|
55
|
+
# 3. Validate, package, and check without uploading
|
|
87
56
|
npx pressship publish ./my-plugin --dry-run
|
|
88
57
|
|
|
89
|
-
# Submit for review
|
|
58
|
+
# 4. Submit for review or release an approved plugin
|
|
90
59
|
npx pressship publish ./my-plugin
|
|
91
60
|
```
|
|
92
61
|
|
|
93
|
-
|
|
62
|
+
That's it. Pressship handles browser-based login, packaging, readme validation, Plugin Check, and routing between submission and SVN release.
|
|
94
63
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
64
|
+
## Features
|
|
65
|
+
|
|
66
|
+
- **Browser-based login** — opens `login.wordpress.org` in a real browser and saves only the session locally. Your password is never read or stored.
|
|
67
|
+
- **Smart `publish`** — automatically routes between new-plugin review submission, pending reupload, or SVN release.
|
|
68
|
+
- **Zero-setup Plugin Check** — bundles its own managed WordPress + SQLite + Plugin Check environment when you don't already have WP-CLI.
|
|
69
|
+
- **WordPress.org readme validator** — runs the official validator before you upload anything.
|
|
70
|
+
- **Submission state inspector** — reads the logged-in developer page to surface review status, slug, reupload availability, and Plugin Check links.
|
|
71
|
+
- **SVN release workflow** — handles checkout, trunk sync, tag creation, and commit.
|
|
72
|
+
- **WordPress Playground demos** — boot any local path or hosted slug in Playground using the plugin's own WP/PHP requirements.
|
|
73
|
+
- **`.pressshipignore` + glob ignores** — sensible defaults, easy per-command overrides.
|
|
74
|
+
- **Agent skill included** — a Pressship publishing skill for coding agents (Codex, Claude Code, etc.).
|
|
75
|
+
- **Beautiful terminal UX** — colored output, progress indicators, structured findings.
|
|
99
76
|
|
|
100
77
|
## Requirements
|
|
101
78
|
|
|
102
|
-
- Node.js 20
|
|
103
|
-
- A WordPress.org account
|
|
104
|
-
- Internet access for first-run browser and Plugin Check setup
|
|
105
|
-
- PHP
|
|
106
|
-
-
|
|
79
|
+
- **Node.js 20+**
|
|
80
|
+
- A **WordPress.org account**
|
|
81
|
+
- **Internet access** for first-run browser and Plugin Check setup
|
|
82
|
+
- **PHP** when Pressship needs to prepare its managed Plugin Check environment
|
|
83
|
+
- **`svn`** for approved-plugin releases and `get` checkouts. If it is missing, Pressship can detect your OS and offer to install Subversion with Homebrew, apt, dnf, yum, pacman, zypper, apk, winget, or Chocolatey.
|
|
107
84
|
|
|
108
|
-
|
|
85
|
+
Playwright Chromium is installed automatically the first time browser automation runs.
|
|
109
86
|
|
|
110
|
-
##
|
|
87
|
+
## Commands
|
|
111
88
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
pressship
|
|
115
|
-
pressship
|
|
116
|
-
pressship
|
|
117
|
-
pressship
|
|
118
|
-
pressship
|
|
119
|
-
pressship
|
|
120
|
-
pressship
|
|
121
|
-
pressship
|
|
122
|
-
pressship
|
|
123
|
-
pressship release
|
|
124
|
-
|
|
89
|
+
| Command | What it does |
|
|
90
|
+
| ------- | ------------ |
|
|
91
|
+
| `pressship login` | Open WordPress.org login in a browser and save the session. |
|
|
92
|
+
| `pressship whoami` | Show the active WordPress.org account. |
|
|
93
|
+
| `pressship logout` | Remove the saved WordPress.org session. |
|
|
94
|
+
| `pressship info` | Inspect local plugin metadata or hosted WordPress.org plugin info. |
|
|
95
|
+
| `pressship ls` | List plugins for the saved account or a public WordPress.org profile. |
|
|
96
|
+
| `pressship get` | Checkout or update a WordPress.org plugin SVN working copy. |
|
|
97
|
+
| `pressship status` | Read review state from the logged-in developer dashboard. |
|
|
98
|
+
| `pressship version <patch\|minor\|major>` | Bump the plugin header version and readme stable tag together. |
|
|
99
|
+
| `pressship pack` | Validate, run Plugin Check, and write an installable zip. |
|
|
100
|
+
| `pressship publish` | Route to submit or release based on current state. |
|
|
101
|
+
| `pressship submit` | Upload a zip to WordPress.org review (or reupload). |
|
|
102
|
+
| `pressship release` | Push an approved release through SVN trunk + tags. |
|
|
103
|
+
| `pressship demo` | Open the plugin in WordPress Playground. |
|
|
125
104
|
|
|
126
|
-
|
|
105
|
+
Get help for any command:
|
|
127
106
|
|
|
128
107
|
```bash
|
|
129
|
-
pressship
|
|
108
|
+
pressship <command> --help
|
|
130
109
|
```
|
|
131
110
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
Pressship does not store your WordPress.org password.
|
|
135
|
-
|
|
136
|
-
Useful commands:
|
|
111
|
+
## Authentication
|
|
137
112
|
|
|
138
113
|
```bash
|
|
139
|
-
pressship
|
|
140
|
-
pressship whoami --json
|
|
141
|
-
pressship logout
|
|
114
|
+
pressship login
|
|
142
115
|
```
|
|
143
116
|
|
|
144
|
-
|
|
117
|
+
Opens `login.wordpress.org` in a real browser. Complete the login manually — Pressship waits until it detects a logged-in user, then saves only the browser session state.
|
|
145
118
|
|
|
146
119
|
```bash
|
|
147
|
-
pressship
|
|
148
|
-
pressship
|
|
149
|
-
pressship
|
|
150
|
-
pressship info https://wordpress.org/plugins/16deza-table-cell-extras/
|
|
151
|
-
pressship info 16deza-table-cell-extras --json
|
|
120
|
+
pressship whoami # Print the active account
|
|
121
|
+
pressship whoami --json # Machine-readable output
|
|
122
|
+
pressship logout # Remove the local session
|
|
152
123
|
```
|
|
153
124
|
|
|
154
|
-
|
|
125
|
+
> Pressship never reads, transmits, or stores your WordPress.org password.
|
|
155
126
|
|
|
156
|
-
|
|
127
|
+
## Publishing
|
|
157
128
|
|
|
158
|
-
|
|
129
|
+
`publish` is the modern, opinionated happy path. It inspects your plugin and routes to the right flow:
|
|
159
130
|
|
|
160
|
-
|
|
131
|
+
- A pending WordPress.org review submission → **reupload**.
|
|
132
|
+
- A new plugin Pressship hasn't seen → **submit for review**.
|
|
133
|
+
- An approved plugin with an SVN repository → **release**.
|
|
134
|
+
- Ambiguous? Pressship asks.
|
|
161
135
|
|
|
162
136
|
```bash
|
|
163
|
-
pressship
|
|
164
|
-
pressship
|
|
165
|
-
pressship
|
|
166
|
-
pressship
|
|
137
|
+
pressship publish ./my-plugin # Pick the right flow automatically
|
|
138
|
+
pressship publish ./my-plugin --dry-run # Validate + package, no upload
|
|
139
|
+
pressship publish ./my-plugin --submit # Force review submission
|
|
140
|
+
pressship publish ./my-plugin --release # Force SVN release
|
|
141
|
+
pressship publish ./my-plugin --yes # Skip confirmation prompts
|
|
142
|
+
pressship publish ./my-plugin --release --no-install-svn
|
|
167
143
|
```
|
|
168
144
|
|
|
169
|
-
|
|
145
|
+
Need fine-grained control? Use the explicit subcommands `submit` and `release`.
|
|
170
146
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
Useful options:
|
|
147
|
+
## Packaging
|
|
174
148
|
|
|
175
149
|
```bash
|
|
176
|
-
pressship
|
|
177
|
-
pressship demo ./my-plugin --wp 6.8 --php 8.3
|
|
178
|
-
pressship demo ./my-plugin --reset
|
|
179
|
-
pressship demo ./my-plugin --skip-browser
|
|
150
|
+
pressship pack ./my-plugin
|
|
180
151
|
```
|
|
181
152
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
## Status Flow
|
|
153
|
+
Validates the plugin, runs Plugin Check, and writes `{slug}.zip` — without uploading. Useful for CI artifacts or manual uploads.
|
|
185
154
|
|
|
186
155
|
```bash
|
|
187
|
-
pressship
|
|
188
|
-
pressship
|
|
189
|
-
pressship
|
|
190
|
-
pressship
|
|
156
|
+
pressship pack ./my-plugin --output-dir ./build
|
|
157
|
+
pressship pack ./my-plugin --ignore "assets/**/*.mp4"
|
|
158
|
+
pressship pack ./my-plugin --no-validate
|
|
159
|
+
pressship pack ./my-plugin --json
|
|
191
160
|
```
|
|
192
161
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
For pending submissions it can show:
|
|
162
|
+
### Ignore rules
|
|
196
163
|
|
|
197
|
-
|
|
198
|
-
- Assigned slug.
|
|
199
|
-
- Plugin ID.
|
|
200
|
-
- Submitted zip filename.
|
|
201
|
-
- Submitted version.
|
|
202
|
-
- Upload date.
|
|
203
|
-
- Plugin Check URL.
|
|
204
|
-
- Whether slug change is available.
|
|
205
|
-
- Whether updated zip upload is available.
|
|
164
|
+
Default exclusions: `.git`, `.gitignore`, `.github`, `.DS_Store`, `.idea`, `.vscode`, `.env*`, `node_modules`, `dist`, `build`, `coverage`, `tests`, `*.log`, `*.zip`.
|
|
206
165
|
|
|
207
|
-
|
|
166
|
+
Add per-project exclusions in a `.pressshipignore` file (same syntax as `.gitignore`):
|
|
208
167
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
Status Awaiting Review — This plugin has not yet been reviewed.
|
|
214
|
-
Slug pressmind
|
|
215
|
-
Submitted May 14, 2026
|
|
216
|
-
Plugin ID 313331
|
|
217
|
-
Reupload available
|
|
218
|
-
Slug change available
|
|
219
|
-
File pressmind.zip
|
|
220
|
-
Version 0.0.3
|
|
168
|
+
```gitignore
|
|
169
|
+
assets/**/*.mp4
|
|
170
|
+
docs/raw/**
|
|
171
|
+
playground/**
|
|
221
172
|
```
|
|
222
173
|
|
|
223
|
-
|
|
174
|
+
Or pass `--ignore <glob>` directly (repeat as needed):
|
|
224
175
|
|
|
225
176
|
```bash
|
|
226
|
-
pressship
|
|
227
|
-
pressship version minor ./my-plugin
|
|
228
|
-
pressship version major ./my-plugin
|
|
177
|
+
pressship publish ./my-plugin --ignore "assets/**/*.mp4" --ignore "docs/raw/**"
|
|
229
178
|
```
|
|
230
179
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
It updates:
|
|
234
|
-
|
|
235
|
-
- The main plugin file `Version:` header.
|
|
236
|
-
- The `Stable tag:` value in `readme.txt`, when a readme exists.
|
|
237
|
-
|
|
238
|
-
Examples:
|
|
180
|
+
## Listing WordPress.org plugins
|
|
239
181
|
|
|
240
182
|
```bash
|
|
241
|
-
#
|
|
242
|
-
pressship
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
pressship version minor ./my-plugin
|
|
246
|
-
|
|
247
|
-
# 1.2.3 -> 2.0.0
|
|
248
|
-
pressship version major ./my-plugin
|
|
183
|
+
pressship ls # Saved account, including SVN committer plugins
|
|
184
|
+
pressship ls fatihkadirakin # Public profile plugins for a username
|
|
185
|
+
pressship ls --public # Force the public profile view
|
|
186
|
+
pressship ls --json
|
|
249
187
|
```
|
|
250
188
|
|
|
251
|
-
|
|
189
|
+
`ls` reads WordPress.org's plugin author archive. Public archives show plugins where the user is listed as a contributor. When you run `pressship ls` for the saved logged-in account, WordPress.org also includes plugins where that account has SVN committer access.
|
|
190
|
+
|
|
191
|
+
## Getting a plugin SVN working copy
|
|
252
192
|
|
|
253
193
|
```bash
|
|
254
|
-
pressship
|
|
194
|
+
pressship get list-all-urls
|
|
195
|
+
pressship get list-all-urls ./plugins/list-all-urls
|
|
196
|
+
pressship get https://wordpress.org/plugins/list-all-urls/ ./list-all-urls
|
|
197
|
+
pressship get list-all-urls --json
|
|
198
|
+
pressship get list-all-urls --no-install-svn
|
|
255
199
|
```
|
|
256
200
|
|
|
257
|
-
`
|
|
201
|
+
`get` checks out `https://plugins.svn.wordpress.org/<slug>` into the destination directory. If the destination already contains an SVN working copy, Pressship runs `svn update` instead. After checkout or update, it prints repository details such as revision, last changed revision, trunk/assets availability, and tag count.
|
|
258
202
|
|
|
259
|
-
|
|
260
|
-
- Use `release` when the plugin has an approved WordPress.org SVN repository and no pending review submission is found.
|
|
261
|
-
- Ask whether to submit or release when Pressship cannot confidently choose.
|
|
203
|
+
If `svn` is not available, Pressship detects your operating system and package manager, then asks before installing Subversion. Use `--no-install-svn` to skip the installer helper and fail with manual instructions.
|
|
262
204
|
|
|
263
|
-
|
|
205
|
+
## Inspecting submission state
|
|
264
206
|
|
|
265
207
|
```bash
|
|
266
|
-
pressship
|
|
267
|
-
pressship
|
|
268
|
-
pressship
|
|
269
|
-
pressship
|
|
270
|
-
pressship publish ./my-plugin --skip-readme-validator
|
|
271
|
-
pressship publish ./my-plugin --wp-path /path/to/wordpress
|
|
272
|
-
pressship publish ./my-plugin --ignore "assets/**/*.mp4"
|
|
273
|
-
pressship publish ./my-plugin --yes
|
|
208
|
+
pressship status # All submitted plugins
|
|
209
|
+
pressship status ./my-plugin # Match by local plugin
|
|
210
|
+
pressship status my-plugin # Match by slug
|
|
211
|
+
pressship status my-plugin --json
|
|
274
212
|
```
|
|
275
213
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
## Pack Flow
|
|
214
|
+
Sample output:
|
|
279
215
|
|
|
280
|
-
```
|
|
281
|
-
|
|
216
|
+
```
|
|
217
|
+
Pressmind
|
|
218
|
+
Status Awaiting Review — This plugin has not yet been reviewed.
|
|
219
|
+
Slug pressmind
|
|
220
|
+
Submitted May 14, 2026
|
|
221
|
+
Plugin ID 313331
|
|
222
|
+
Reupload available
|
|
223
|
+
Slug change available
|
|
224
|
+
File pressmind.zip
|
|
225
|
+
Version 0.0.3
|
|
282
226
|
```
|
|
283
227
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
Useful options:
|
|
228
|
+
## Plugin metadata
|
|
287
229
|
|
|
288
230
|
```bash
|
|
289
|
-
pressship
|
|
290
|
-
pressship
|
|
291
|
-
pressship
|
|
292
|
-
pressship
|
|
293
|
-
pressship pack ./my-plugin --no-validate
|
|
294
|
-
pressship pack ./my-plugin --json
|
|
231
|
+
pressship info # Current directory
|
|
232
|
+
pressship info ./my-plugin # Local path
|
|
233
|
+
pressship info 16deza-table-cell-extras # Hosted slug
|
|
234
|
+
pressship info ./my-plugin --json
|
|
295
235
|
```
|
|
296
236
|
|
|
297
|
-
|
|
237
|
+
For local plugins, Pressship parses headers and readme metadata. For hosted plugins it queries the official WordPress.org plugin info API.
|
|
298
238
|
|
|
299
|
-
##
|
|
239
|
+
## Version bumping
|
|
300
240
|
|
|
301
241
|
```bash
|
|
302
|
-
pressship
|
|
242
|
+
pressship version patch # 1.2.3 → 1.2.4
|
|
243
|
+
pressship version minor # 1.2.3 → 1.3.0
|
|
244
|
+
pressship version major # 1.2.3 → 2.0.0
|
|
303
245
|
```
|
|
304
246
|
|
|
305
|
-
`
|
|
247
|
+
Updates the `Version:` header in the main plugin file **and** the `Stable tag:` in `readme.txt` together.
|
|
306
248
|
|
|
307
|
-
|
|
308
|
-
2. Parse WordPress plugin headers.
|
|
309
|
-
3. Parse and validate `readme.txt`.
|
|
310
|
-
4. Validate `readme.txt` with the WordPress.org readme validator.
|
|
311
|
-
5. Build a WordPress-installable zip.
|
|
312
|
-
6. Stage package contents for Plugin Check.
|
|
313
|
-
7. Run the official WordPress.org Plugin Check.
|
|
314
|
-
8. Ask for confirmation when blocking findings are reported.
|
|
315
|
-
9. Upload the zip to WordPress.org.
|
|
249
|
+
## Playground demos
|
|
316
250
|
|
|
317
|
-
|
|
251
|
+
```bash
|
|
252
|
+
pressship demo ./my-plugin # Mount local plugin into Playground
|
|
253
|
+
pressship demo 16deza-table-cell-extras # Install hosted plugin from WP.org
|
|
254
|
+
```
|
|
318
255
|
|
|
319
|
-
|
|
256
|
+
Pressship boots a local [WordPress Playground](https://wordpress.org/playground/) server with the plugin installed and activated. For local paths the plugin directory is mounted, so code changes are immediately reflected.
|
|
320
257
|
|
|
321
258
|
```bash
|
|
322
|
-
pressship
|
|
323
|
-
pressship
|
|
324
|
-
pressship
|
|
325
|
-
pressship
|
|
326
|
-
pressship submit ./my-plugin --ignore "assets/**/*.mp4"
|
|
327
|
-
pressship submit ./my-plugin --ignore "assets/**/*.mp4" --ignore "docs/raw/**"
|
|
328
|
-
pressship submit ./my-plugin --output-dir ./build
|
|
329
|
-
pressship submit ./my-plugin --yes
|
|
259
|
+
pressship demo ./my-plugin --port 9401
|
|
260
|
+
pressship demo ./my-plugin --wp 6.8 --php 8.3
|
|
261
|
+
pressship demo ./my-plugin --reset
|
|
262
|
+
pressship demo ./my-plugin --skip-browser
|
|
330
263
|
```
|
|
331
264
|
|
|
265
|
+
The Playground server keeps running until you stop it with `Ctrl+C`.
|
|
266
|
+
|
|
332
267
|
## Managed Plugin Check
|
|
333
268
|
|
|
334
|
-
By default, Pressship
|
|
269
|
+
By default, Pressship runs the official [WordPress.org Plugin Check](https://wordpress.org/plugins/plugin-check/) against your plugin before uploading. If you don't already have WP-CLI installed, Pressship sets up its own managed environment automatically:
|
|
335
270
|
|
|
336
|
-
|
|
271
|
+
1. Detects (or downloads) WP-CLI.
|
|
272
|
+
2. Downloads WordPress core.
|
|
273
|
+
3. Sets up SQLite Database Integration (no MySQL required).
|
|
274
|
+
4. Runs `wp core install` against the SQLite-backed site.
|
|
275
|
+
5. Installs the WordPress.org Plugin Check plugin.
|
|
276
|
+
6. Bootstraps it with the correct `--require` flag.
|
|
337
277
|
|
|
338
|
-
|
|
339
|
-
- Download `wp-cli.phar` when system WP-CLI is unavailable.
|
|
340
|
-
- Download WordPress core.
|
|
341
|
-
- Create a managed `wp-config.php`.
|
|
342
|
-
- Install SQLite Database Integration for a local database-free setup.
|
|
343
|
-
- Run `wp core install` against the SQLite-backed local WordPress install.
|
|
344
|
-
- Download the WordPress.org Plugin Check plugin.
|
|
345
|
-
- Load Plugin Check with the required WP-CLI bootstrap file.
|
|
278
|
+
All cached under `~/.config/pressship/`.
|
|
346
279
|
|
|
347
|
-
|
|
280
|
+
If you'd rather use your own install:
|
|
348
281
|
|
|
349
282
|
```bash
|
|
350
|
-
pressship
|
|
283
|
+
pressship publish ./my-plugin --wp-path /path/to/wordpress
|
|
351
284
|
```
|
|
352
285
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
If you already have a local WordPress install with Plugin Check available, pass it explicitly:
|
|
286
|
+
Or skip Plugin Check entirely:
|
|
356
287
|
|
|
357
288
|
```bash
|
|
358
|
-
pressship
|
|
289
|
+
pressship publish ./my-plugin --skip-plugin-check
|
|
359
290
|
```
|
|
360
291
|
|
|
361
|
-
##
|
|
292
|
+
## Releasing through SVN
|
|
293
|
+
|
|
294
|
+
For approved plugins:
|
|
362
295
|
|
|
363
296
|
```bash
|
|
364
|
-
pressship release ./my-plugin
|
|
297
|
+
pressship release ./my-plugin
|
|
365
298
|
```
|
|
366
299
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
`release` will:
|
|
300
|
+
Pressship will:
|
|
370
301
|
|
|
371
302
|
1. Checkout or update `https://plugins.svn.wordpress.org/<slug>`.
|
|
372
303
|
2. Sync packaged plugin files into `trunk/`.
|
|
373
|
-
3.
|
|
374
|
-
4.
|
|
375
|
-
5.
|
|
376
|
-
6. Commit
|
|
304
|
+
3. Sync `.wordpress-org/` assets into the SVN `assets/` directory when that folder exists.
|
|
305
|
+
4. Create `tags/<version>` from `trunk/`.
|
|
306
|
+
5. Show `svn status` and ask before committing.
|
|
307
|
+
6. Commit with `--no-auth-cache` and a generated WordPress.org SVN password.
|
|
308
|
+
|
|
309
|
+
For commits, Pressship uses the saved WordPress.org login to infer your SVN username. If no SVN password is saved yet, it points you to your WordPress.org SVN password page:
|
|
310
|
+
|
|
311
|
+
```text
|
|
312
|
+
https://profiles.wordpress.org/<username>/profile/edit/group/3/?screen=svn-password
|
|
313
|
+
```
|
|
377
314
|
|
|
378
|
-
|
|
315
|
+
Generate the password there, paste it into Pressship once, and it will be stored locally under `~/.config/pressship/svn-credentials.json` for future releases.
|
|
379
316
|
|
|
380
317
|
```bash
|
|
381
318
|
pressship release ./my-plugin --slug my-plugin
|
|
382
319
|
pressship release ./my-plugin --version 1.2.3
|
|
383
320
|
pressship release ./my-plugin --username WpOrgUser
|
|
384
321
|
pressship release ./my-plugin --message "Release 1.2.3"
|
|
385
|
-
pressship release ./my-plugin --ignore "assets/**/*.mp4"
|
|
386
322
|
pressship release ./my-plugin --dry-run
|
|
387
323
|
pressship release ./my-plugin --yes
|
|
324
|
+
pressship release ./my-plugin --no-install-svn
|
|
388
325
|
```
|
|
389
326
|
|
|
390
|
-
##
|
|
391
|
-
|
|
392
|
-
Pressship creates a zip with one top-level plugin folder, matching the format expected by WordPress plugin upload.
|
|
393
|
-
|
|
394
|
-
It excludes common development artifacts by default:
|
|
395
|
-
|
|
396
|
-
- `.git`
|
|
397
|
-
- `.gitignore`
|
|
398
|
-
- `.github`
|
|
399
|
-
- `.DS_Store`
|
|
400
|
-
- `.idea`
|
|
401
|
-
- `.vscode`
|
|
402
|
-
- `.env`
|
|
403
|
-
- `.env.*`
|
|
404
|
-
- `node_modules`
|
|
405
|
-
- `dist`
|
|
406
|
-
- `build`
|
|
407
|
-
- `coverage`
|
|
408
|
-
- `tests`
|
|
409
|
-
- `*.log`
|
|
410
|
-
- `*.zip`
|
|
411
|
-
- `.pressshipignore`
|
|
412
|
-
- legacy `.pressportignore`
|
|
327
|
+
## Agent skill
|
|
413
328
|
|
|
414
|
-
|
|
329
|
+
Pressship ships with a publishing skill for coding agents (Codex, Claude Code, etc.). It teaches your agent to publish WordPress plugins cautiously — dry-run first, state-aware, with a final review step before any upload.
|
|
415
330
|
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
docs/raw/**
|
|
419
|
-
playground/**
|
|
331
|
+
```bash
|
|
332
|
+
npx skills add f/pressship --skill wordpress-plugin-publish -a codex
|
|
420
333
|
```
|
|
421
334
|
|
|
422
|
-
|
|
335
|
+
Replace `codex` with another supported agent name, e.g. `claude-code`. List available skills first:
|
|
423
336
|
|
|
424
337
|
```bash
|
|
425
|
-
|
|
426
|
-
pressship publish ./my-plugin --ignore "assets/**/*.mp4"
|
|
427
|
-
pressship pack ./my-plugin --ignore "assets/**/*.mp4"
|
|
428
|
-
pressship release ./my-plugin --ignore "assets/**/*.mp4"
|
|
338
|
+
npx skills add f/pressship --list
|
|
429
339
|
```
|
|
430
340
|
|
|
431
|
-
## Configuration
|
|
341
|
+
## Configuration
|
|
432
342
|
|
|
433
343
|
Pressship stores local state under your user config directory:
|
|
434
344
|
|
|
435
|
-
```
|
|
345
|
+
```
|
|
436
346
|
~/.config/pressship/
|
|
437
347
|
```
|
|
438
348
|
|
|
439
|
-
|
|
349
|
+
Contents:
|
|
440
350
|
|
|
441
|
-
- WordPress.org browser session storage
|
|
442
|
-
-
|
|
443
|
-
-
|
|
444
|
-
- Managed WordPress core
|
|
445
|
-
- Generated Playground demo blueprints
|
|
351
|
+
- WordPress.org browser session storage
|
|
352
|
+
- Saved WordPress.org SVN passwords for release commits
|
|
353
|
+
- Debug screenshots from failed browser automation
|
|
354
|
+
- Managed Plugin Check cache (WP-CLI phar, WordPress core, SQLite, Plugin Check plugin)
|
|
355
|
+
- Generated Playground demo blueprints
|
|
446
356
|
|
|
447
|
-
|
|
357
|
+
Override the location:
|
|
448
358
|
|
|
449
359
|
```bash
|
|
450
360
|
PRESSSHIP_CONFIG_DIR=/tmp/pressship pressship status
|
|
451
361
|
```
|
|
452
362
|
|
|
453
|
-
|
|
363
|
+
> `PRESSPORT_CONFIG_DIR` is still respected as a legacy fallback.
|
|
454
364
|
|
|
455
|
-
##
|
|
365
|
+
## Documentation
|
|
456
366
|
|
|
457
|
-
|
|
367
|
+
Full docs live at **<https://pressship.org>**.
|
|
458
368
|
|
|
459
|
-
|
|
369
|
+
The source is in [`website/`](./website) and runs as a standard Docusaurus site:
|
|
460
370
|
|
|
461
371
|
```bash
|
|
462
|
-
|
|
372
|
+
npm run docs:dev # Local dev server
|
|
373
|
+
npm run docs:build # Production build
|
|
374
|
+
npm run docs:serve # Preview production build
|
|
463
375
|
```
|
|
464
376
|
|
|
465
|
-
|
|
377
|
+
GitHub Pages deployment is wired up in [`.github/workflows/docs.yml`](.github/workflows/docs.yml).
|
|
378
|
+
|
|
379
|
+
## Development
|
|
466
380
|
|
|
467
381
|
```bash
|
|
468
|
-
|
|
382
|
+
npm install
|
|
383
|
+
npm run dev -- --help # Run the CLI locally
|
|
384
|
+
npm run typecheck
|
|
385
|
+
npm test
|
|
386
|
+
npm run build
|
|
469
387
|
```
|
|
470
388
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
Run:
|
|
389
|
+
Try local commands without publishing the package:
|
|
474
390
|
|
|
475
391
|
```bash
|
|
476
|
-
|
|
477
|
-
|
|
392
|
+
npm run dev -- login
|
|
393
|
+
npm run dev -- whoami
|
|
394
|
+
npm run dev -- pack ./my-plugin
|
|
395
|
+
npm run dev -- publish ./my-plugin --dry-run
|
|
478
396
|
```
|
|
479
397
|
|
|
480
|
-
|
|
398
|
+
Package smoke test:
|
|
481
399
|
|
|
482
400
|
```bash
|
|
483
|
-
|
|
484
|
-
pressship login
|
|
401
|
+
npm pack --dry-run
|
|
485
402
|
```
|
|
486
403
|
|
|
487
|
-
|
|
404
|
+
## Troubleshooting
|
|
488
405
|
|
|
489
|
-
|
|
406
|
+
<details>
|
|
407
|
+
<summary><strong>Browser runtime missing</strong></summary>
|
|
490
408
|
|
|
491
|
-
|
|
409
|
+
Pressship installs Chromium automatically. If that fails:
|
|
492
410
|
|
|
493
411
|
```bash
|
|
494
|
-
|
|
412
|
+
npx playwright install chromium
|
|
495
413
|
```
|
|
414
|
+
</details>
|
|
496
415
|
|
|
497
|
-
|
|
416
|
+
<details>
|
|
417
|
+
<summary><strong>Session expired or not logged in</strong></summary>
|
|
498
418
|
|
|
499
419
|
```bash
|
|
500
|
-
pressship
|
|
420
|
+
pressship logout
|
|
421
|
+
pressship login
|
|
501
422
|
```
|
|
423
|
+
</details>
|
|
502
424
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
The WordPress.org submission and reupload flows are browser automation over the logged-in developer page, not a documented public API. If WordPress.org changes the form, Pressship fails loudly and saves a debug screenshot under the config directory.
|
|
506
|
-
|
|
507
|
-
## Documentation Site
|
|
508
|
-
|
|
509
|
-
The documentation site lives in `website/`.
|
|
425
|
+
<details>
|
|
426
|
+
<summary><strong>Plugin Check setup problems</strong></summary>
|
|
510
427
|
|
|
511
|
-
|
|
428
|
+
The managed environment needs PHP and internet access on first run. To bypass:
|
|
512
429
|
|
|
513
430
|
```bash
|
|
514
|
-
|
|
431
|
+
pressship publish ./my-plugin --skip-plugin-check
|
|
515
432
|
```
|
|
516
433
|
|
|
517
|
-
|
|
434
|
+
To use your own WordPress install:
|
|
518
435
|
|
|
519
436
|
```bash
|
|
520
|
-
|
|
437
|
+
pressship publish ./my-plugin --wp-path /path/to/wordpress
|
|
521
438
|
```
|
|
439
|
+
</details>
|
|
522
440
|
|
|
523
|
-
|
|
441
|
+
<details>
|
|
442
|
+
<summary><strong>WordPress.org form changes</strong></summary>
|
|
524
443
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
```
|
|
444
|
+
The submission flow is browser automation over the logged-in developer page (not a documented public API). If WordPress.org changes the form, Pressship fails loudly and saves a debug screenshot under `~/.config/pressship/debug/`.
|
|
445
|
+
</details>
|
|
528
446
|
|
|
529
|
-
|
|
447
|
+
## Security
|
|
530
448
|
|
|
531
|
-
|
|
449
|
+
- Pressship **never stores your WordPress.org password**.
|
|
450
|
+
- Login is completed in a real browser by you.
|
|
451
|
+
- Playwright browser session state is stored locally for WordPress.org browser automation.
|
|
452
|
+
- If you run an SVN release, Pressship can store the generated WordPress.org SVN password locally so future commits can run non-interactively.
|
|
453
|
+
- `pressship logout` removes the local browser session; it does **not** revoke other active WordPress.org sessions.
|
|
532
454
|
|
|
533
|
-
|
|
534
|
-
Install dependencies with your preferred Node package manager, then run:
|
|
455
|
+
## Contributing
|
|
535
456
|
|
|
536
|
-
|
|
537
|
-
- `typecheck`
|
|
538
|
-
- `test`
|
|
539
|
-
- `build`
|
|
540
|
-
- `docs:build`
|
|
541
|
-
```
|
|
457
|
+
Issues, ideas, and pull requests are welcome. Please open an issue first for larger changes so we can discuss the direction.
|
|
542
458
|
|
|
543
|
-
|
|
459
|
+
When opening a PR, please:
|
|
544
460
|
|
|
545
|
-
|
|
546
|
-
Run
|
|
461
|
+
- Add or update relevant tests (`npm test`).
|
|
462
|
+
- Run `npm run typecheck` and `npm run build`.
|
|
463
|
+
- Keep new commands consistent with the existing CLI patterns.
|
|
547
464
|
|
|
548
|
-
|
|
549
|
-
- `whoami`
|
|
550
|
-
- `status`
|
|
551
|
-
- `pack ./my-plugin`
|
|
552
|
-
- `publish ./my-plugin --dry-run`
|
|
553
|
-
- `submit ./my-plugin --dry-run`
|
|
554
|
-
- `release ./my-plugin --dry-run`
|
|
555
|
-
```
|
|
465
|
+
## Acknowledgements
|
|
556
466
|
|
|
557
|
-
|
|
467
|
+
Pressship is built on the work of many people and projects:
|
|
558
468
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
469
|
+
- [WordPress.org](https://wordpress.org/) and the plugin review team
|
|
470
|
+
- [WP-CLI](https://wp-cli.org/) and [Plugin Check](https://github.com/WordPress/plugin-check)
|
|
471
|
+
- [SQLite Database Integration](https://github.com/WordPress/sqlite-database-integration)
|
|
472
|
+
- [WordPress Playground](https://wordpress.org/playground/)
|
|
473
|
+
- [Playwright](https://playwright.dev/) for browser automation
|
|
474
|
+
- [Docusaurus](https://docusaurus.io/) for the documentation site
|
|
562
475
|
|
|
563
|
-
##
|
|
476
|
+
## Disclaimer
|
|
564
477
|
|
|
565
|
-
|
|
566
|
-
- Login is completed in a real browser.
|
|
567
|
-
- Pressship stores Playwright browser session state locally.
|
|
568
|
-
- `logout` removes Pressship's saved local browser session.
|
|
569
|
-
- `logout` does not revoke other active WordPress.org sessions.
|
|
478
|
+
**Pressship is an independent, community project.** It is not affiliated with, endorsed by, or sponsored by WordPress, WordPress.org, the WordPress Foundation, or Automattic. The WordPress® trademark is the property of the WordPress Foundation.
|
|
570
479
|
|
|
571
480
|
## License
|
|
572
481
|
|
|
573
|
-
MIT
|
|
482
|
+
[MIT](LICENSE) © Pressship contributors
|