GoDay 8

githubにgoのライブラリを公開する手順メモ

More than 1 year has passed since last update.


概要

ffprobeコマンドのgolangバインドをライブラリとして公開してみる

動画であれば対象ファイルの動画ストリーム情報や

オーディオストリーム情報を表示してくれるffprobeコマンドを

golangの構造体にバインドしてみる。

リポジトリはライブラリとして公開したいので下記を表示するようにしたい。


  • buildに成功する

  • カバレッジ

  • godocへのリンク

  • ライセンス

公開先はgithubを前提に書いています


結果

こんな感じになりました

スクリーンショット 2017-11-09 23.19.56.png

リポジトリはこちら

https://github.com/smith-30/go-ffprobe


手順


リポジトリを作る

LICENSEもこのタイミングで作ってしまいましょう。

スクリーンショット 2017-11-11 01.12.22.png


travisに登録

CIはtravisを使っていきます

無料

https://travis-ci.org より

ダッシュボードから作成リポジトリをOnにする


coverallsに登録

無料

https://coveralls.io より

ダッシュボードから作成リポジトリをOnにする


.travis.ymlの設定


.travis.yml

language: go

sudo: false
go:
- 1.8
- 1.9
- tip

matrix:
allow_failures:
- go: tip

install:
- go get golang.org/x/tools/cmd/cover
- go get github.com/modocache/gover
- go get github.com/mattn/goveralls
- go get honnef.co/go/tools/cmd/gosimple
- go get honnef.co/go/tools/cmd/unused
- go get honnef.co/go/tools/cmd/staticcheck
- go get -v -t ./...

script:
- go vet $(go list ./... | grep -v /vendor/)
- unused $(go list ./... | grep -v /vendor/)
- gosimple $(go list ./... | grep -v /vendor/)
- staticcheck $(go list ./... | grep -v /vendor/)
- go test -cover -coverpkg github.com/smith-30/go-ffprobe -coverprofile go-ffprobe.coverprofile

after_script:
- gover
- goveralls -coverprofile=gover.coverprofile -repotoken $COVERALLS_TOKEN


一応、ソースコードの品質も担保したいのでテスト以外に


  • vet

  • gosimple

  • unused

  • staticcheck

を使って静的解析しています。


coverallのtoken設定

.travis.yml$COVERALLS_TOKENの記述がありますがこの設定をしていきます

$ sudo gem install travis

# プロジェクトルートで打つこと、そうするとtravis設定ファイルに書き込まれる
$ travis encrypt COVERALLS_TOKEN=<your-token> --add

<your-token> はcoverallsで有効にしているリポジトリのページから取ってきてください。


travisを回してみる

CI連携ができるか下記ファイルをリモートリポジトリにpush


ffprobe.go

package go_ffprobe

func GetFileInfo(fileName string) string {
return fileName
}



ffprobe_test.go

package go_ffprobe_test

import (
"testing"

ffprobe "github.com/smith-30/go-ffprobe"
)

func TestGetFileInfo(t *testing.T) {
exp := "test"
act := ffprobe.GetFileInfo(exp)

if exp != act {
t.Errorf("failed.")
}
}


travisが動けば成功


カバレッジやbuild成功のバッチを出す

README.mdの先頭を編集してpush

[![Build Status](https://secure.travis-ci.org/smith-30/go-ffprobe.png?branch=master)](http://travis-ci.org/smith-30/go-ffprobe)

[![Coverage Status](https://coveralls.io/repos/smith-30/go-ffprobe/badge.svg?branch=master)](https://coveralls.io/r/smith-30/go-ffprobe?branch=master)
[![GoDoc](https://godoc.org/github.com/smith-30/go-ffprobe?status.svg)](https://godoc.org/github.com/smith-30/go-ffprobe)
[![license](https://img.shields.io/badge/license-MIT-4183c4.svg)](https://github.com/smith-30/go-ffprobe/blob/master/LICENSE)

smith-30/go-ffprobe は適宜変えてください

カバレッジやバッチが出てれば成功です。


まとめ

サクッとバッチ付きのライブラリ公開できるので

まだやったことがない方は試してみてはいかがでしょうか。

リポジトリのCI連携をやったことがない人にもオススメです。

pushしたら勝手にテスト回ったり静的解析やってくれるのは幸せですね。しかも無料。ありがたい。

goverallsやgoの静的解析ツール作られた方にはただただ感謝です。

json <-> go structはこのサービス使いました。

jsonから、goのstructを表示してくれます

https://mholt.github.io/json-to-go/

今年も残りわずかですが引き続きよいgo lifeを楽しんでいきましょう。