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.
- Clone this repo
git clone [email protected]:tombroucke/privatewpackagist.git
- Install dependencies
composer install --optimize-autoloader --no-dev
-
Create .env
Duplicate .env.example to .env & setAPP_NAME
,APP_URL
,PACKAGES_VENDOR_NAME
and database credentials -
Generate encryption key
php artisan key:generate
- Run migrations
php artisan migrate
- Add a filament user
php artisan make:filament-user
- 2FA is required, you will be prompted to set this up after the first login
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
php artisan package:update [package]
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}}**
Find your License Key in the ACF licenses page.
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 namewoocommerce_helper_data
. Extract the values from the serialized data.
- 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
- Slug: gravityformsmailchimp, gravityformszapier etc.
- Source URL: The url attached to your license
- Required fields are
- Slug: You need to find this in the plugin / theme source code. E.g. 'discount-rules-v2-pro'
- Source URL: The url attached to your license
- Metadata URL: This is a little tricky to find (search for
Puc_v4_Factory::buildUpdateChecker
). E.g. 'https://my.flycart.org?wpaction=updatecheck&wpslug=discount-rules-v2-pro&dlid=${{ WOO_DISCOUNT_RULES_PRO_LICENSE_KEY }}'
- 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}}**
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
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.
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
Advanced Custom Fields Pro
type: acf
slug: advanced-custom-fields-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
}
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 }}
}
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
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
}
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 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 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
}
- Add license key env variable validation to PuC.
- Add failed releases in notification email
- Exhaustive testing