packagist composer包发布 - 第三方git平台push时自动触发WebHook

先来看一下packagist包的发布过程
  1. 创建仓库并添加代码(git init、git add)
  2. 创建composer.json文件(composer init)
  3. 提交代码到线上git仓库,如github、码云等,也可自已搭建仓库(git commit、git push)
  4. 在packagist平台提交上面建好的git版本库
  5. 配置webhook实现push代码时自动更新到packagist平台
本文要做的是第5步,实现push代码时自动触发packagist平台update

对于包自动更新功能,packagist平台提供了一个帮助文档:
how-to-update-packages

通过阅读官方文档,我们可以知道,packagist平台目前只对接了“GitHub Hook”和“Bitbucket Webhooks”这两个平台,这两个平台可直接在个人中心webhooks页设置实现自动更新。
至于其它的git平台,由于发送和接收的协议格式多样,不能一一对接,所以提供了update-package接口,让我们自己通过服务器转发方式实现。

首先想到的是百度一下,但很不幸,百度到的全都是在github平台上配置webhook(PS:这用得着学吗?)。最后通过packagist官方文档提供的方式解决了。

update-package接口非常精简,归纳如下:

Request URL:https://packagist.org/api/update-package?username=Aliyuncs&apiToken=API_TOKEN
Method:POST
Content-Type:application/json
Body:{“repository”:{“url”:“PACKAGIST_PACKAGE_URL”}}

其中,API_TOKEN从packagist平台个人中心可获得,如下图所示:
获取API token
PACKAGIST_PACKAGE_URL就是packagist包的全地址,如:

https://packagist.org/packages/aliyuncs/oss-sdk-php

接下来我们以gitee.com平台为例,用PHP实现此接口,代码如下:

$url = 'https://packagist.org/api/update-package?username=Aliyuncs&apiToken=zDIBFCcEmBxxxxxxxxxx';

$headers = [
    'Content-Type:application/json',
];
$data = '{"repository":{"url":"https://packagist.org/packages/aliyuncs/oss-sdk-php"}}';

if( isset($_SERVER['HTTP_X_GITEE_TOKEN']) && $_SERVER['HTTP_X_GITEE_TOKEN'] == 'password-abc'){
    $res = curl_post($url, $data, $headers);
}else{
    $res = 'password error!';
}
echo $res;

function curl_post($url, $data = '', $headers = [])
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    if($headers){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_HEADER, 0);
    }
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);// POST数据
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

接口编写好了,找个线上服务器放上去,记下URL,比如:https://test.com/webhook.php

接下来我们来设置webhook,以gitee.com平台为例,其它平台类似:
gitee 添加 webhook
URL地址的地方填写我们转发代码的地址:https://test.com/webhook.php
webhook密码是为了防止其它非授权的调用,可自行设置,如代码里我们设置成了:password-abc
添加好了以后可以看到右下角有个这样的工具,点击测试看结果:gitee webhook 测试
如果Response状态200并且Body里status是success,恭喜你,已经成功了!去packagist平台可以看到如下图所示的绿色字体提示:
This package is auto-updated

如果非常不幸,没有success,请参考上面提到的接口归纳部分进行调试,直到通了为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值