1
1
mirror of https://github.com/lddsb/drone-goreportcard synced 2024-11-22 10:51:56 +01:00

start on the road

This commit is contained in:
lddsb 2019-03-10 13:50:59 +08:00
commit a267fc8744
8 changed files with 162 additions and 0 deletions

36
.drone.yml Normal file

@ -0,0 +1,36 @@
---
kind: pipeline
name: build
steps:
- name: build
pull: always
image: golang
commands:
- go build -a -o drone-goreportcard .
environment:
- GO111MODULE=on
- CGO_ENABLED=0
- name: dryrun
pull: always
image: plugins/docker
settings:
cache_from: lddsb/drone-goreportcard
dockerfile: Dockerfile
dryrun: true
repo: lddsb/drone-goreportcard
tags: latest
- name: publish
pull: always
image: plugins/docker
settings:
cache_from: lddsb/drone-goreportcard
dockerfile: Dockerfile
repo: lddsb/drone-goreportcard
tags: latest
username:
from_secret: docker_username
password:
from_secret: docker_password

1
.gitignore vendored Normal file

@ -0,0 +1 @@
drone-goreportcard

10
Dockerfile Normal file

@ -0,0 +1,10 @@
FROM alpine:latest
RUN apk update && \
apk add \
ca-certificates && \
rm -rf /var/cache/apk/*
COPY drone-goreportcard /bin
ENTRYPOINT ["/bin/drone-goreportcard"]

16
README.md Normal file

@ -0,0 +1,16 @@
# Go Report Card Drone Plugin
[![Build Status](https://drone.lddsb.com/api/badges/lddsb/drone-goreportcard/status.svg)](https://drone.lddsb.com/lddsb/drone-goreportcard)
[Drone CI](https://drone.io) plugin to auto refresh your project status in [go report card](https://goreportcard.com)
### Usage
```yaml
kind: pipeline
name: default
steps:
...
- name: goreportcard
pull: always
image: lddsb/drone-goreportcard
```

5
go.mod Normal file

@ -0,0 +1,5 @@
module drone-goreportcard
go 1.12
require github.com/urfave/cli v1.20.0

2
go.sum Normal file

@ -0,0 +1,2 @@
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=

44
main.go Normal file

@ -0,0 +1,44 @@
package main
import (
"log"
"os"
"github.com/urfave/cli"
)
// Version `cli version`
var Version = "20190309"
func main() {
app := cli.NewApp()
app.Name = "Drone Plugin GoReportCard"
app.Usage = "fresh go report card message"
app.Copyright = "© 2019 Dee Luo"
app.Authors = []cli.Author{
{
Name: "Dee Luo",
Email: "luodi0128@gmail.com",
},
}
app.Action = run
app.Version = Version
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "config.url",
Usage: "repository http url",
EnvVar: "DRONE_GIT_HTTP_URL",
},
}
if err := app.Run(os.Args); nil != err {
log.Fatal(err)
}
}
func run(c *cli.Context) error {
p := Plugin{
URL: c.String("config.url"),
}
return p.Exec()
}

48
plugin.go Normal file

@ -0,0 +1,48 @@
package main
import (
"errors"
"io/ioutil"
"log"
"net/http"
)
type (
// Plugin `plugin struct`
Plugin struct {
URL string
}
)
var baseURL = "https://goreportcard.com/"
// Exec `exec plugin`
func (p *Plugin) Exec() error {
urlLen := len(p.URL)
if 4 > urlLen {
return errors.New("invalid repository url")
}
suffix := p.URL[urlLen-4:]
if ".git" == suffix {
p.URL = p.URL[:urlLen-4]
}
resp, err := http.Get(baseURL + "checks?repo=" + p.URL)
if nil != err {
return err
}
defer resp.Body.Close()
if http.StatusOK != resp.StatusCode {
bs, err := ioutil.ReadAll(resp.Body)
if nil == err {
return errors.New("API response error: " + string(bs))
}
return err
}
log.Println("Everything is OK")
return err
}