Skip to content

Rebuild paid plugins in Satis on every push - #559

Merged
simonhamp merged 1 commit into
mainfrom
satis-push-builds
Oct 15, 2026
Merged

simonhamp merged 1 commit into
mainfrom
satis-push-builds

Conversation

@simonhamp

Copy link
Copy Markdown
Member

A push to a plugin's repo only refreshed its metadata on the site. Satis builds only ran on a published release, the Sync to Satis button, or satis:build. Satis publishes every branch as dev-<branch>, but that only helps if a build actually runs. So new commits on main and new WIP branches weren't installable until someone cut a release.

You can see it on plugins.nativephp.com right now. main on mobile-firebase and mobile-biometrics has commits from 3 September that were never published. Four branches on mobile-geolocation, mobile-firebase and mobile-biometrics are missing completely.

Now a push from either webhook (the per-repo one or the GitHub App) queues a new BuildPluginInSatis job for that plugin. The job waits a minute and is unique per plugin until it starts, so a burst of pushes shares one build. Satis reads the repo when it builds, so that one build picks up everything. Deleted branches drop out on the next build too.

Things to check:

  • It runs for every paid plugin, not just first-party ones. Third-party branches were already being published, they were just stale. Narrowing it to isOfficial() is a one-line change in Plugin::queueSatisRebuild().
  • Free plugins and drafts are skipped. Building a free plugin would put it in Satis and override its Packagist listing. Drafts haven't been submitted, and plugins only enter Satis on submission.
  • A release now usually means two builds. SyncPluginReleases builds straight away, and the tag's push queues another one a minute later. That's harmless, just redundant.
  • Satis will build more often. Every build on the Satis server uses the same build directory, so it's worth confirming its queue runs a single worker.
  • After deploying, branches already out of date catch up on each repo's next push. Running php artisan satis:build once catches everything up straight away.

Tests: the targeted webhook and Satis tests pass (61). The full suite passed (2025, 1 skipped for missing local config) before a final small change that added the draft check. I re-ran the targeted tests after that change.

🤖 Generated with Claude Code

A push only refreshed the plugin's metadata, so new commits on main and new
branches weren't installable until someone cut a release or clicked Sync to
Satis. Satis publishes every branch as dev-<branch>, so a push now queues a
build of that plugin.

The build waits a minute and is unique per plugin, so a burst of pushes
shares one build. Free plugins and drafts are skipped, which matches when
plugins enter Satis today.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@simonhamp
simonhamp marked this pull request as ready for review October 15, 2026 16:06
@simonhamp
simonhamp merged commit 2d5e963 into main Oct 15, 2026
3 checks passed
@simonhamp
simonhamp deleted the satis-push-builds branch October 15, 2026 16:06
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.

1 participant