LoginSignup
0
0

More than 5 years have passed since last update.

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

Posted at

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0