从私人 GitHub Repo 更新 WordPress 主题/插件

问题描述 投票:0回答:3

背景

我正在为我的 WordPress 网站开发一个自定义主题,我想从一个私有的 GitHub 存储库进行管理。 (这个主题永远不会被推入 WordPress 市场)一般的想法是我使用 repo 来管理代码,然后一旦我标记了一个新版本,该标记就会触发 WordPress 主题的更新。

我有这个模式,使用以下作为模板:
https://github.com/krafit/wp-gitlab-updater
(是的,我知道 repo 是针对 Gitlab 而不是 GitHub)

由于我的回购是私人的,我需要生成一个用户令牌以允许更新主题。而且因为用户令牌能够访问我所有的私有存储库,所以从安全的角度来看,与另一个插件共享用户令牌的想法是令人不安的。 (意思是,我不喜欢使用这样的插件:https://github.com/afragen/git-updater

问题

问题是 GitHub 已经 deprecated 使用

access_token
作为查询字符串参数,因此所有令牌都必须作为
Authorization
标头发送。

如何将授权标头添加到 WordPress 发送以下载工件的请求中?

我试过的

当我检查新标签时,我使用代码:

  protected function fetch_tags_from_repo( $git_url, $repo, $access_token ) {
    $request_url = "$git_url/repos/$repo/tags?access_token=$access_token";
    $args     = [
      "headers" => [
        "Accept" => "application/vnd.github.v3+json",
        "Authorization" => "token " . $access_token
      ]
    ];
    $request     = wp_safe_remote_get( $request_url, $args );

    return $request;
  }

这没有任何问题。然而……

pre_set_site_transient_update_themes
钩子期间,我返回一个看起来像这样的对象:

  $transient->response[ $theme['name'] ]['theme']       = $theme['name'];
  $transient->response[ $theme['name'] ]['new_version'] = $latest_version;
  $transient->response[ $theme['name'] ]['package']     = $theme_package;

问题是,我无法将

Authorization
标头添加到瞬态响应对象。因此,当 WP 稍后尝试下载工件时,它会失败。

注意:

$theme_package
字符串是一个 URL,如下所示:

$theme_package = "$git_url/repos/$repo/zipball/refs/tags/$latest_version";

感谢任何支持,谢谢!

wordpress wordpress-theming wordpress-plugin-creation
3个回答
0
投票

老实说,这个问题已经很累了,够了……

回答

从 GitHub 中弹出并使用 Gitlab,因为它们仍然支持

access_token
作为标题。他们有无限的免费私人回购<5gb storage.


0
投票

如果您打算使用许可证分发私人仓库,我建议您不要在脚本中公开您的访问凭证。

相反,您应该将 GitHub PHP API 与您在回购设置中设置的 SSH 密钥或在您的回购上授予访问权限的 GitHub 应用程序一起使用。

这里有一个可靠的 SDK 可以从:

https://github.com/KnpLabs/php-github-api

或者如您在回答中所建议的那样,可以使用第三方服务代表您管理凭据。

Gitlab 是一个不错的通用且低成本的选择,但如果您正在寻找专门用于 Wordpress 开发的东西,我推荐WP Package Editor (WP2E)

除其他外,该服务使用注册的 GitHub 应用程序从公共/私人 GitHub 存储库中提取最新版本:

https://github.com/marketplace/wp-package-editor

这引用自关于如何使用 GitHub 实现的文档

要将脚本成功导入到存储库库并稍后作为安装程序依赖项同步,有 4 个条件:

  1. GitHub App必须关联WP2E账号
  2. 必须授予 WP2E GitHub App 对存储库的“只读”访问权限
  3. 脚本必须是有效的 WP 主题或插件
  4. 存储库必须在 GitHub 上至少有一个“发布”

注意:为了与 GitHub 帐户/repo 同步,GitHub 应用程序应通过 saas 面板集成(而不是直接通过 GitHub Marketplace)


0
投票

最近有一些插件可以解决这个问题。例如 FetchPress https://fetch.press/

© www.soinside.com 2019 - 2024. All rights reserved.