This is an automated email from the ASF dual-hosted git repository. kezhenxu94 pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/skywalking-eyes.git
commit 56a6344291bb3b784b016a0b0ec4526c88319a19 Author: kezhenxu94 <[email protected]> AuthorDate: Mon Dec 21 15:33:52 2020 +0800 Refactor, set version, module, asf.yaml, etc. --- Dockerfile => .asf.yaml | 22 ++--- .github/workflows/build.yaml | 10 ++- .golangci.yml | 96 ++++++++++++++++++++++ .licenserc.yaml | 52 ++++++------ Dockerfile | 6 +- Makefile | 51 ++++++------ NOTICE | 5 ++ README.adoc | 35 ++++++-- main.go => cmd/license-eye/main.go | 7 +- commands/header/check.go | 12 +-- commands/header/fix.go | 19 +++-- {cmd => commands}/root.go | 28 ++++--- .../testcase.go => commands/version.go | 4 +- go.mod | 2 +- .../fix/double_slash.go => config/Config.go} | 34 ++++---- pkg/header/check.go | 22 +++-- pkg/header/config.go | 33 ++++++-- pkg/header/fix/angle_bracket.go | 5 +- pkg/header/fix/double_slash.go | 5 +- pkg/header/fix/fix.go | 12 +-- pkg/header/fix/hashtag.go | 5 +- pkg/header/fix/slash_asterisk.go | 5 +- pkg/header/result.go | 2 +- test/.licenserc_for_test_check.yaml | 43 +++++----- test/.licenserc_for_test_fix.yaml | 41 ++++----- test/include_test/with_license/testcase.go | 2 +- test/include_test/without_license/testcase.go | 2 +- 27 files changed, 360 insertions(+), 200 deletions(-) diff --git a/Dockerfile b/.asf.yaml similarity index 72% copy from Dockerfile copy to .asf.yaml index a466f44..8fe2357 100644 --- a/Dockerfile +++ b/.asf.yaml @@ -15,18 +15,12 @@ # specific language governing permissions and limitations # under the License. # -FROM golang:1.14.3-alpine AS build -WORKDIR /src - -COPY . . - -RUN GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /bin/license-checker - -FROM alpine:3 AS bin - -COPY --from=build /bin/license-checker /bin/license-checker - -WORKDIR /github/workspace/ - -ENTRYPOINT /bin/license-checker header check -v debug +github: + description: Apache SkyWalking Eyes + homepage: https://skywalking.apache.org/ + labels: + - cli + - tools + - license + - licensing diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1fa632a..68fcaf2 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -14,7 +14,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# +# + name: Build on: @@ -28,13 +29,16 @@ jobs: name: Build runs-on: ubuntu-latest steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 with: go-version: 1.14 - - uses: actions/checkout@v2 + - name: Lint Codes + run: make lint - - name: Selfcheck License + - name: License Check run: make license - name: Build diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..ca0227f --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,96 @@ +# Licensed to Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Apache Software Foundation (ASF) licenses this file to you under +# the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +linters-settings: + govet: + check-shadowing: true + golint: + min-confidence: 0 + gocyclo: + min-complexity: 15 + maligned: + suggest-new: true + dupl: + threshold: 200 + goconst: + min-len: 2 + min-occurrences: 2 + depguard: + list-type: blacklist + include-go-root: true + packages-with-error-messages: + fmt: "logging is allowed only by logutils.Log" + misspell: + locale: US + lll: + line-length: 150 + goimports: + local-prefixes: github.com/apache/skywalking-cli + gocritic: + enabled-tags: + - diagnostic + - experimental + - opinionated + - performance + - style + disabled-checks: + - ifElseChain + funlen: + lines: 100 + statements: 50 + whitespace: + multi-if: false + multi-func: false + +linters: + enable: + - bodyclose + - deadcode + - depguard + - dogsled + - dupl + - errcheck + - funlen + - goconst + - gocritic + - gocyclo + - gofmt + - goimports + - golint + - gosec + - gosimple + - govet + - ineffassign + - interfacer + - lll + - misspell + - nakedret + - staticcheck + - structcheck + - stylecheck + - typecheck + - unconvert + - unparam + - unused + - varcheck + - whitespace + +service: + golangci-lint-version: 1.20.x + prepare: + - echo "here I can run custom commands, but no preparation needed for this repo" diff --git a/.licenserc.yaml b/.licenserc.yaml index b8366ec..6aa224f 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -1,28 +1,30 @@ -license: | - Licensed to Apache Software Foundation (ASF) under one or more contributor - license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright - ownership. Apache Software Foundation (ASF) licenses this file to you under - the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. - You may obtain a copy of the License at +header: + license: | + Licensed to Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright + ownership. Apache Software Foundation (ASF) licenses this file to you under + the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. -paths-ignore: - - '.git/**' - - '.idea/**' - - 'bin/**' - - '**/*.md' - - '**/.DS_Store' - - 'test/**' - - 'go.mod' - - 'go.sum' - - 'LICENSE' + paths-ignore: + - '.git/**' + - '.idea/**' + - 'bin/**' + - '**/*.md' + - '**/.DS_Store' + - 'test/**' + - 'go.mod' + - 'go.sum' + - 'LICENSE' + - 'NOTICE' diff --git a/Dockerfile b/Dockerfile index a466f44..62c66ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,12 +21,12 @@ WORKDIR /src COPY . . -RUN GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /bin/license-checker +RUN GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /bin/license-eye FROM alpine:3 AS bin -COPY --from=build /bin/license-checker /bin/license-checker +COPY --from=build /bin/license-eye /bin/license-eye WORKDIR /github/workspace/ -ENTRYPOINT /bin/license-checker header check -v debug +ENTRYPOINT /bin/license-eye header check -v debug diff --git a/Makefile b/Makefile index e2a933a..3d1612e 100644 --- a/Makefile +++ b/Makefile @@ -14,13 +14,16 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# -PROJECT = license-checker +# + +PROJECT = license-eye VERSION ?= latest OUT_DIR = bin CURDIR := $(shell pwd) FILES := $$(find .$$($(PACKAGE_DIRECTORIES)) -name "*.go") FAIL_ON_STDOUT := awk '{ print } END { if (NR > 0) { exit 1 } }' +ARCH := $(shell uname) +OSNAME := $(if $(findstring Darwin,$(ARCH)),darwin,linux) GO := GO111MODULE=on go GO_PATH = $(shell $(GO) env GOPATH) @@ -28,38 +31,40 @@ GO_BUILD = $(GO) build GO_GET = $(GO) get GO_TEST = $(GO) test GO_LINT = $(GO_PATH)/bin/golangci-lint +GO_BUILD_LDFLAGS = -X github.com/apache/skywalking-eyes/license-eye/commands.version=$(VERSION) -all: clean deps lint test build +PLATFORMS := windows linux darwin +os = $(word 1, $@) +ARCH = amd64 -tools: - mkdir -p $(GO_PATH)/bin - -deps: tools - $(GO_GET) -v -t -d ./... +all: clean lint license test build .PHONY: lint -lint: tools - $(GO_LINT) version || curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GO_PATH)/bin v1.21.0 - @gofmt -s -l -w $(FILES) 2>&1 | $(FAIL_ON_STDOUT) +lint: + $(GO_LINT) version || curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GO_PATH)/bin $(GO_LINT) run -v ./... -.PHONE: test +.PHONY: fix-lint +fix-lint: + $(GO_LINT) run -v --fix ./... + +.PHONY: license +license: clean + $(GO) run cmd/license-eye/main.go header check + +.PHONY: test test: clean lint $(GO_TEST) ./... @>&2 echo "Great, all tests passed." -.PHONY: build -build: deps - $(GO_BUILD) -o $(OUT_DIR)/$(PROJECT) +.PHONY: $(PLATFORMS) +$(PLATFORMS): + mkdir -p $(OUT_DIR) + GOOS=$(os) GOARCH=$(ARCH) $(GO_BUILD) $(GO_BUILD_FLAGS) -ldflags "$(GO_BUILD_LDFLAGS)" -o $(OUT_DIR)/$(os)/$(PROJECT) cmd/license-eye/main.go -.PHONY: license -license: clean - $(GO) run main.go header check - -.PHONY: fix -fix: tools - $(GO_LINT) run -v --fix ./... +.PHONY: build +build: windows linux darwin .PHONY: clean -clean: tools +clean: -rm -rf bin diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..e646f51 --- /dev/null +++ b/NOTICE @@ -0,0 +1,5 @@ +Apache SkyWalking +Copyright 2017-2020 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/README.adoc b/README.adoc index 3174252..17501c0 100644 --- a/README.adoc +++ b/README.adoc @@ -1,5 +1,22 @@ -= license-checker -:repo: https://github.com/fgksgf/license-checker +// Licensed to Apache Software Foundation (ASF) under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Apache Software Foundation (ASF) licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// += license-eye +:repo: https://github.com/apache/skywalking-eyes A full-featured license guard to check and fix license headers and dependencies' licenses. @@ -8,7 +25,7 @@ A full-featured license guard to check and fix license headers and dependencies' [subs="attributes+",source,bash] ---- git clone {repo} -cd license-checker +cd license-eye make ---- @@ -16,22 +33,22 @@ make [source] ---- -$ license-checker +$ license-eye A full-featured license guard to check and fix license headers and dependencies' licenses. Usage: - license-checker [command] + license-eye [command] Available Commands: header License header related commands; e.g. check, fix, etc. help Help about any command Flags: - -h, --help help for license-checker + -h, --help help for license-eye -v, --verbosity string log level (debug, info, warn, error, fatal, panic (default "info") -Use "license-checker [command] --help" for more information about a command. +Use "license-eye [command] --help" for more information about a command. ---- == Configuration @@ -46,7 +63,7 @@ include::test/.licenserc_for_test_check.yaml[] [source] ---- -bin/license-checker -c test/.licenserc_for_test_fix.yaml header check +bin/license-eye -c test/.licenserc_for_test_fix.yaml header check INFO Loading configuration from file: test/.licenserc_for_test.yaml serc_for_test.yaml INFO Totally checked 23 files, valid: 8, invalid: 8, ignored: 7, fixed: 0 @@ -66,7 +83,7 @@ exit status 1 [source] ---- -bin/license-checker -c test/.licenserc_for_test_fix.yaml header fix +bin/license-eye -c test/.licenserc_for_test_fix.yaml header fix INFO Loading configuration from file: test/.licenserc_for_test_fix.yaml INFO Totally checked 16 files, valid: 7, invalid: 8, ignored: 1, fixed: 8 diff --git a/main.go b/cmd/license-eye/main.go similarity index 84% rename from main.go rename to cmd/license-eye/main.go index b2f1453..4059df5 100644 --- a/main.go +++ b/cmd/license-eye/main.go @@ -18,13 +18,14 @@ package main import ( - "license-checker/cmd" - "license-checker/internal/logger" "os" + + "github.com/apache/skywalking-eyes/license-eye/commands" + "github.com/apache/skywalking-eyes/license-eye/internal/logger" ) func main() { - if err := cmd.Execute(); err != nil { + if err := commands.Execute(); err != nil { logger.Log.Errorln(err) os.Exit(1) } diff --git a/commands/header/check.go b/commands/header/check.go index b20642f..1de9115 100644 --- a/commands/header/check.go +++ b/commands/header/check.go @@ -18,24 +18,26 @@ package header import ( + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + "github.com/apache/skywalking-eyes/license-eye/pkg/config" + "github.com/apache/skywalking-eyes/license-eye/pkg/header" + "github.com/spf13/cobra" - "license-checker/internal/logger" - "license-checker/pkg/header" ) var CheckCommand = &cobra.Command{ Use: "check", Aliases: []string{"c"}, - Long: "`check` command walks the specified paths recursively and checks if the specified files have the license header in the config file.", + Long: "check command walks the specified paths recursively and checks if the specified files have the license header in the config file.", RunE: func(cmd *cobra.Command, args []string) error { - var config header.Config + var config config.Config var result header.Result if err := config.Parse(cfgFile); err != nil { return err } - if err := header.Check(&config, &result); err != nil { + if err := header.Check(&config.Header, &result); err != nil { return err } diff --git a/commands/header/fix.go b/commands/header/fix.go index 624a1f0..0bc6047 100644 --- a/commands/header/fix.go +++ b/commands/header/fix.go @@ -19,32 +19,35 @@ package header import ( "fmt" - "github.com/spf13/cobra" - "license-checker/internal/logger" - "license-checker/pkg/header" - "license-checker/pkg/header/fix" "strings" + + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + "github.com/apache/skywalking-eyes/license-eye/pkg/config" + "github.com/apache/skywalking-eyes/license-eye/pkg/header" + "github.com/apache/skywalking-eyes/license-eye/pkg/header/fix" + + "github.com/spf13/cobra" ) var FixCommand = &cobra.Command{ Use: "fix", Aliases: []string{"f"}, - Long: "`fix` command walks the specified paths recursively and fix the license header if the specified files don't have the license header in the config file.", + Long: "fix command walks the specified paths recursively and fix the license header if the specified files don't have the license header.", RunE: func(cmd *cobra.Command, args []string) error { - var config header.Config + var config config.Config var result header.Result if err := config.Parse(cfgFile); err != nil { return err } - if err := header.Check(&config, &result); err != nil { + if err := header.Check(&config.Header, &result); err != nil { return err } var errors []string for _, file := range result.Failure { - if err := fix.Fix(file, &config, &result); err != nil { + if err := fix.Fix(file, &config.Header, &result); err != nil { errors = append(errors, err.Error()) } } diff --git a/cmd/root.go b/commands/root.go similarity index 67% rename from cmd/root.go rename to commands/root.go index 91cb6b6..ab16bf8 100644 --- a/cmd/root.go +++ b/commands/root.go @@ -15,41 +15,43 @@ // specific language governing permissions and limitations // under the License. // -package cmd +package commands import ( + headercommand "github.com/apache/skywalking-eyes/license-eye/commands/header" + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + "github.com/sirupsen/logrus" "github.com/spf13/cobra" - headercommand "license-checker/commands/header" - "license-checker/internal/logger" ) var ( verbosity string ) -// rootCmd represents the base command when called without any subcommands -var rootCmd = &cobra.Command{ - Use: "license-checker command [flags]", +// Root represents the base command when called without any subcommands +var Root = &cobra.Command{ + Use: "license-eye command [flags]", Long: "A full-featured license guard to check and fix license headers and dependencies' licenses", SilenceUsage: true, SilenceErrors: true, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - if level, err := logrus.ParseLevel(verbosity); err != nil { + level, err := logrus.ParseLevel(verbosity) + if err != nil { return err - } else { - logger.Log.SetLevel(level) } + logger.Log.SetLevel(level) return nil }, + Version: version, } // Execute sets flags to the root command appropriately. -// This is called by main.main(). It only needs to happen once to the rootCmd. +// This is called by main.main(). It only needs to happen once to the Root. func Execute() error { - rootCmd.PersistentFlags().StringVarP(&verbosity, "verbosity", "v", logrus.InfoLevel.String(), "log level (debug, info, warn, error, fatal, panic") + Root.PersistentFlags().StringVarP(&verbosity, "verbosity", "v", logrus.InfoLevel.String(), "log level (debug, info, warn, error, fatal, panic") - rootCmd.AddCommand(headercommand.Header) + Root.AddCommand(headercommand.Header) - return rootCmd.Execute() + return Root.Execute() } diff --git a/test/include_test/with_license/testcase.go b/commands/version.go similarity index 95% copy from test/include_test/with_license/testcase.go copy to commands/version.go index 0f54b96..0b07316 100644 --- a/test/include_test/with_license/testcase.go +++ b/commands/version.go @@ -15,4 +15,6 @@ // specific language governing permissions and limitations // under the License. // -package with_license +package commands + +var version string diff --git a/go.mod b/go.mod index 1ac37cf..bba41da 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module license-checker +module github.com/apache/skywalking-eyes/license-eye go 1.13 diff --git a/pkg/header/fix/double_slash.go b/pkg/config/Config.go similarity index 61% copy from pkg/header/fix/double_slash.go copy to pkg/config/Config.go index ab2819a..3b7c417 100644 --- a/pkg/header/fix/double_slash.go +++ b/pkg/config/Config.go @@ -15,34 +15,34 @@ // specific language governing permissions and limitations // under the License. // -package fix +package config import ( "io/ioutil" - "license-checker/pkg/header" - "os" - "strings" + + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + "github.com/apache/skywalking-eyes/license-eye/pkg/header" + + "gopkg.in/yaml.v3" ) -// DoubleSlash adds the configured license header to files whose comment starts with //. -func DoubleSlash(file string, config *header.Config, result *header.Result) error { - stat, err := os.Stat(file) - if err != nil { - return err - } +type Config struct { + Header header.ConfigHeader `yaml:"header"` +} - content, err := ioutil.ReadFile(file) - if err != nil { +// Parse reads and parses the header check configurations in config file. +func (config *Config) Parse(file string) error { + logger.Log.Infoln("Loading configuration from file:", file) + + if bytes, err := ioutil.ReadFile(file); err != nil { + return err + } else if err := yaml.Unmarshal(bytes, config); err != nil { return err } - lines := "// " + strings.Join(strings.Split(config.License, "\n"), "\n// ") + "\n" - - if err := ioutil.WriteFile(file, append([]byte(lines), content...), stat.Mode()); err != nil { + if err := config.Header.Finalize(); err != nil { return err } - result.Fix(file) - return nil } diff --git a/pkg/header/check.go b/pkg/header/check.go index 31eb6c7..e851b59 100644 --- a/pkg/header/check.go +++ b/pkg/header/check.go @@ -19,17 +19,20 @@ package header import ( "bufio" - "github.com/bmatcuk/doublestar/v2" - "license-checker/internal/logger" "os" "path/filepath" + "regexp" "strings" + + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + + "github.com/bmatcuk/doublestar/v2" ) -const CommentChars = "/*#- !~" +const CommentChars = "/*#- !~'\"" // Check checks the license headers of the specified paths/globs. -func Check(config *Config, result *Result) error { +func Check(config *ConfigHeader, result *Result) error { for _, pattern := range config.Paths { if err := checkPattern(pattern, result, config); err != nil { return err @@ -41,7 +44,7 @@ func Check(config *Config, result *Result) error { var seen = make(map[string]bool) -func checkPattern(pattern string, result *Result, config *Config) error { +func checkPattern(pattern string, result *Result, config *ConfigHeader) error { paths, err := doublestar.Glob(pattern) if err != nil { @@ -53,7 +56,7 @@ func checkPattern(pattern string, result *Result, config *Config) error { result.Ignore(path) continue } - if err = checkPath(path, result, config); err != nil { + if err := checkPath(path, result, config); err != nil { return err } seen[path] = true @@ -62,7 +65,7 @@ func checkPattern(pattern string, result *Result, config *Config) error { return nil } -func checkPath(path string, result *Result, config *Config) error { +func checkPath(path string, result *Result, config *ConfigHeader) error { defer func() { seen[path] = true }() if yes, err := config.ShouldIgnore(path); yes || seen[path] || err != nil { @@ -95,7 +98,7 @@ func checkPath(path string, result *Result, config *Config) error { } // CheckFile checks whether or not the file contains the configured license header. -func CheckFile(file string, config *Config, result *Result) error { +func CheckFile(file string, config *ConfigHeader, result *Result) error { if yes, err := config.ShouldIgnore(file); yes || err != nil { if !seen[file] { result.Ignore(file) @@ -115,7 +118,8 @@ func CheckFile(file string, config *Config, result *Result) error { scanner := bufio.NewScanner(reader) for scanner.Scan() { - line := strings.Trim(scanner.Text(), CommentChars) + line := strings.ToLower(strings.Trim(scanner.Text(), CommentChars)) + line = regexp.MustCompile(" +").ReplaceAllString(line, " ") if len(line) > 0 { lines = append(lines, line) } diff --git a/pkg/header/config.go b/pkg/header/config.go index f3629d1..6714fca 100644 --- a/pkg/header/config.go +++ b/pkg/header/config.go @@ -18,14 +18,17 @@ package header import ( - "github.com/bmatcuk/doublestar/v2" - "gopkg.in/yaml.v3" "io/ioutil" - "license-checker/internal/logger" + "regexp" "strings" + + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + + "github.com/bmatcuk/doublestar/v2" + "gopkg.in/yaml.v3" ) -type Config struct { +type ConfigHeader struct { License string `yaml:"license"` Paths []string `yaml:"paths"` PathsIgnore []string `yaml:"paths-ignore"` @@ -33,23 +36,25 @@ type Config struct { // NormalizedLicense returns the normalized string of the license content, // "normalized" means the linebreaks and CommentChars are all trimmed. -func (config *Config) NormalizedLicense() string { +func (config *ConfigHeader) NormalizedLicense() string { var lines []string for _, line := range strings.Split(config.License, "\n") { if len(line) > 0 { - lines = append(lines, strings.Trim(line, CommentChars)) + line = strings.ToLower(strings.Trim(line, CommentChars)) + line = regexp.MustCompile(" +").ReplaceAllString(line, " ") + lines = append(lines, line) } } return strings.Join(lines, " ") } // Parse reads and parses the header check configurations in config file. -func (config *Config) Parse(file string) error { +func (config *ConfigHeader) Parse(file string) error { logger.Log.Infoln("Loading configuration from file:", file) if bytes, err := ioutil.ReadFile(file); err != nil { return err - } else if err = yaml.Unmarshal(bytes, config); err != nil { + } else if err := yaml.Unmarshal(bytes, config); err != nil { return err } @@ -62,7 +67,7 @@ func (config *Config) Parse(file string) error { return nil } -func (config *Config) ShouldIgnore(path string) (bool, error) { +func (config *ConfigHeader) ShouldIgnore(path string) (bool, error) { for _, ignorePattern := range config.PathsIgnore { if matched, err := doublestar.Match(ignorePattern, path); matched || err != nil { return matched, err @@ -70,3 +75,13 @@ func (config *Config) ShouldIgnore(path string) (bool, error) { } return false, nil } + +func (config *ConfigHeader) Finalize() error { + logger.Log.Debugln("License header is:", config.NormalizedLicense()) + + if len(config.Paths) == 0 { + config.Paths = []string{"**"} + } + + return nil +} diff --git a/pkg/header/fix/angle_bracket.go b/pkg/header/fix/angle_bracket.go index ac31302..1b11bb1 100644 --- a/pkg/header/fix/angle_bracket.go +++ b/pkg/header/fix/angle_bracket.go @@ -20,14 +20,15 @@ package fix import ( "fmt" "io/ioutil" - "license-checker/pkg/header" "os" "reflect" "strings" + + "github.com/apache/skywalking-eyes/license-eye/pkg/header" ) // AngleBracket adds the configured license header to files whose comment starts with <!--. -func AngleBracket(file string, config *header.Config, result *header.Result) error { +func AngleBracket(file string, config *header.ConfigHeader, result *header.Result) error { stat, err := os.Stat(file) if err != nil { return err diff --git a/pkg/header/fix/double_slash.go b/pkg/header/fix/double_slash.go index ab2819a..2c7d634 100644 --- a/pkg/header/fix/double_slash.go +++ b/pkg/header/fix/double_slash.go @@ -19,13 +19,14 @@ package fix import ( "io/ioutil" - "license-checker/pkg/header" "os" "strings" + + "github.com/apache/skywalking-eyes/license-eye/pkg/header" ) // DoubleSlash adds the configured license header to files whose comment starts with //. -func DoubleSlash(file string, config *header.Config, result *header.Result) error { +func DoubleSlash(file string, config *header.ConfigHeader, result *header.Result) error { stat, err := os.Stat(file) if err != nil { return err diff --git a/pkg/header/fix/fix.go b/pkg/header/fix/fix.go index bba4df0..579969b 100644 --- a/pkg/header/fix/fix.go +++ b/pkg/header/fix/fix.go @@ -19,13 +19,15 @@ package fix import ( "fmt" - "license-checker/internal/logger" - "license-checker/pkg/header" "strings" + + "github.com/apache/skywalking-eyes/license-eye/internal/logger" + "github.com/apache/skywalking-eyes/license-eye/pkg/header" ) -var suffixToFunc = map[string]func(string, *header.Config, *header.Result) error{ - ".go": DoubleSlash, +var suffixToFunc = map[string]func(string, *header.ConfigHeader, *header.Result) error{ + ".go": DoubleSlash, + ".adoc": DoubleSlash, ".py": Hashtag, // TODO: tackle shebang ".sh": Hashtag, // TODO: tackle shebang @@ -42,7 +44,7 @@ var suffixToFunc = map[string]func(string, *header.Config, *header.Result) error } // Fix adds the configured license header to the given file. -func Fix(file string, config *header.Config, result *header.Result) error { +func Fix(file string, config *header.ConfigHeader, result *header.Result) error { var r header.Result if err := header.CheckFile(file, config, &r); err != nil || !r.HasFailure() { logger.Log.Warnln("Try to fix a valid file, returning:", file) diff --git a/pkg/header/fix/hashtag.go b/pkg/header/fix/hashtag.go index 601da4b..f467b18 100644 --- a/pkg/header/fix/hashtag.go +++ b/pkg/header/fix/hashtag.go @@ -19,14 +19,15 @@ package fix import ( "io/ioutil" - "license-checker/pkg/header" "os" "reflect" "strings" + + "github.com/apache/skywalking-eyes/license-eye/pkg/header" ) // Hashtag adds the configured license header to the files whose comment starts with #. -func Hashtag(file string, config *header.Config, result *header.Result) error { +func Hashtag(file string, config *header.ConfigHeader, result *header.Result) error { stat, err := os.Stat(file) if err != nil { return err diff --git a/pkg/header/fix/slash_asterisk.go b/pkg/header/fix/slash_asterisk.go index adbf4e8..5a92209 100644 --- a/pkg/header/fix/slash_asterisk.go +++ b/pkg/header/fix/slash_asterisk.go @@ -19,13 +19,14 @@ package fix import ( "io/ioutil" - "license-checker/pkg/header" "os" "strings" + + "github.com/apache/skywalking-eyes/license-eye/pkg/header" ) // SlashAsterisk adds the configured license header to files whose comment starts with /**. -func SlashAsterisk(file string, config *header.Config, result *header.Result) error { +func SlashAsterisk(file string, config *header.ConfigHeader, result *header.Result) error { stat, err := os.Stat(file) if err != nil { return err diff --git a/pkg/header/result.go b/pkg/header/result.go index ea17fb6..068fe75 100644 --- a/pkg/header/result.go +++ b/pkg/header/result.go @@ -51,7 +51,7 @@ func (result *Result) HasFailure() bool { func (result *Result) Error() error { return fmt.Errorf( - "The following files don't have a valid license header: \n%v", + "the following files don't have a valid license header: \n%v", strings.Join(result.Failure, "\n"), ) } diff --git a/test/.licenserc_for_test_check.yaml b/test/.licenserc_for_test_check.yaml index b4c1eb8..cad5ecb 100644 --- a/test/.licenserc_for_test_check.yaml +++ b/test/.licenserc_for_test_check.yaml @@ -1,25 +1,26 @@ -license: | - Licensed to Apache Software Foundation (ASF) under one or more contributor - license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright - ownership. Apache Software Foundation (ASF) licenses this file to you under - the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. - You may obtain a copy of the License at +header: + license: | + Licensed to Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright + ownership. Apache Software Foundation (ASF) licenses this file to you under + the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. -paths: - - 'test/**' + paths: + - 'test/**' -paths-ignore: - - '**/.DS_Store' - - '**/.json' - - '**/exclude_test/**' + paths-ignore: + - '**/.DS_Store' + - '**/.json' + - '**/exclude_test/**' diff --git a/test/.licenserc_for_test_fix.yaml b/test/.licenserc_for_test_fix.yaml index 27d3087..19a864b 100644 --- a/test/.licenserc_for_test_fix.yaml +++ b/test/.licenserc_for_test_fix.yaml @@ -1,24 +1,25 @@ -license: | - Licensed to Apache Software Foundation (ASF) under one or more contributor - license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright - ownership. Apache Software Foundation (ASF) licenses this file to you under - the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. - You may obtain a copy of the License at +header: + license: | + Licensed to Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright + ownership. Apache Software Foundation (ASF) licenses this file to you under + the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. -paths: - - 'test/include_test/**' + paths: + - 'test/include_test/**' -paths-ignore: - - '**/.DS_Store' - - '**/.json' + paths-ignore: + - '**/.DS_Store' + - '**/.json' diff --git a/test/include_test/with_license/testcase.go b/test/include_test/with_license/testcase.go index 0f54b96..c382b60 100644 --- a/test/include_test/with_license/testcase.go +++ b/test/include_test/with_license/testcase.go @@ -15,4 +15,4 @@ // specific language governing permissions and limitations // under the License. // -package with_license +package withlicense diff --git a/test/include_test/without_license/testcase.go b/test/include_test/without_license/testcase.go index fab4aaa..6ee0c67 100644 --- a/test/include_test/without_license/testcase.go +++ b/test/include_test/without_license/testcase.go @@ -16,4 +16,4 @@ // consectetur mollit voluptate magna ut ullamco pariatur proident esse commodo consectetur minim in do eu // consequat ea eiusmod proident incididunt ut qui sunt consequat officia amet amet amet dolore fugiat ex. -package with_license +package withlicense
