Humanity

Edit the world by your favorite way

GitHub の organization アカウントのリポジトリを AppVeyor に追加する

Go のコマンドラインアプリの AppVeyor 対応したので雑なログ。

ここを参考にした。

  1. Organization 用の AppVeyor アカウントを Sign Up から作る
  2. 自分のメインの AppVeyor アカウントを Administrator role で Collaborator として追加する
    • Collaborator を追加する際にメールアドレスを入力する必要があるが、ここは自分のメインの AppVeyor アカウントが紐づけられた GitHub アカウントのメールアドレスを入力する
  3. https://github.com/organizations/<organization>/settings/oauth_application_policy のページに行って restriction がかかってると "New Project" → "GitHub" でリポジトリがリストアップされないので restriction を外す(確か Remove restriction ってボタンがあったのでそれを押した)
  4. リポジトリを追加する
  5. appveyor.yml をリポジトリに追加する
  6. Pull request 送って push したりすると CI が動く
    • いつ動くかは変えられたりする。詳細は上記ドキュメントを見てください

f:id:tyru:20171212234629p:plain

appveyor.yml の例

以下を参考にしたりした。 Web アプリとかでも同じのはず。

Setting up an AppVeyor pipeline for Golang

自分が追加したのはこんな感じ。

Introduce AppVeyor CI (and fix failed tests on Windows) by tyru · Pull Request #106 · vim-volt/volt · GitHub

Go のオプション引数で -v -v -v みたいに複数指定する方法

mattn さんに教えてもらった。 いつもお世話になってて感謝しかない。

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()
}

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 とかしてクリップボードにコピーできて便利。