Skip to content

Instantly share code, notes, and snippets.

View batmany13's full-sized avatar

Bruce Wang batmany13

View GitHub Profile
@batmany13
batmany13 / config.yml
Last active August 23, 2017 17:34
circleci sample
docker:
- image: synqfm/circleci:0.1.5
- image: library/postgres:9.6.3
environment:
POSTGRES_DB: gosample_test
POSTGRES_USER: circleci
POSTGRES_PASSWORD: circleci
FROM circleci/golang:1.8.1
COPY *.list /etc/apt/sources.list.d/
RUN sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
RUN sudo apt update
RUN sudo apt install -y \
ansible \
postgresql-client \
python3-pip \
ffmpeg \
@batmany13
batmany13 / config.yml
Created August 21, 2017 07:13
Wait for Postgres
- run:
name: Waiting for Postgres to be ready
command: |
for i in `seq 1 10`;
do
psql -h localhost -U $PG_USER $PG_DB -c "\t" && echo DB Up && exit 0
echo -n .
sleep 1
done
echo Failed waiting for Postgres && exit 1
@batmany13
batmany13 / config.yml
Created August 21, 2017 07:14
Run coveralls only on CircleCI
- run:
name: Run Golang Tests
command: |
GOPATH=$GOPATH:"${SYNQ_DIR}"/"${REPO}"/vendor overalls -project=github.com/SYNQfm/"${REPO}" -covermode=atomic -debug -ignore=.git,.github,.circleci,vendor,sql,sample -- -race -v
if [ -z ${COVERALLS_TOKEN} ]; then
echo "coveralls token isn't set, skipping"
else
goveralls -coverprofile="${SYNQ_DIR}"/"${REPO}"/overalls.coverprofile -service circle-ci -repotoken "${COVERALLS_TOKEN}"
fi
@batmany13
batmany13 / secrets.json
Created August 21, 2017 17:28
Secrets unencrypted
{
"flyway": {
"password": "supersecret"
}
}
@batmany13
batmany13 / struct.go
Created August 21, 2017 17:43
ApiCall Struct
type ApiCall struct {
Id int64 `db:"id" json:"id"`
Type string `db:"type" json:"type"`
CreatedAt time.Time `db:"ctime" json:"-"`
Called time.Time `db:"called" json:"called"`
VideoId string `db:"video_id" json:"video_id"`
Taken time.Duration `db:"taken" json:"taken"`
Error string `db:"error" json:"error"`
Video synq.Video `db:"result" json:"video"`
}
@batmany13
batmany13 / call.go
Last active August 21, 2017 18:13
API Call to Synq
func (a *ApiCall) Call() error {
defer a.Save()
start := time.Now()
video, err := sApi.GetVideo(a.VideoId)
a.Taken = time.Since(start)
if err != nil {
a.Error = err.Error()
return err
}
a.Type = "/v1/video/details"
@batmany13
batmany13 / details.go
Last active August 29, 2017 16:37
Details Implementation via Gin
// This will just get the video id and call the Synq api for the details
func details(c *gin.Context) {
a := ApiCall{}
c.BindJSON(&a)
if a.VideoId == "" {
c.JSON(400, gin.H{
"message": "missing 'video_id'",
})
@batmany13
batmany13 / router.go
Created August 21, 2017 17:53
Gin router
func setupRouter(port string) {
router := gin.Default()
v1 := router.Group("/v1")
{
v1.POST("/details", details)
v1.GET("/status", status)
}
log.Println("Running server on port :", port)
serverStarted = time.Now()
@batmany13
batmany13 / video.go
Created August 21, 2017 18:15
Value and Scan for Synq Video object
func (v Video) Value() (driver.Value, error) {
json, err := json.Marshal(v)
return json, err
}
func (v *Video) Scan(src interface{}) error {
source, ok := src.([]byte)
if !ok {
return errors.New("Type assertion .([]byte) failed.")
}