2018-05-03 22:28:41 +00:00
package main
import (
"fmt"
"os"
"flag"
"bufio"
"regexp"
"github.com/ewgRa/ci-utils/diff_liner"
"github.com/ewgRa/ci-utils/links_checker"
"gopkg.in/russross/blackfriday.v2"
"encoding/json"
"github.com/google/go-github/github"
)
func main ( ) {
prLiner := flag . String ( "pr-liner" , "" , "Pull request liner" )
fileName := flag . String ( "file" , "" , "Hunspell parsed file name" )
2018-05-04 22:36:18 +00:00
commit := flag . String ( "commit" , "" , "Commit" )
2018-05-03 22:28:41 +00:00
expectedCodesFile := flag . String ( "expected-codes" , "" , "Expected codes file name" )
flag . Parse ( )
2018-05-04 22:36:18 +00:00
if * prLiner == "" || * fileName == "" || * commit == "" || * expectedCodesFile == "" {
2018-05-03 22:28:41 +00:00
flag . Usage ( )
os . Exit ( 1 )
}
linkRegexp := regexp . MustCompile ( "href=\"(http[^\"]*)\"" )
linerResp := diff_liner . ReadLinerResponse ( * prLiner )
checker := links_checker . NewChecker ( * expectedCodesFile )
line := 0
file , err := os . Open ( * fileName )
if err != nil {
panic ( err )
}
defer file . Close ( )
scanner := bufio . NewScanner ( file )
for scanner . Scan ( ) {
line ++
prLine := linerResp . GetDiffLine ( * fileName , line )
if prLine == 0 {
continue
}
output := blackfriday . Run ( scanner . Bytes ( ) )
matches := linkRegexp . FindAllStringSubmatch ( string ( output ) , - 1 )
for _ , match := range matches {
link := match [ 1 ]
ok , respCode , expectedCodes := checker . Check ( link )
if ok {
continue
}
body := fmt . Sprintf ( "Ссылка %s ... недоступна с кодом %v, ожидается %v. Если это ожидаемый ответ, внесите \"%v,%s\" в files/expected_codes.csv" , link , respCode , expectedCodes , respCode , link )
comment := & github . PullRequestComment {
Body : & body ,
2018-05-04 22:36:18 +00:00
CommitID : commit ,
2018-05-03 22:28:41 +00:00
Path : fileName ,
Position : & prLine ,
}
jsonData , err := json . Marshal ( comment )
if err != nil {
panic ( err )
}
fmt . Println ( string ( jsonData ) )
}
}
if err := scanner . Err ( ) ; err != nil {
panic ( err )
}
}