GitHub の organization アカウントのリポジトリを AppVeyor に追加する
Go のコマンドラインアプリの AppVeyor 対応したので雑なログ。
ここを参考にした。
- Organization 用の AppVeyor アカウントを Sign Up から作る
- 自分のメインの AppVeyor アカウントを Administrator role で Collaborator として追加する
- Collaborator を追加する際にメールアドレスを入力する必要があるが、ここは自分のメインの AppVeyor アカウントが紐づけられた GitHub アカウントのメールアドレスを入力する
https://github.com/organizations/<organization>/settings/oauth_application_policy
のページに行って restriction がかかってると "New Project" → "GitHub" でリポジトリがリストアップされないので restriction を外す(確か Remove restriction ってボタンがあったのでそれを押した)- 以下のスクリーンショットのように "No restriction" と表示されていれば OK
- リポジトリを追加する
- appveyor.yml をリポジトリに追加する
- Pull request 送って push したりすると CI が動く
- いつ動くかは変えられたりする。詳細は上記ドキュメントを見てください
appveyor.yml の例
以下を参考にしたりした。 Web アプリとかでも同じのはず。
Setting up an AppVeyor pipeline for Golang
自分が追加したのはこんな感じ。
Go のオプション引数で -v -v -v みたいに複数指定する方法
mattn さんに教えてもらった。 いつもお世話になってて感謝しかない。
-d dir1 -d dir2 みたいな引数を持つオプションを複数指定する方法
Go の flag パッケージで複数オプションをパースするにはどうしたらいいんだろ。
— tyru (@_tyru_) 2017年8月22日
-d dir1 -d dir2 で [dir1, dir2] の配列が取れるとうれしい
スライスに別型つけて Set を定義します。 https://t.co/VxA6wqU3ac
— mattn (@mattn_jp) 2017年8月22日
package main import "flag" import "strings" type myDog []string func (dog *myDog) String() string { return strings.Join(([]string)(*dog), ",") } func (dog *myDog) Set(value string) error { *dog = append(*dog, value) return nil } func main() { var dog myDog flag.Var(&dog, "dog", "犬") flag.Parse() }
-v -v -v みたいな引数を持たないオプションを複数指定する方法
IsBoolFlag を定義します。 https://t.co/QYTAbM5wFe
— mattn (@mattn_jp) 2017年12月8日
package main import ( "flag" "fmt" ) type myDog []bool func (dog *myDog) String() string { return fmt.Sprint(([]bool)(*dog)) } func (dog *myDog) Set(value string) error { *dog = append(*dog, true) return nil } func (dog *myDog) IsBoolFlag() bool { return true } func main() { var dog myDog flag.Var(&dog, "v", "犬") flag.Parse() fmt.Printf("%d dog\n", len(dog)) }
Go は type で既存の型を特別な型として定義してメソッド生やせたりするのが面白いですね。
Windows Subsystem for Linux で便利な alias (clip)
alias clip=/mnt/c/Windows/System32/clip.exe
echo Hello | clip
とかしてクリップボードにコピーできて便利。