storj/scripts/check-copyright.go
2019-09-05 16:32:46 +03:00

84 lines
1.4 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
// +build ignore
package main
import (
"bytes"
"fmt"
"io"
"os"
"path/filepath"
)
var checkFiles = map[string]bool{
".go": true,
".ts": true,
".js": true,
".vue": true,
}
var ignoreFolder = map[string]bool{
".git": true,
"node_modules": true,
"coverage": true,
"dist": true,
}
func main() {
var failed int
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return nil
}
if info.IsDir() && ignoreFolder[info.Name()] {
return filepath.SkipDir
}
if !checkFiles[filepath.Ext(path)] {
return nil
}
file, err := os.Open(path)
if err != nil {
failed++
fmt.Printf("failed to read %v: %v\n", path, err)
return nil
}
defer func() {
if err := file.Close(); err != nil {
fmt.Println(err)
}
}()
var header [256]byte
n, err := file.Read(header[:])
if err != nil && err != io.EOF {
fmt.Printf("failed to read %v: %v\n", path, err)
return nil
}
if bytes.Contains(header[:n], []byte(`AUTOGENERATED`)) ||
bytes.Contains(header[:n], []byte(`Code generated`)) {
return nil
}
if !bytes.Contains(header[:n], []byte(`Copyright `)) {
failed++
fmt.Printf("missing copyright: %v\n", path)
}
return nil
})
if err != nil {
fmt.Println(err)
}
if failed > 0 {
os.Exit(1)
}
}