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

市面上教的很多都是github的,但是国内访问速度还是有些限制。
第1-4步很多网上有教程,就不介绍了,本文主要是介绍第5步 ,如果让gitee仓的代码自动同步packagist平台
所以此次背景 就是自动同步到 国内的gitee 上,速度也是很快的
此次就是为了实现gitee仓 push代码时自动触发packagist平台update
(PS: 在packaglist具体仓上会不显示自动更新,但push gitee仓 会自动实现更新)

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

通过packagist官方文档提供的方式,可以实现此功能。
update-package接口:

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

其中 三个 参数
username  是自己在packagist的用户名
API_TOKEN 是packagist平台个人中心可获得 (https://packagist.org/profile/)

PACKAGIST_PACKAGE_URL:是packagist包的全地址,如:
https://packagist.org/packages/liukuaizhuan/phpgrace120

以gitee.com平台为例,用PHP实现此自定义的接口,代码:
<?php
//此代码保存文件名为GiteeByPushAutoUpdaePackagist.php 也可以自定义名称
//--------------------------------------------------------------------------------
$User_Name = '';            //packagist的用户名
$API_TOKEN = '';            //packagist的api-token 
$PACKAGIST_PACKAGE_URL = '';//packagist包的全地址
$GiteeWebHooksPassword = ''; //gitee具体某个仓的WebHooks自定义密码

//--------------------------------------------------------------------------------
$url = 'https://packagist.org/api/update-package?username='.$User_Name.'&apiToken='.$API_TOKEN;
$headers = [
    'Content-Type:application/json',
];
$data = '{"repository":{"url":$PACKAGIST_PACKAGE_URL}}';

if( isset($_SERVER['HTTP_X_GITEE_TOKEN']) && $_SERVER['HTTP_X_GITEE_TOKEN'] == $GiteeWebHooksPassword){
    $res = curl_post($url, $data, $headers);
}else{
    $res = '密码错误 ,请不要直接访问,需要通过gitee仓push生效';
}
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,比如:http://xxxx.com/GiteeByPushAutoUpdaePackagist.php
文件放在服务器上后,我们来设置gitee上面的webhook:
打开gitee的需要设置的仓库页面,点击 “管理” -> WebHooks -> 添加WebHooks:

 

URL地址的地方填写我们转发代码的地址:http://xxxx.com/GiteeByPushAutoUpdaePackagist.php
webhook密码是为了防止其它非授权的调用,可自行设置,如代码里我们设置成了:123456

添加好了以后可以看到右下角有个这样的工具,点击测试看结果:

 

 

这样就可以了。 
可以在gitee上push代码 ,就会自动同步packagist  (有时候会有些更新慢的情况,正常的)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐