AppVeyorにプロジェクトを追加したい
現在関わっているLaravelの案件、自動テストをAppVeyorで行っている。(難しい設定を行っているのは別のスタッフなので私はサワリの部分しか知らないけど)
ひとつの案件にかかわるレポジトリがみっつある。
今回みっつめのレポジトリの自動テストを追加しようとしたところ、プロジェクトの追加画面に該当のレポジトリが表示されないという事態に遭遇した。
Forkしたレポジトリはプロジェクト追加画面に登場しないらしい
原因を探ったところ、プロジェクト追加済みの他のふたつのレポジトリと今回追加できなかったレポジトリとの違いは、Forkされたレポジトリかどうかということらしい。
AppVeyorのAPI経由で追加する
ググったところ以下の質疑応答ページが見つかった。
https://help.appveyor.com/discussions/questions/935-is-it-possible-to-add-forks-to-the-projects
AppVeyorの用意しているAPI経由で追加するらしい。
やってみた。
私はコンソールでAPIに接続するのに慣れていないので、PHPでプログラムを書きXAMPPでローカルで実行し、APIに接続した。
用意したPHPファイルはみっつ。
* index.php : 入力フォームを表示
* send.php : ApiConnecterを使ってWebAPIに接続し、戻り値を表示する
* ApiConnecter.php : WebAPIに要求を送るユーティリティ
「トークン」はAppVeyorの「API Token」ページで取得できるもの。
// index.php
<h1>AppVeyor にForkレポジトリを追加するためのAPI接続プログラム</h1>
<form action="send.php" method="POST">
apiUrl : <input type="text" name="apiUrl" value="https://ci.appveyor.com/api/projects" /><br>
repositoryProvider : <input type="text" name="repositoryProvider" value="gitHub" /><br>
repositoryName : <input type="text" name="repositoryName" value="追加したいレポジトリ名" /><br>
token : <input type="text" name="token" value="トークン" /><br>
<input type="submit" value="送信" />
</form>
// send.php
<?php
require('./ApiConnecter.php');
$post_array = [
'repositoryProvider' => $_REQUEST['repositoryProvider'],
'repositoryName' => $_REQUEST['repositoryName'],
];
$apiUrl = $_REQUEST['apiUrl'];
$token = $_REQUEST['token'];
$response = ApiConnecter::postDataAndGetContentFromUrl(
$apiUrl,
$post_array,
$token
);
var_dump($response);
// ApiConnecter.php
<?php
/**
* WebAPIに接続して戻り値を取得する。
*/
class ApiConnecter{
////////////////////////////////////////////////////////////
/**
* @param 接続先APIのURL
* @param array POST送信する値のセットの連想配列
* @param トークン
* @param string 送信メソッド(GET / POST)
* @return APIからの戻り値
*/
public static function postDataAndGetContentFromUrl(
$api_url,
$post_array,
$token,
$method = 'POST'
){
$data = http_build_query($post_array, "", "&");
$options_array = array();
$options_array["http"]["method"] = $method;
$options_array["http"]["header"] = "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($data) . "\r\n"
. "Authorization: " . "Bearer ".$token."\r\n";
$options_array["http"]["content"] = $data;
$context = stream_context_create();
stream_context_set_option(
$context,
$options_array
);
try{
$return_data = file_get_contents(
$api_url, //接続先のURL
false, //パス検索
$context //送信する内容(リソースコンテクスト)
);
}catch(Exception $e){
$return_data = "エラー : APIからのデータ取得に失敗しました。<br>\n".$e;
}
return $return_data;
}
}
これでAPIに要求を送信したところ、プロジェクト追加がうまく行った。
AppVeyorのプロジェクト追加画面を経ずにプロジェクトを追加したということになりますね。