はじめに
今日はちょっと趣向を変えて、VSTSのREST APIを使う方法を紹介します。C#で作ってもいいのですが、今日はPowerShell AdventCalendarと相乗りカレンダーということで、PowerShellで使う方法を紹介します。
私が毎回紹介しているVSTSの翻訳はVSTSにmarkdownの下書きを書いていて、出来上がったらGistに送っています。いいかげん自動化しようと思っていたので、ちょうどいい機会なのでやってみます。どっちかといえば、Gistへの更新のほうが悩みました…。ちなみに、Gistへの登録であれば、PSGistというモジュールがScript Gallaryに公開されています。
最初はこれを使おうと思ったのですが、GitHubのパスワードをOSの資格情報マネージャーに記録する方法だったので、残念ながら自動化(Hosted AgentでのCI)には使えません。そのうちforkして改造しようかと思います。
PowerShellからGitHubへのアクセスを解説している動画がChannel9にあるので、こちらもみてください。
今回はパスワードでの認証ではなく、PATを使うので、PowerShellからGist(GitHub)にアクセスするためのPATを取ります。動画中でも解説されているので、詳しくは省きますが、Gistの権限があればいいはずです。
VSTSのファイルをコミット履歴から取得する
VSTSのHosted Agentでアクセスするために認証にはPATを使いましょう。最長で1年ですので、忘れたころに更新することになりそうですが。
- 直近のコミットを取得する
- コミットの詳細情報を取得する
- 変更されたファイルを取得する
という流れになります。3番目の手順で変更一覧が取得できるので、そのitem.pathプロパティにファイル名が入っています。ファイル名をGist側と突き合わせます。
実はここから時間切れでできてないのですが、指定したファイルをoctect/streamで取得して、gistにアップロードします。
Gistの取得
Gistの取得は簡単です。指定ユーザーのGistを取ってくるAPIたたくだけでいいのですが、ファイルがあるかどうか探すのはちょっと面倒。
Gistの一覧にはFilesコレクションがあり、各ファイルがいわゆるハッシュのキーになっています。なので、Filesコレクションの各ファイルオブジェクト($gistfileオブジェクトに入っているとします)のNotePropertyを取得することでGistのファイル名を取得します。
$gistfile | Get-Member -MemberType NoteProperty | select Name
VSTSのコミット履歴(changeTypeプロパティ)がaddであれば、追加。"edit"であれば、編集となっています。この辺は私の使い方ではaddしかない(masterブランチへのpull requestで追加のみ)はずなので、どうしようかなーと思っているところです。
途中段階のソース
とりあえず上記のフローで書きなぐったのが以下のソースです。あとは判定のテストと、ファイルアップロードができればいいので、お正月中に何とかしようと思っていますw。
RESTあまり使っていなかったのですが、便利ですね。VSTSもこれからはREST APIが強化されるでしょうから使ってみてください。