Skip to content

tombroucke/privatewpackagist

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Warning

I haven't tagged a release yet, but the application should work just fine. If you encounter a bug, fetch the latest changes and see if this fixes the issue. if it doesn't, please create an issue
As the application is still in an early stage, I am open to suggestions and improvements. start a discussing

This application allows you to maintain a composer repository with all your premium WordPress plugins. It is highly inspired by https://github.com/generoi/github-action-update-plugins, You can use the same recipes mentioned in their README file.

Installation

  1. Clone this repo
git clone [email protected]:tombroucke/privatewpackagist.git
  1. Install dependencies
composer install --optimize-autoloader --no-dev
  1. Create .env
    Duplicate .env.example to .env & set APP_NAME, APP_URL, PACKAGES_VENDOR_NAME and database credentials

  2. Generate encryption key

php artisan key:generate
  1. Run migrations
php artisan migrate
  1. Add a filament user
php artisan make:filament-user

Setup

  • 2FA is required, you will be prompted to set this up after the first login

Schedule package updates

To schedule package updates (every 6 hours), you need to add this cron job:

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Manually triggering package updates

php artisan package:update [package]

Packages

WPML packages

You need to create a Site Key in Your Registered Sites.

You can find your User Id and License key from the wpml.org downloads page. Just copy a download link url, and extract the variables.

https://wpml.org/?download=6088&user_id=**{{user_id}}**&subscription_key=**{{license_key}}**

ACF package

Find your License Key in the ACF licenses page.

Woocommerce packages

Find your Access Token and Access Token Secret:

  • In the wp_options table of a site that is already connected to your account. Look for an option with name woocommerce_helper_data. Extract the values from the serialized data.

EDD (Easy Digital Downloads) packages

  • Required fields are
    • Slug: You need to find this in the plugin / theme source code. E.g. 'Polylang Pro'
    • Source URL: The url attached to your license
    • Endpoint URL: You need to find this in the plugin source code (search for edd_action). E.g. 'https://polylang.pro'
    • Method: GET or POST

Gravity Forms packages

  • Slug: gravityformsmailchimp, gravityformszapier etc.
  • Source URL: The url attached to your license

PuC (YahnisElsts Plugin Update Checker) packages

WP Rocket packages

  • Find your License Key in your WP Rocket account by copying the link behind "Download WP Rocket"

https://wp-rocket.me/download/24782/**{{license_key}}**

Direct packages

Packages with direct links E.g. Revolution Slider, WPBakery Visual Composer

  • You can add environment variable in the name. Note that the variable needs to be prefixed with the plugin name

Manual packages

For plugins that are not (yet) supported, you can add a package and choose the Manual recipe. You can create a release manually and upload your plugin file.

Usage

https://example.com/repo/packages.json and all the packages are protected with basic authentication. You can create credentials in the admin/tokens screen: https://example.com/tokens\ You should generate a different token for each application, so you can revoke the tokens later on.

Add the repository to your composer.json file (replace privatewpackagist with your chosen package vendor name):

{
    "type": "composer",
    "url": "https://example.com/repo",
    "only": ["privatewpackagist-plugin/*", "privatewpackagist-theme/*"]
}
composer require privatewpackagist-plugin/advanced-custom-fields-pro

Package configurations

ACF

Advanced Custom Fields Pro

type: acf
slug: advanced-custom-fields-pro

Admin Columns Pro

Admin Columns Pro

type: admin_columns_pro
slug: admin-columns-pro

{
	slug: admin-columns-pro
}
Addon - Advanced Custom Fields

type: admin_columns_pro
slug: ac-addon-acf

{
	slug: ac-addon-acf
}
Addon - BuddyPress

type: admin_columns_pro
slug: ac-addon-buddypress

{
	slug: ac-addon-buddypress
}
Addon - Events Calendar

type: admin_columns_pro
slug: ac-addon-events-calendar

{
	slug: ac-addon-events-calendar
}
Addon - Gravity Forms

type: admin_columns_pro
slug: ac-addon-gravityforms

{
	slug: ac-addon-gravityforms
}
Addon - JetEngine

type: admin_columns_pro
slug: ac-addon-jetengine

{
	slug: ac-addon-jetengine
}
Addon - Meta Box

type: admin_columns_pro
slug: ac-addon-metabox

{
	slug: ac-addon-metabox
}
Addon - Ninja Forms

type: admin_columns_pro
slug: ac-addon-ninjaforms

{
	slug: ac-addon-ninjaforms
}
Addon - Pods

type: admin_columns_pro
slug: ac-addon-pods

{
	slug: ac-addon-pods
}
Addon - Toolset Types

type: admin_columns_pro
slug: ac-addon-types

{
	slug: ac-addon-types
}
Addon - Woocommerce

type: admin_columns_pro
slug: ac-addon-woocommerce

{
	slug: ac-addon-woocommerce
}
Addon - Yoast SEO

type: admin_columns_pro
slug: ac-addon-yoast-seo

{
	slug: ac-addon-yoast-seo
}

Direct

Revolution slider

type: direct
slug: revslider

{
	url: https://updates.themepunch-ext-a.tools/revslider/download.php?code=${{ REVSLIDER_LICENSE_KEY }}
}
WPBakery Page Builder

type: direct
slug: js-composer

{
	url: https://support.wpbakery.com/updates/download-link?product=vc&url=https://example.com&key=${{ JS_COMPOSER_LICENSE_KEY }}
}

EDD

Advanced Order Export For WooCommerce (Pro)

type: edd
slug: woocommerce-order-export

{
	slug: Advanced Order Export For WooCommerce (Pro),
	source_url: https://example.com,
	endpoint_url: https://algolplus.com/plugins/,
	method: GET
}
Product Sales Report Pro for WooCommerce

type: edd
slug: hm-product-sales-report-pro

{
	slug: Product Sales Report Pro for WooCommerce,
	source_url: https://example.com,
	endpoint_url: https://wpzone.co/,
	method: GET
}
PDF Invoices & Packing Slips for WooCommerce - Professional

type: edd
slug: woocommerce-pdf-ips-pro

{
	slug: PDF Invoices & Packing Slips for WooCommerce - Professional,
	source_url: https://example.com,
	endpoint_url: https://wpovernight.com/license-api,
	method: GET
}
Gravity Forms Image Choices

type: edd
slug: gf-image-choices

{
	slug: Gravity Forms Image Choices,
	source_url: https://example.com,
	endpoint_url: https://jetsloth.com,
	method: GET
}
Ultimate WooCommerce Auction Pro

type: edd
slug: ultimate-woocommerce-auction-pro

{
	slug: Ultimate WooCommerce Auction Pro,
	source_url: https://example.com,
	endpoint_url: https://auctionplugin.net/,
	method: GET
}
WP All Import

type: edd
slug: wp-all-import-pro

{
	slug: WP All Import,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Export

type: edd
slug: wp-all-export-pro

{
	slug: WP All Export,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Export - ACF Export Add-On Pro

type: edd
slug: wpae-acf-add-on

{
	slug: ACF Export Add-On Pro,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Import - ACF Add-On

type: edd
slug: wpai-acf-add-on

{
	slug: ACF Add-On,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Import - Link Cloaking Add-On

type: edd
slug: wpai-linkcloak-add-on

{
	slug: Link Cloaking Add-On,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Import - User Import Add-On

type: edd
slug: wpai-user-add-on

{
	slug: User Import Add-On,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Import - WooCommerce Add-On

type: edd
slug: wpai-woocommerce-add-on

{
	slug: WooCommerce Add-On,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
WP All Export - WooCommerce Export Add-On Pro

type: edd
slug: wpae-woocommerce-add-on

{
	slug: WooCommerce Export Add-On Pro,
	source_url: https://example.com,
	endpoint_url: https://update.wpallimport.com/check_version,
	method: GET,
	skip_license_check: true
}
Ninja Forms - Campaign Monitor

type: edd
slug: ninja-forms-campaign-monitor

{
	slug: Campaign Monitor,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - Conditional Logic

type: edd
slug: ninja-forms-conditionals

{
	slug: Conditional Logic,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - Constant Contact

type: edd
slug: ninja-forms-constant-contact

{
	slug: Constant Contact,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - Convertkit

type: edd
slug: ninja-forms-convertkit

{
	slug: Convertkit,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - EmailOctopus

type: edd
slug: ninja-forms-emailoctopus

{
	slug: EmailOctopus,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - Emma

type: edd
slug: ninja-forms-emma

{
	slug: Emma,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - File Uploads

type: edd
slug: ninja-forms-uploads

{
	slug: File Uploads,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Ninja Forms - Layout and Styles

type: edd
slug: ninja-forms-style

{
	slug: Layout and Styles,
	source_url: https://example.com,
	endpoint_url: https://ninjaforms.com/update-check/,
	method: GET
}
Forgravity Advanced Permissions

type: edd
slug: forgravity-advancedpermissions

{
	slug: Advanced Permissions,
	source_url: https://example.com,
	endpoint_url: https://cosmicgiant.com,
	method: GET
}
AffiliateWP

type: edd
slug: affiliate-wp

{
	slug: AffiliateWP,
	source_url: https://example.com/,
	endpoint_url: https://affiliatewp.com,
	method: GET
}
WooCommerce Next Order Coupon

type: edd
slug: woocommerce-next-order-coupon

{
	slug: WooCommerce Next Order Coupon,
	source_url: https://example.com,
	endpoint_url: https://wpovernight.com/license-api/,
	method: GET
}
Wp Rocket

type: wp_rocket
slug: wp-rocket

Gravity Forms

Gravityforms

type: gravity_forms
slug: gravityforms

{
	slug: gravityforms
}
Gravityformsmailchimp

type: gravity_forms
slug: gravityformsmailchimp

{
	slug: gravityformsmailchimp
}
Gravityformszapier

type: gravity_forms
slug: gravityformszapier

{
	slug: gravityformszapier
}
Gravityformsrecaptcha

type: gravity_forms
slug: gravityformsrecaptcha

{
	slug: gravityformsrecaptcha
}

PuC

These are a little tricky, not all implementations are the same. This will need a little research to get the right metadata_url, and might need some code changes. (See app/Listeners/FilebirdProPackageInformationListener)

Woo Discount Rules Pro

type: puc
slug: woo-discount-rules-pro

{
	slug: discount-rules-v2-pro,
	source_url: https://example.com,
	metadata_url: https://my.flycart.org?wpaction=updatecheck&wpslug=discount-rules-v2-pro&dlid=${{ WOO_DISCOUNT_RULES_PRO_LICENSE_KEY }}
}
Filebird Pro

type: puc
slug: filebird-pro

{
	slug: filebird_pro,
	source_url: https://example.com,
	metadata_url: https://active.ninjateam.org/json/filebird.json
}

Woocommerce

Woocommerce Product Filters

type: woocommerce
slug: woocommerce-product-filters

{
	slug: woocommerce-product-filters
}
Woocommerce Eu Vat Number

type: woocommerce
slug: woocommerce-eu-vat-number

{
	slug: woocommerce-eu-vat-number
}
Woocommerce Product Feeds

type: woocommerce
slug: woocommerce-product-feeds

{
	slug: woocommerce-product-feeds
}
Woocommerce Subscriptions

type: woocommerce
slug: woocommerce-subscriptions

{
	slug: woocommerce-subscriptions
}
Woocommerce Gateway Ogone

type: woocommerce
slug: woocommerce-gateway-ogone

{
	slug: woocommerce-gateway-ogone
}
Woocommerce Product Bundles

type: woocommerce
slug: woocommerce-product-bundles

{
	slug: woocommerce-product-bundles
}
Woocommerce Product Addons

type: woocommerce
slug: woocommerce-product-addons

{
	slug: woocommerce-product-addons
}
Woocommerce Sequential Order Numbers Pro

type: woocommerce
slug: woocommerce-sequential-order-numbers-pro

{
	slug: woocommerce-sequential-order-numbers-pro
}
Woocommerce Cost Of Goods

type: woocommerce
slug: woocommerce-cost-of-goods

{
	slug: woocommerce-cost-of-goods
}
reCaptcha for WooCommerce

type: woocommerce
slug: recaptcha-for-woocommerce

{
	slug: recaptcha-for-woocommerce
}

WPML

WPML Multilingual CMS

type: wpml
slug: sitepress-multilingual-cms

{
	slug: sitepress-multilingual-cms
}
Advanced Custom Fields Multilingual

type: wpml
slug: acfml

{
	slug: acfml
}
WooCommerce Multilingual & Multicurrency

type: wpml
slug: woocommerce-multilingual

{
	slug: woocommerce-multilingual
}
Gravity Forms Multilingual

type: wpml
slug: gravityforms-multilingual

{
	slug: gravityforms-multilingual
}
WPML SEO

type: wpml
slug: wp-seo-multilingual

{
	slug: wp-seo-multilingual
}
Media Translation

type: wpml
slug: wpml-media-translation

{
	slug: wpml-media-translation
}
String Translation

type: wpml
slug: wpml-string-translation

{
	slug: wpml-string-translation
}

TODO

  • Add license key env variable validation to PuC.
  • Add failed releases in notification email
  • Exhaustive testing

About

Expose premium WordPress plugins as composer packages

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages