From 638c967ebe5fbb11bfc3713ce2f1a499d369acb7 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 18 Sep 2024 11:17:36 -0400 Subject: [PATCH] feat(ci): add golangci-lint config and shared workflow This adds a shared workflow for linting Go code using golangci-lint. It adds golangci-lint configuration files for both the default and soft linting configurations and clones the meta repository to use the configuration files when running the workflow. --- .github/workflows/lint.yml | 61 ++++++++++++++++++++++++++++++++++++++ golangci-soft.yml | 46 ++++++++++++++++++++++++++++ golangci.yml | 30 +++++++++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 .github/workflows/lint.yml create mode 100644 golangci-soft.yml create mode 100644 golangci.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..16214b3 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,61 @@ +name: lint +on: + workflow_call: + inputs: + working-directory: + required: false + type: string + +permissions: + # Required: allow read access to the content for analysis. + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + pull-requests: read + # Optional: allow write access to checks to allow the action to annotate code in the PR. + checks: write + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: stable + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: charmbracelet/meta + path: meta + - run: | + pwd + tree + - name: golangci-lint + uses: golangci/golangci-lint-action@v6 + with: + working-directory: ${{ inputs.working-directory }} + # Optional: golangci-lint command line arguments. + args: --config="$GITHUB_WORKSPACE/meta/golangci.yml" + # Optional: show only new issues if it's a pull request. The default value is `false`. + only-new-issues: true + + lint-soft: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: stable + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: charmbracelet/meta + path: meta + - name: golangci-lint + uses: golangci/golangci-lint-action@v6 + with: + working-directory: ${{ inputs.working-directory }} + # Optional: golangci-lint command line arguments. + args: --config="$GITHUB_WORKSPACE/meta/golangci-soft.yml" --issues-exit-code=0 + # Optional: show only new issues if it's a pull request. The default value is `false`. + only-new-issues: true diff --git a/golangci-soft.yml b/golangci-soft.yml new file mode 100644 index 0000000..1b6824b --- /dev/null +++ b/golangci-soft.yml @@ -0,0 +1,46 @@ +run: + tests: false + +issues: + include: + - EXC0001 + - EXC0005 + - EXC0011 + - EXC0012 + - EXC0013 + + max-issues-per-linter: 0 + max-same-issues: 0 + +linters: + enable: + # - dupl + - exhaustive + # - exhaustivestruct + - goconst + - godot + - godox + - gomnd + - gomoddirectives + - goprintffuncname + # - lll + - misspell + - nakedret + - nestif + - noctx + - nolintlint + - prealloc + - wrapcheck + + # disable default linters, they are already enabled in .golangci.yml + disable: + - deadcode + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - structcheck + - typecheck + - unused + - varcheck diff --git a/golangci.yml b/golangci.yml new file mode 100644 index 0000000..3affce9 --- /dev/null +++ b/golangci.yml @@ -0,0 +1,30 @@ +run: + tests: false + +issues: + include: + - EXC0001 + - EXC0005 + - EXC0011 + - EXC0012 + - EXC0013 + + max-issues-per-linter: 0 + max-same-issues: 0 + +linters: + enable: + - bodyclose + - exportloopref + - gofumpt + - goimports + - gosec + - nilerr + - predeclared + - revive + - rowserrcheck + - sqlclosecheck + - tparallel + - unconvert + - unparam + - whitespace