为wordpress主题和插件创建satis composer私有存储库



我的目标是将一个composer.json文件提交到我们的项目存储库,该文件指定该项目应使用的主题或插件,当开发人员关闭repo时,他们所需要做的就是运行composer安装。我们希望将插件排除在项目回购之外,以阻止项目回购的膨胀以及推拉速度变慢。

对于标准的wordpress插件,如"JetpackbyWordPress.com",这很好,因为我们将使用https://wpackagist.org/.然而,对于无法开源的高级付费插件和自制插件,我们希望将它们托管在私人作曲家库中。

因为我们将有这些插件的多个版本,我希望所有版本都显示出来,如1.1、1.2、1.3,这样开发人员就可以在composer.json中指定需要哪个版本,例如,如果未来的版本出现问题,我们需要回滚到以前的版本。

我已经阅读了建立Satis私人存储库的基本知识,我已经这样做了,但我无法让它在版本的git标签中循环,也无法指定它是Wordpress插件并将其安装在正确的位置。

这是我第一次尝试获得所有git标记的版本:

{
"name": "Private Repository",
"homepage": "http://packages.privaterepo.com",
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:companyname/project.git"
}
],
"require-all": true
}

这是一个我必须指定版本,但要将其安装在正确的Wordpress插件位置:

{
"name": "Private Repository",
"homepage": "http://packages.privaterepo.com",
"repositories": [
{
"type": "package",
"package": {
"name": "company/project",
"description": "WordPress Plugin",
"version": "1.0",
"source": {
"type": "git",
"url": "git@bitbucket.org:company/project.git",
"reference": "origin/master"
},
"type": "wordpress-plugin",
"require": {
"php": ">=5.3.2",
"composer/installers": "*"
}
}
}
],
"require-all": true,
"require-dependencies": true,
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
}
}
}

有人能建议我如何将这两种情况结合起来吗?

我想我有一个类似的设置:在本地Satis repo中,我们既有来自私有Git服务器的内部包,也有来自Github的所有外部包。

诀窍是做两个步骤:第一步只提取所有外部包的元数据,这就是你的版本范围,以避免提取所有内容。

第二步将扫描所有本地Git repo并检测所有版本,此外还将添加步骤1中创建的Composer repo。

实际上,你将处理两个Satis配置,这两个配置将创建两个结果,外部包的第一个作业的结果将只获取所有元数据,在第二步中,它将被导入并使用,就像本地Git回购一样,将第二步配置为扫描"所有"版本,并可能从中创建ZIP文件,将为您可能需要的每个包创建一个漂亮的本地备份副本。

或者换句话说:

satis-external.json

{
"repositories": [
{
"type":"composer",
"url":"https://packagist.org"
}
],
"require": {
"any/package":">=2.0"
}
"output-html": false,
"require-dependencies": true
}

运行它:

php -dmemory_limit=2G satis/bin/satis build satis-external.json external/

satis-internal.json

{
"repositories": [
{
"type": "composer",
"url": "http://url/from/external/above"
},
{
"type": "vcs",
"url": "ssh://internal/gitrepo.git"
}
],
"require-all": true,
"archive": {
"directory": "dist",
"format": "zip",
"prefix-url": "https://whatever/youneed",
"skip-dev": true
}
}

运行此

php  -dmemory_limit=2G satis/bin/satis build satis-internal.json internal/

在Satis中添加"type=composer"存储库将使其与任何其他存储库一样,尤其是如果您"要求ALL=true",它将下载其中提到的所有包,因此请注意不要直接添加Packagist或任何其他repo。

还要注意,"需要依赖项"对于外部包是正确的,因为您可能不想经历添加要使用的包的每个依赖项的麻烦。

如果您的一些付费软件包提供远程回购访问,您可以将此回购与访问凭据一起添加到外部配置中,这应该会起作用。

根据我的经验,你的第一次尝试应该足够了,但我认为你在每个包上都缺少了一些你想要的东西("公司/项目")。

每个包都应该有自己的composer.json,并且每个包都必须需要composer/installers。此外,它应该正确定义"type": "wordpress-plugin"(或主题、muplugin、dropin)

将此作为一项要求,可以将软件包安装到所需的路径上。默认情况下,它将安装在以下文件夹上:

protected $locations = array(
'plugin'    => 'wp-content/plugins/{$name}/',
'theme'     => 'wp-content/themes/{$name}/',
'muplugin'  => 'wp-content/mu-plugins/{$name}/',
'dropin'    => 'wp-content/{$name}/',
);

(来自:安装程序/WordPress.php)

但是您可以使用第二个片段中的这个片段来更改它——例如,如果您在";htdocs";文件夹:

"extra": {
"installer-paths": {
"htdocs/wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
}
}

有了这些配置,Satis应该从你的git标签中生成合适的标签。

我希望这能有所帮助!

最新更新