网址:Packagist
一、Packagist说明
Packagist和Composer包仓库不同。
Packagist用于找到包,并让Composer知道代码来源。
可以用Composer管理项目,或者依赖关系读取。
Composer官网:Composer
可以从Github找到packagist.org。
Github中Packagist:GitHub - composer/packagist: Package Repository Website - try https://packagist.com if you need your own -
1.1 社区
如果有对Composer问题或想求助,加入irc.libera.chat的#composer频道。
可以在Composer Documentation中发现更多社区资源。
Composer Documentation网址:Community - Composer
1.2 捐助/捐赠
要报告问题或贡献代码,可以在Github上面找到源存储库。
如果想在财务上支持这项目的托管和维护,最好的方法是通过私用Packagist。
Packagist官网:Private Packagist。
可以快速并可靠的安装包,提供私有的包管理仓库。资金用于Composer和Packagist维护。
二 、Packagist 使用
2.1 包命名
包必须命名,且不可改变,命名的名字在平台上唯一,以避免冲突。
项目名字由供应商名字和项目名字以“/”符号拼接。
供应商的名字是为了防止冲突。比如供应商igorw
和 seldaek都有一个项目json,可以命名为igorw
/json 和 seldaek/json。
有时供应商名字和项目名字会相同,例如
monolog/monolog。
为了包名字的唯一性,推荐这种写法。可以在同一供应商下增加更多项目。
如果维护一个项目,可以解耦成几个小项目,便于维护。
包命名例子:
// 供应商名和项目名相同
monolog/monolog
//可能是drupal模块(可能由monolog提供)
monolog/monolog-drupal-module
//Acme是一个公司或者个人,可以用共同名字(邮箱)命名他们的包。只要在他们自己的供应商命名空间下,就不会与其他包产生冲突
acme/email
包被发布之后,供应商名字在packagist中受保护。
这意味在packagist中不可发布供应商名字已存在且未授权的包。
为了能够发布一个已经存在的供应商名称的包,需要成为该供应商中至少一个包的维护者。
包名和供应商命名允许包含小写字符a-z、数字0-9、字符“.”、"_"、“-”。
每个单词必须以字母或数字开头。
2.3 创建composer.json文件
composer.json文件应该位于git/svn库中,用于在packagist和composer中描述项目。
典型文件内容如下:
{
"name": "monolog/monolog",
"type": "library",
"description": "Logging for PHP 8.0",
"keywords": ["log","logging"],
"homepage": "https://github.com/Seldaek/monolog",
"license": "MIT",
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be",
"role": "Developer"
}
],
"require": {
"php": ">=8.0.0"
},
"autoload": {
"psr-0": {
"Monolog": "src"
}
}
}
大部分信息见名知意易于理解,keywords是标签,require是依赖列表 。
可以是其他包,不仅是像例子中仅有php版本。
可以使用ext-foo要求php扩展,例如ext-curl。
大多数扩展并不公开版本信息,除非使用的版本已确定公开,否者使用"ext-curl":"*"来允许任何版本的扩展都更安全。
例子中type字段代表这是一个库。
要是为框架等做插件,如果集成了composer,可能自定义插件的type,可以使用框架自带的安装程序来安装包。
在没有自定义type的情况下,可以省略或使用“library”。
只要在存储库根目录中提交了这个文件,就可以通过输入公共存储库URL将包提交给Packagist。
提交地址:Log in - Packagist
2.2 包版本管理
版本号从库中自动获取,官网是写VCS库,没查到是啥。
管理版本控制的最简单方法,是从composer.json文件中省略version字段。
版本号从标签(tags)和分支(branch)名字中解析。
标签/版本的名称,需要符合'X.Y.Z'或者 'vX.Y.Z',带有可选的后缀,RC、beta、alpha或补充版本。
例子:
1.0.0
v1.0.0
1.10.5-RC1
v4.4.4beta2
v2.0.0-alpha
v2.0.4-p1
分支自动使用dev后缀定义版本,便于想要尝试库的最新和最好的版本用户轻松安装,但不以为可以不标记版本号。
强烈建议使用语义版本控制。
语义版本控制:Semantic Versioning 2.0.0 | Semantic Versioning
2.4 更新计划
如果启用了JS,新包将在提交后立即被抓取。
没有自动更新的现有包,包括GitHub/BitBucket/GitLab/Gitea钩子,将每周抓取一次更新。
如果启用钩子,则无论何时推送都会抓取包,或者至少每月抓取一次,以防抓取失败。
如果以维护者的身份登录,还可以在包页面上手动更新。
强烈推荐为所有的包设置GitHub/BitBucket/GitLab/Gitea钩子。这减少平台负载,并保证所有的包立即更新。
三、如何更改包
3.1 Github Hook
启动Packagist服务钩子,确保当提交GitHub时所有的包永久立即更新。
操作方式:
- 确保可通过GitHub登录。若账户未连接GitHub可在个人资料中设置。若已登录,需要主要后再次通过GitHub登录,以确保授予平台所需的权限。
- 确保Packagist平台接口可以访问所有需要发布包的GitHub组织。
- 检查您的包列表,看看是否有关于未自动同步的警告。
- 如果仍然需要在某些包上设置同步,请尝试触发手动帐户同步,以使Packagist再次尝试帐户上设置钩子。归档存储库无法设置,因为它们在GitHub的API中是只读的。
可使用如下值手动设置GitHub网络钩子:
- Payload URL:
https://packagist.org/api/github?username=username username是可变数据,根据个人账户名字
- Content Type:
application/json
- Secret:Packagist平台token
Packagist平台token设置:Log in - Packagist
3.2 Bitbucket WebHooks
使用Bitbucket网络钩子,进入Bitbucket存储库中,打开设置中“Webhooks”菜单,加一个新钩子。
加入Packagist平台端点,包含用户名和api的Token。
输入https://packagist.org/api/bitbucket?username=username&apiToken=API_TOKEN作为URL。
保存更改,就完成了。
3.3 GitLab 服务
要启用GitLab服务集成,进入GitLab存储库,从菜单中打开Settings > Integrations页面。
在Project Services列表中搜索Packagist。
选中“Active”框,输入packagist平台用户名和API令牌。
保存更改,就完成了。
3.4 Gitea Webhook
从Gitea v1.17开始支持Packagist上的自动包更新。
要启用giea webhook,进入giea存储库,打开Settings > Webhooks页面,然后单击“Add Webhook”。
从下拉菜单中选择“Packagist”。
在表单中输入packagist平台用户名、API令牌和包的packagist URL。所有其他选项可以保持不变。
保存更改,就完成了。
3.5 手动hook
如果不适用Bitbucket或者GitHub,可以从git post-receive钩子或类似的钩子中手动调用。
必须提交请求:
#请求方式
POST
#请求头
content-type:application/json
#请求路径
https://packagist.org/api/update-package?username=username&apiToken=API_TOKEN
#请求体
{
"repository":
{
"url":"PACKAGIST_PACKAGE_URL"
}
}
curl -XPOST -H'content-type:application/json' 'https://packagist.org/api/update-package?username=lsswear&apiToken=API_TOKEN' -d'{"repository":{"url":"PACKAGIST_PACKAGE_URL"}}'
3.6 api token
设置地址:Log in - Packagist
3.7 IP白名单
如果限制ip并需要授予packagist平台工作者访问权限,我们会维护一个公共ip列表。
设置页面:Log in - Packagist