refactor: migrate plugin updates from GitHub to Mahgit
Build plugin release / release (push) Failing after 5s
Build plugin release / release (push) Failing after 5s
This commit is contained in:
@@ -0,0 +1,54 @@
|
|||||||
|
name: Build plugin release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
code: read
|
||||||
|
releases: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Validate version and build ZIP
|
||||||
|
env:
|
||||||
|
RELEASE_TAG: ${{ gitea.ref_name }}
|
||||||
|
run: |
|
||||||
|
VERSION="${RELEASE_TAG#v}"
|
||||||
|
grep -q "Version: ${VERSION}$" dabestaniha-authenticate-bridge.php
|
||||||
|
mkdir -p build/mahak-authenticate-bridge dist
|
||||||
|
rsync -a \
|
||||||
|
--exclude='.git/' \
|
||||||
|
--exclude='.gitea/' \
|
||||||
|
--exclude='build/' \
|
||||||
|
--exclude='dist/' \
|
||||||
|
--exclude='test/' \
|
||||||
|
./ build/mahak-authenticate-bridge/
|
||||||
|
cd build
|
||||||
|
zip -qr ../dist/mahak-authenticate-bridge.zip mahak-authenticate-bridge
|
||||||
|
|
||||||
|
- name: Publish Gitea release
|
||||||
|
env:
|
||||||
|
GITEA_API_URL: ${{ gitea.api_url }}
|
||||||
|
GITEA_REPOSITORY: ${{ gitea.repository }}
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
RELEASE_TAG: ${{ gitea.ref_name }}
|
||||||
|
run: |
|
||||||
|
RELEASE_JSON="$(curl --fail-with-body --silent --show-error \
|
||||||
|
--request POST \
|
||||||
|
--header "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
--header 'Content-Type: application/json' \
|
||||||
|
--data "{\"tag_name\":\"${RELEASE_TAG}\",\"name\":\"${RELEASE_TAG}\",\"draft\":false,\"prerelease\":false}" \
|
||||||
|
"${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/releases")"
|
||||||
|
RELEASE_ID="$(printf '%s' "$RELEASE_JSON" | grep -o '"id":[0-9]*' | head -n 1 | cut -d: -f2)"
|
||||||
|
test -n "$RELEASE_ID"
|
||||||
|
curl --fail-with-body --silent --show-error \
|
||||||
|
--request POST \
|
||||||
|
--header "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
--form 'attachment=@dist/mahak-authenticate-bridge.zip' \
|
||||||
|
"${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/releases/${RELEASE_ID}/assets?name=mahak-authenticate-bridge.zip"
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
name: Build plugin release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Validate version and build ZIP
|
|
||||||
env:
|
|
||||||
RELEASE_TAG: ${{ github.ref_name }}
|
|
||||||
run: |
|
|
||||||
VERSION="${RELEASE_TAG#v}"
|
|
||||||
grep -q "Version: ${VERSION}$" dabestaniha-authenticate-bridge.php
|
|
||||||
mkdir -p build/mahak-authenticate-bridge dist
|
|
||||||
rsync -a \
|
|
||||||
--exclude='.git/' \
|
|
||||||
--exclude='.github/' \
|
|
||||||
--exclude='build/' \
|
|
||||||
--exclude='dist/' \
|
|
||||||
--exclude='test/' \
|
|
||||||
./ build/mahak-authenticate-bridge/
|
|
||||||
cd build
|
|
||||||
zip -qr ../dist/mahak-authenticate-bridge.zip mahak-authenticate-bridge
|
|
||||||
|
|
||||||
- name: Publish GitHub release
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
RELEASE_TAG: ${{ github.ref_name }}
|
|
||||||
run: gh release create "$RELEASE_TAG" dist/mahak-authenticate-bridge.zip --generate-notes --title "$RELEASE_TAG"
|
|
||||||
@@ -16,7 +16,7 @@ Debug mode is disabled by default. An administrator can enable it from **Setting
|
|||||||
|
|
||||||
Administrators can check for and install published releases from **Settings > Mahak Authentication**. Updates also appear in WordPress's standard **Plugins** and **Updates** screens.
|
Administrators can check for and install published releases from **Settings > Mahak Authentication**. Updates also appear in WordPress's standard **Plugins** and **Updates** screens.
|
||||||
|
|
||||||
To publish an update, change the plugin `Version` header and `MAHAK_AUTHENTICATE_BRIDGE_VERSION` constant to the same version, commit the change, and push a matching tag such as `v2.3.0` to GitHub. The release workflow builds and attaches the ZIP required by the WordPress updater.
|
To publish an update, change the plugin `Version` header and `MAHAK_AUTHENTICATE_BRIDGE_VERSION` constant to the same version, commit the change, and push a matching tag such as `v2.3.0` to Mahgit. The Gitea Actions workflow builds and attaches the ZIP required by the WordPress updater.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Plugin Name: Mahak Authenticate Bridge
|
* Plugin Name: Mahak Authenticate Bridge
|
||||||
* Plugin URI: https://github.com/dabestaniha/mahak-authenticate-bridge
|
* Plugin URI: https://mahgit.ir/dabestaniha/mahak-authenticate-bridge
|
||||||
* Description: Authenticate WordPress user via json web token from Mahakiha Application.
|
* Description: Authenticate WordPress user via json web token from Mahakiha Application.
|
||||||
* Version: 2.2.1
|
* Version: 2.2.2
|
||||||
* Requires PHP: 7.4
|
* Requires PHP: 7.4
|
||||||
* Update URI: https://github.com/dabestaniha/mahak-authenticate-bridge
|
* Update URI: https://mahgit.ir/dabestaniha/mahak-authenticate-bridge
|
||||||
* Author: Dabestaniha
|
* Author: Dabestaniha
|
||||||
*
|
*
|
||||||
* Example: https://wordpress.test/mahak/login/?token=eyJ0...
|
* Example: https://wordpress.test/mahak/login/?token=eyJ0...
|
||||||
@@ -18,7 +18,7 @@ use Dabestaniha\AuthenticateBridge\App\Http\Controllers\SettingsPageMenuControll
|
|||||||
use Dabestaniha\AuthenticateBridge\App\Http\Controllers\SettingsPageFormController;
|
use Dabestaniha\AuthenticateBridge\App\Http\Controllers\SettingsPageFormController;
|
||||||
use Dabestaniha\AuthenticateBridge\App\Support\PluginUpdater;
|
use Dabestaniha\AuthenticateBridge\App\Support\PluginUpdater;
|
||||||
|
|
||||||
define('MAHAK_AUTHENTICATE_BRIDGE_VERSION', '2.2.1');
|
define('MAHAK_AUTHENTICATE_BRIDGE_VERSION', '2.2.2');
|
||||||
define('MAHAK_AUTHENTICATE_BRIDGE_FILE', __FILE__);
|
define('MAHAK_AUTHENTICATE_BRIDGE_FILE', __FILE__);
|
||||||
|
|
||||||
require_once __DIR__.'/src/Autoloader.php';
|
require_once __DIR__.'/src/Autoloader.php';
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ namespace Dabestaniha\AuthenticateBridge\App\Support;
|
|||||||
|
|
||||||
final class PluginUpdater
|
final class PluginUpdater
|
||||||
{
|
{
|
||||||
private const API_URL = 'https://api.github.com/repos/dabestaniha/mahak-authenticate-bridge/releases/latest';
|
private const API_URL = 'https://mahgit.ir/api/v1/repos/dabestaniha/mahak-authenticate-bridge/releases/latest';
|
||||||
private const RELEASE_ASSET = 'mahak-authenticate-bridge.zip';
|
private const RELEASE_ASSET = 'mahak-authenticate-bridge.zip';
|
||||||
private const RELEASE_CACHE = 'mahak_authenticate_bridge_release';
|
private const RELEASE_CACHE = 'mahak_authenticate_bridge_gitea_release';
|
||||||
private const CHECK_ACTION = 'mahak_authenticate_check_updates';
|
private const CHECK_ACTION = 'mahak_authenticate_check_updates';
|
||||||
|
|
||||||
private static ?self $instance = null;
|
private static ?self $instance = null;
|
||||||
@@ -74,7 +74,7 @@ final class PluginUpdater
|
|||||||
'slug' => $this->slug,
|
'slug' => $this->slug,
|
||||||
'version' => $this->releaseVersion($release),
|
'version' => $this->releaseVersion($release),
|
||||||
'author' => 'Dabestaniha',
|
'author' => 'Dabestaniha',
|
||||||
'homepage' => $release['html_url'] ?? 'https://github.com/dabestaniha/mahak-authenticate-bridge',
|
'homepage' => $release['html_url'] ?? 'https://mahgit.ir/dabestaniha/mahak-authenticate-bridge',
|
||||||
'download_link' => $package,
|
'download_link' => $package,
|
||||||
'requires_php' => '7.4',
|
'requires_php' => '7.4',
|
||||||
'sections' => [
|
'sections' => [
|
||||||
@@ -177,30 +177,30 @@ final class PluginUpdater
|
|||||||
|
|
||||||
$response = wp_remote_get(self::API_URL, [
|
$response = wp_remote_get(self::API_URL, [
|
||||||
'headers' => [
|
'headers' => [
|
||||||
'Accept' => 'application/vnd.github+json',
|
'Accept' => 'application/json',
|
||||||
'User-Agent' => 'Mahak-Authenticate-Bridge/'.MAHAK_AUTHENTICATE_BRIDGE_VERSION,
|
'User-Agent' => 'Mahak-Authenticate-Bridge/'.MAHAK_AUTHENTICATE_BRIDGE_VERSION,
|
||||||
],
|
],
|
||||||
'timeout' => 10,
|
'timeout' => 10,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (is_wp_error($response)) {
|
if (is_wp_error($response)) {
|
||||||
return new \WP_Error('mahak_update_request_failed', 'Could not contact GitHub to check for plugin updates.');
|
return new \WP_Error('mahak_update_request_failed', 'Could not contact Mahgit to check for plugin updates.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wp_remote_retrieve_response_code($response) !== 200) {
|
if (wp_remote_retrieve_response_code($response) !== 200) {
|
||||||
return new \WP_Error('mahak_update_response_invalid', 'No published plugin release is currently available on GitHub.');
|
return new \WP_Error('mahak_update_response_invalid', 'No published plugin release is currently available on Mahgit.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$release = json_decode(wp_remote_retrieve_body($response), true);
|
$release = json_decode(wp_remote_retrieve_body($response), true);
|
||||||
|
|
||||||
if (!is_array($release) || !empty($release['draft']) || !empty($release['prerelease'])) {
|
if (!is_array($release) || !empty($release['draft']) || !empty($release['prerelease'])) {
|
||||||
return new \WP_Error('mahak_update_release_invalid', 'GitHub returned invalid plugin release information.');
|
return new \WP_Error('mahak_update_release_invalid', 'Mahgit returned invalid plugin release information.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->releaseVersion($release) === '' || $this->releasePackage($release) === null) {
|
if ($this->releaseVersion($release) === '' || $this->releasePackage($release) === null) {
|
||||||
return new \WP_Error(
|
return new \WP_Error(
|
||||||
'mahak_update_asset_missing',
|
'mahak_update_asset_missing',
|
||||||
'The latest GitHub release does not contain a valid mahak-authenticate-bridge.zip package.'
|
'The latest Mahgit release does not contain a valid mahak-authenticate-bridge.zip package.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +228,7 @@ final class PluginUpdater
|
|||||||
if (
|
if (
|
||||||
$url !== ''
|
$url !== ''
|
||||||
&& wp_parse_url($url, PHP_URL_SCHEME) === 'https'
|
&& wp_parse_url($url, PHP_URL_SCHEME) === 'https'
|
||||||
&& wp_parse_url($url, PHP_URL_HOST) === 'github.com'
|
&& wp_parse_url($url, PHP_URL_HOST) === 'mahgit.ir'
|
||||||
&& strpos($path, '/dabestaniha/mahak-authenticate-bridge/releases/download/') === 0
|
&& strpos($path, '/dabestaniha/mahak-authenticate-bridge/releases/download/') === 0
|
||||||
) {
|
) {
|
||||||
return $url;
|
return $url;
|
||||||
|
|||||||
@@ -310,9 +310,9 @@ function test_debug_error_details(): void
|
|||||||
|
|
||||||
function test_plugin_update_discovery(): void
|
function test_plugin_update_discovery(): void
|
||||||
{
|
{
|
||||||
$packageUrl = 'https://github.com/dabestaniha/mahak-authenticate-bridge/releases/download/v2.3.0/mahak-authenticate-bridge.zip';
|
$packageUrl = 'https://mahgit.ir/dabestaniha/mahak-authenticate-bridge/releases/download/v2.3.0/mahak-authenticate-bridge.zip';
|
||||||
$mockRelease = function ($response, array $request, string $url) use ($packageUrl) {
|
$mockRelease = function ($response, array $request, string $url) use ($packageUrl) {
|
||||||
if ($url !== 'https://api.github.com/repos/dabestaniha/mahak-authenticate-bridge/releases/latest') {
|
if ($url !== 'https://mahgit.ir/api/v1/repos/dabestaniha/mahak-authenticate-bridge/releases/latest') {
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ function test_plugin_update_discovery(): void
|
|||||||
'headers' => [],
|
'headers' => [],
|
||||||
'body' => json_encode([
|
'body' => json_encode([
|
||||||
'tag_name' => 'v2.3.0',
|
'tag_name' => 'v2.3.0',
|
||||||
'html_url' => 'https://github.com/dabestaniha/mahak-authenticate-bridge/releases/tag/v2.3.0',
|
'html_url' => 'https://mahgit.ir/dabestaniha/mahak-authenticate-bridge/releases/tag/v2.3.0',
|
||||||
'body' => 'Test release',
|
'body' => 'Test release',
|
||||||
'draft' => false,
|
'draft' => false,
|
||||||
'prerelease' => false,
|
'prerelease' => false,
|
||||||
@@ -335,7 +335,7 @@ function test_plugin_update_discovery(): void
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
delete_site_transient('mahak_authenticate_bridge_release');
|
delete_site_transient('mahak_authenticate_bridge_gitea_release');
|
||||||
add_filter('pre_http_request', $mockRelease, 10, 3);
|
add_filter('pre_http_request', $mockRelease, 10, 3);
|
||||||
|
|
||||||
$updates = apply_filters('pre_set_site_transient_update_plugins', (object) [
|
$updates = apply_filters('pre_set_site_transient_update_plugins', (object) [
|
||||||
@@ -345,11 +345,11 @@ function test_plugin_update_discovery(): void
|
|||||||
|
|
||||||
remove_filter('pre_http_request', $mockRelease, 10);
|
remove_filter('pre_http_request', $mockRelease, 10);
|
||||||
|
|
||||||
assert_true(isset($updates->response[TEST_PLUGIN]), 'A newer GitHub release was not offered as a WordPress update.');
|
assert_true(isset($updates->response[TEST_PLUGIN]), 'A newer Mahgit release was not offered as a WordPress update.');
|
||||||
assert_true($updates->response[TEST_PLUGIN]->new_version === '2.3.0', 'The offered plugin version was incorrect.');
|
assert_true($updates->response[TEST_PLUGIN]->new_version === '2.3.0', 'The offered plugin version was incorrect.');
|
||||||
assert_true($updates->response[TEST_PLUGIN]->package === $packageUrl, 'The release package URL was incorrect.');
|
assert_true($updates->response[TEST_PLUGIN]->package === $packageUrl, 'The release package URL was incorrect.');
|
||||||
|
|
||||||
pass('Published GitHub releases are discovered by the WordPress updater');
|
pass('Published Mahgit releases are discovered by the WordPress updater');
|
||||||
}
|
}
|
||||||
|
|
||||||
boot_wordpress();
|
boot_wordpress();
|
||||||
|
|||||||
Reference in New Issue
Block a user