Help us understand the problem. What is going on with this article?

ForkしたレポジトリをAppVeyorに追加したい

More than 1 year has passed since last update.

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」ページで取得できるもの。


スクリーンショット 2018-02-26 9.50.51.png


// 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のプロジェクト追加画面を経ずにプロジェクトを追加したということになりますね。

ishiitakeru
趣味でマンガを描きます。 プログラミングは現実世界に適応するプロセスで身につけた、職業のためのものです。
http://loveandcomic.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away