mirror of
https://github.com/syncthing/syncthing.git
synced 2025-12-23 22:18:14 -05:00
Merge branch 'main' into v2
* main: chore: move golangci-lint & meta to separate PR-only workflow (#10119)
This commit is contained in:
41
.github/workflows/build-syncthing.yaml
vendored
41
.github/workflows/build-syncthing.yaml
vendored
@@ -87,26 +87,6 @@ jobs:
|
|||||||
LOKI_LABELS: "go=${{ matrix.go }},runner=${{ matrix.runner }},repo=${{ github.repository }},ref=${{ github.ref }}"
|
LOKI_LABELS: "go=${{ matrix.go }},runner=${{ matrix.runner }},repo=${{ github.repository }},ref=${{ github.ref }}"
|
||||||
CGO_ENABLED: "1"
|
CGO_ENABLED: "1"
|
||||||
|
|
||||||
#
|
|
||||||
# Meta checks for formatting, copyright, etc
|
|
||||||
#
|
|
||||||
|
|
||||||
correctness:
|
|
||||||
name: Check correctness
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: ${{ env.GO_VERSION }}
|
|
||||||
cache: false
|
|
||||||
check-latest: true
|
|
||||||
|
|
||||||
- name: Check correctness
|
|
||||||
run: |
|
|
||||||
go test -v ./meta
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# The basic checks job is a virtual one that depends on the matrix tests,
|
# The basic checks job is a virtual one that depends on the matrix tests,
|
||||||
# the correctness checks, and various builds that we always do. This makes
|
# the correctness checks, and various builds that we always do. This makes
|
||||||
@@ -121,14 +101,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
needs:
|
||||||
- build-test
|
- build-test
|
||||||
- correctness
|
|
||||||
- package-linux
|
- package-linux
|
||||||
- package-cross
|
- package-cross
|
||||||
- package-source
|
- package-source
|
||||||
- package-debian
|
- package-debian
|
||||||
- package-windows
|
- package-windows
|
||||||
- govulncheck
|
- govulncheck
|
||||||
- golangci
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -1049,22 +1027,3 @@ jobs:
|
|||||||
go run build.go assets
|
go run build.go assets
|
||||||
go install golang.org/x/vuln/cmd/govulncheck@latest
|
go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||||
govulncheck ./...
|
govulncheck ./...
|
||||||
|
|
||||||
golangci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: Run golangci-lint
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: ${{ env.GO_VERSION }}
|
|
||||||
cache: false
|
|
||||||
check-latest: true
|
|
||||||
|
|
||||||
- name: ensure asset generation
|
|
||||||
run: go run build.go assets
|
|
||||||
|
|
||||||
- name: golangci-lint
|
|
||||||
uses: golangci/golangci-lint-action@v8
|
|
||||||
with:
|
|
||||||
only-new-issues: true
|
|
||||||
|
|||||||
49
.github/workflows/pr-linters.yaml
vendored
Normal file
49
.github/workflows/pr-linters.yaml
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
name: Run PR linters
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
#
|
||||||
|
# golangci-lint runs a suite of static analysis checks on the code
|
||||||
|
#
|
||||||
|
|
||||||
|
golangci:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Golangci-lint
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 'stable'
|
||||||
|
|
||||||
|
- name: ensure asset generation
|
||||||
|
run: go run build.go assets
|
||||||
|
|
||||||
|
- name: golangci-lint
|
||||||
|
uses: golangci/golangci-lint-action@v8
|
||||||
|
with:
|
||||||
|
only-new-issues: true
|
||||||
|
|
||||||
|
#
|
||||||
|
# Meta checks for formatting, copyright, etc
|
||||||
|
#
|
||||||
|
|
||||||
|
meta:
|
||||||
|
name: Meta checks
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 'stable'
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
go run build.go assets
|
||||||
|
go test -v ./meta
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
// Copyright (C) 2017 The Syncthing Authors.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
||||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
package meta
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"log"
|
|
||||||
"os/exec"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// fast linters complete in a fraction of a second and might as well be
|
|
||||||
// run always as part of the build
|
|
||||||
fastLinters = []string{
|
|
||||||
"deadcode",
|
|
||||||
"golint",
|
|
||||||
"ineffassign",
|
|
||||||
"vet",
|
|
||||||
}
|
|
||||||
|
|
||||||
// slow linters take several seconds and are run only as part of the
|
|
||||||
// "metalint" command.
|
|
||||||
slowLinters = []string{
|
|
||||||
"gosimple",
|
|
||||||
"staticcheck",
|
|
||||||
"structcheck",
|
|
||||||
"unused",
|
|
||||||
"varcheck",
|
|
||||||
}
|
|
||||||
|
|
||||||
// Which parts of the tree to lint
|
|
||||||
lintDirs = []string{
|
|
||||||
".",
|
|
||||||
"../cmd/...",
|
|
||||||
"../lib/...",
|
|
||||||
"../script/...",
|
|
||||||
}
|
|
||||||
|
|
||||||
// Messages to ignore
|
|
||||||
lintExcludes = []string{
|
|
||||||
".pb.go",
|
|
||||||
"should have comment",
|
|
||||||
"protocol.Vector composite literal uses unkeyed fields",
|
|
||||||
"cli.Requires composite literal uses unkeyed fields",
|
|
||||||
"Use DialContext instead", // Go 1.7
|
|
||||||
"os.SEEK_SET is deprecated", // Go 1.7
|
|
||||||
"SA4017", // staticcheck "is a pure function but its return value is ignored"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestCheckMetalint(t *testing.T) {
|
|
||||||
if !isGometalinterInstalled() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
gometalinter(t, lintDirs, lintExcludes...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func isGometalinterInstalled() bool {
|
|
||||||
if _, err := runError("gometalinter", "--disable-all"); err != nil {
|
|
||||||
log.Println("gometalinter is not installed")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func gometalinter(_ *testing.T, dirs []string, excludes ...string) bool {
|
|
||||||
params := []string{"--disable-all", "--concurrency=2", "--deadline=300s"}
|
|
||||||
|
|
||||||
for _, linter := range fastLinters {
|
|
||||||
params = append(params, "--enable="+linter)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !testing.Short() {
|
|
||||||
for _, linter := range slowLinters {
|
|
||||||
params = append(params, "--enable="+linter)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, exclude := range excludes {
|
|
||||||
params = append(params, "--exclude="+exclude)
|
|
||||||
}
|
|
||||||
|
|
||||||
params = append(params, dirs...)
|
|
||||||
|
|
||||||
bs, _ := runError("gometalinter", params...)
|
|
||||||
|
|
||||||
nerr := 0
|
|
||||||
lines := make(map[string]struct{})
|
|
||||||
for _, line := range strings.Split(string(bs), "\n") {
|
|
||||||
if line == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if _, ok := lines[line]; ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
log.Println(line)
|
|
||||||
if strings.Contains(line, "executable file not found") {
|
|
||||||
log.Println(` - Try "go run build.go setup" to install missing tools`)
|
|
||||||
}
|
|
||||||
lines[line] = struct{}{}
|
|
||||||
nerr++
|
|
||||||
}
|
|
||||||
|
|
||||||
return nerr == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func runError(cmd string, args ...string) ([]byte, error) {
|
|
||||||
ecmd := exec.Command(cmd, args...)
|
|
||||||
bs, err := ecmd.CombinedOutput()
|
|
||||||
return bytes.TrimSpace(bs), err
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user