Compare commits

...

60 Commits

Author SHA1 Message Date
Fernandez Ludovic ba0d7d2ec0 chore: prepare release v9.3.0 2026-06-29 17:43:58 +02:00
Ludovic Fernandez efd0857dc4 feat: add no-run-logs-group as experimental option (#1403) 2026-06-29 17:39:16 +02:00
Fernandez Ludovic ed485de1ff build(deps): bump undici from 6.24.0 to 6.27.0 2026-06-22 16:28:45 +02:00
dependabot[bot] 8872e8d04c build(deps-dev): bump js-yaml from 4.1.1 to 4.2.0 (#1400) 2026-06-15 22:06:49 +02:00
dependabot[bot] b163415b47 build(deps): bump tmp from 0.2.6 to 0.2.7 (#1399)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-06-15 19:48:21 +00:00
dependabot[bot] e52a9f8996 build(deps): bump github/codeql-action from 4.35.5 to 4.36.0 in the github-actions group (#1398) 2026-06-02 06:11:24 +02:00
dependabot[bot] 8182aa3494 build(deps): bump tmp from 0.2.5 to 0.2.6 (#1397)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-05-28 13:01:57 +02:00
dependabot[bot] 5403a413de build(deps): bump github/codeql-action from 4.35.4 to 4.35.5 in the github-actions group (#1395) 2026-05-22 02:50:10 +02:00
Fernandez Ludovic 82606bf257 chore: prepare release v9.2.1 2026-05-22 02:36:08 +02:00
Ludovic Fernandez 97c8387e66 chore: improve workflows (#1394) 2026-05-22 02:32:02 +02:00
Fernandez Ludovic 28d0a191bb build(deps): bump the dependencies group across 1 directory with 2 updates 2026-05-19 23:49:00 +02:00
dependabot[bot] 633fbc7d54 build(deps): bump github/codeql-action from 4.35.3 to 4.35.4 (#1391) 2026-05-19 23:43:14 +02:00
dependabot[bot] 59f43e26c9 build(deps): bump github/codeql-action from 4.35.2 to 4.35.3 (#1389) 2026-05-12 17:12:19 +02:00
dependabot[bot] 9eb174e04a build(deps): bump fast-xml-builder from 1.1.5 to 1.2.0 (#1386) 2026-05-08 21:40:47 +02:00
dependabot[bot] 4f52504dfb build(deps): bump github/codeql-action from 4 to 4.35.2 (#1384) 2026-05-06 05:32:49 +02:00
Fernandez Ludovic 6f87dfdbd1 docs: update examples 2026-05-06 05:09:42 +02:00
Fernandez Ludovic c9500d7aa7 chore: improve workflows 2026-05-06 05:05:55 +02:00
Fernandez Ludovic 03b1faa37e chore: improve issue templates 2026-05-06 05:03:42 +02:00
Simon Sawert 66dfb5ced2 docs: document how to stay up to date with Renovate (#1378) 2026-04-21 19:16:39 +02:00
Ludovic Fernandez c592b80ac9 build(deps-dev): bump the dev-dependencies group across 1 directory with 7 updates (#1374) 2026-04-20 16:24:19 +02:00
dependabot[bot] 46c9287ccb build(deps): bump brace-expansion (#1370)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-04-08 09:20:41 +00:00
Andreas Deininger 36fe29c8f9 docs: fix broken link (#1368) 2026-04-01 22:46:12 +00:00
dependabot[bot] 2d7e7b6785 build(deps): bump yaml from 2.8.2 to 2.8.3 (#1365)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-03-26 10:42:32 +00:00
dependabot[bot] 40890fa829 build(deps): bump picomatch from 4.0.3 to 4.0.4 (#1364) 2026-03-26 11:33:21 +01:00
Oleksandr Redko e94e72cadf docs: update examples (#1360) 2026-03-22 09:17:25 +01:00
dependabot[bot] b269f19624 build(deps-dev): bump flatted from 3.3.3 to 3.4.2 (#1359) 2026-03-20 01:55:27 +00:00
dependabot[bot] fa2a845e31 build(deps): bump fast-xml-parser from 5.5.6 to 5.5.7 (#1358)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-03-20 01:46:17 +00:00
dependabot[bot] 2bcbc9e745 build(deps): bump fast-xml-parser from 5.4.1 to 5.5.6 (#1357)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-03-18 17:11:34 +00:00
Oleksandr Redko b7bcab6379 docs: remove duplicated compatibility requirement (#1353) 2026-03-03 11:24:25 +01:00
dependabot[bot] b207e52793 build(deps): bump fast-xml-parser from 5.3.6 to 5.4.1 (#1351)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-02-28 08:20:15 +00:00
dependabot[bot] f6671aa25d build(deps): bump minimatch from 3.1.3 to 3.1.5 (#1350)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-02-28 09:08:03 +01:00
Fernandez Ludovic 6b23cb2cbc docs: update examples 2026-02-28 08:31:27 +01:00
dependabot[bot] 02d66c3f78 build(deps): bump minimatch (#1348)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-02-25 00:54:57 +00:00
dependabot[bot] 17a5bf4dbc build(deps): bump fast-xml-parser from 5.3.4 to 5.3.6 (#1346)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-02-18 09:29:28 +00:00
dependabot[bot] fce8c98977 build(deps-dev): bump the dev-dependencies group across 1 directory with 3 updates (#1344)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-02-16 15:15:42 +01:00
dependabot[bot] b62bd5d234 build(deps-dev): bump the dev-dependencies group with 2 updates (#1340) 2026-02-02 12:01:18 +01:00
dependabot[bot] d6deb2e8bd build(deps): bump fast-xml-parser from 5.3.3 to 5.3.4 (#1339)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-01-31 02:24:27 +01:00
dependabot[bot] 2c963d3543 build(deps): bump @types/node from 25.0.9 to 25.0.10 in the dependencies group (#1338) 2026-01-26 13:54:47 +01:00
dependabot[bot] 66754993e2 build(deps-dev): bump the dev-dependencies group with 3 updates (#1337) 2026-01-26 13:54:21 +01:00
dependabot[bot] a3a03ee425 build(deps): bump the dependencies group with 2 updates (#1336)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-01-19 10:58:50 +00:00
dependabot[bot] fd271f07e7 build(deps-dev): bump the dev-dependencies group with 4 updates (#1335) 2026-01-19 11:48:00 +01:00
dependabot[bot] de73c35617 build(deps): bump the dependencies group with 6 updates (#1334)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-01-12 14:07:29 +00:00
dependabot[bot] f75f4b02ef build(deps-dev): bump the dev-dependencies group with 2 updates (#1333)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2026-01-12 13:48:04 +00:00
dependabot[bot] f75c1c4ee8 build(deps-dev): bump the dev-dependencies group with 2 updates (#1332) 2026-01-05 12:24:50 +01:00
dependabot[bot] e9dc9291fd build(deps-dev): bump the dev-dependencies group with 2 updates (#1330) 2025-12-29 14:34:53 +01:00
dependabot[bot] 2e568c9b8b build(deps): bump @types/node from 25.0.2 to 25.0.3 in the dependencies group (#1329) 2025-12-22 17:18:27 +01:00
dependabot[bot] 6ad01b21aa build(deps-dev): bump the dev-dependencies group with 2 updates (#1328) 2025-12-22 17:17:59 +01:00
dependabot[bot] ef750330e2 build(deps): bump the dependencies group with 4 updates (#1327)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2025-12-15 10:24:02 +00:00
dependabot[bot] 3ab2377cc3 build(deps-dev): bump the dev-dependencies group with 2 updates (#1326) 2025-12-15 11:13:55 +01:00
dependabot[bot] ca80beefdd build(deps-dev): bump the dev-dependencies group with 3 updates (#1325) 2025-12-08 13:32:43 +01:00
Fernandez Ludovic 87a373f691 chore: update workflow 2025-12-08 13:12:37 +01:00
Fernandez Ludovic 7fa6da85a5 chore: update workflow 2025-12-08 12:54:19 +01:00
dependabot[bot] 1e7e51e771 build(deps): bump yaml from 2.8.1 to 2.8.2 in the dependencies group (#1324)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2025-12-01 13:01:48 +01:00
dependabot[bot] 5256ff0c0a build(deps-dev): bump the dev-dependencies group with 3 updates (#1323) 2025-12-01 12:32:33 +01:00
Fernandez Ludovic 13fed6f911 chore: update workflows 2025-11-28 17:39:49 +01:00
Fernandez Ludovic 7afe8ff863 chore: update workflows 2025-11-28 17:28:27 +01:00
Ludovic Fernandez 5a9289952f chore: move samples into fixtures (#1321) 2025-11-28 17:21:09 +01:00
Ludovic Fernandez aa6fad0ea0 feat: add version-file option (#1320) 2025-11-28 16:54:48 +01:00
dependabot[bot] a6071aaacb build(deps): bump actions/checkout from 5 to 6 (#1318) 2025-11-24 12:36:51 +01:00
dependabot[bot] 6e36c8460f build(deps-dev): bump the dev-dependencies group with 2 updates (#1317) 2025-11-24 12:36:23 +01:00
38 changed files with 125431 additions and 127834 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module"
"sourceType": "commonjs"
},
"extends": [
"eslint:recommended",
+19 -2
View File
@@ -10,8 +10,6 @@ body:
required: true
- label: Yes, I've searched similar issues on GitHub and didn't find any.
required: true
- label: Yes, I've included all information below (version, config, etc).
required: true
- type: textarea
id: problem
@@ -25,6 +23,7 @@ body:
id: golangci-lint-version
attributes:
label: Version of golangci-lint
placeholder: golangci-lint has version 2.x.x built with go1.x.x from xxxx on xxxx-xx-xx
validations:
required: true
@@ -32,6 +31,7 @@ body:
id: github-action-version
attributes:
label: Version of the GitHub Action
placeholder: v9.2.0
validations:
required: true
@@ -69,6 +69,7 @@ body:
id: go-env
attributes:
label: Go version
placeholder: go1.25.8
validations:
required: true
@@ -86,3 +87,19 @@ body:
</details>
validations:
required: true
- type: checkboxes
id: validation
attributes:
label: Validation
options:
- label: Yes, I've included all the information above (example, version, config, etc.).
required: true
- type: checkboxes
id: supporter
attributes:
label: Supporter
description: If you find golangci-lint valuable, consider [sponsoring the project](https://donate.golangci.org) to help sustain its development. 💛
options:
- label: I am a [sponsor/backer](https://donate.golangci.org) of this project.
@@ -42,3 +42,11 @@ body:
placeholder: "Add any other context or screenshots about the feature request here."
validations:
required: false
- type: checkboxes
id: supporter
attributes:
label: Supporter
description: If you find golangci-lint valuable, consider [sponsoring the project](https://donate.golangci.org) to help sustain its development. 💛
options:
- label: I am a [sponsor/backer](https://donate.golangci.org) of this project.
+10 -2
View File
@@ -3,7 +3,13 @@ updates:
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
interval: monthly
cooldown:
default-days: 7
groups:
github-actions:
patterns:
- "*" # Group all updates into a single larger pull request.
- package-ecosystem: npm
directory: "/"
groups:
@@ -12,4 +18,6 @@ updates:
dependencies:
dependency-type: production
schedule:
interval: weekly
interval: monthly
cooldown:
default-days: 7
+9 -7
View File
@@ -5,7 +5,6 @@ on:
branches:
- main
pull_request:
# The branches below must be a subset of the branches above
branches:
- main
schedule:
@@ -13,17 +12,20 @@ on:
jobs:
codeQL:
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# Must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head of the pull request.
# Only include this option if you are running this workflow on pull requests.
fetch-depth: 2
persist-credentials: false
# If this run was triggered by a pull request event then checkout
# the head of the pull request instead of the merge commit.
@@ -33,14 +35,14 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
# Override language selection by uncommenting this and choosing your languages
with:
language: 'javascript'
languages: 'javascript-typescript'
- run: |
npm install
npm run all
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
+54 -49
View File
@@ -1,5 +1,6 @@
name: "build-and-test"
on: # rebuild any PRs and main branch changes
on:
pull_request:
branches:
- main
@@ -7,22 +8,28 @@ on: # rebuild any PRs and main branch changes
branches:
- main
permissions: {}
jobs:
build: # make sure build/ci work properly
# make sure build/ci work properly
build:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24.x
- uses: actions/checkout@v5
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- run: |
npm install
npm run all
# Fail the build if there is dirty change
# Fail the build if there are changes.
- run: git diff --exit-code -- dist
test: # make sure the action works on a clean machine without building
# make sure the action works on a clean machine without building
test:
needs: [ build ]
strategy:
matrix:
@@ -34,27 +41,27 @@ jobs:
version:
- ""
- "latest"
- "v2.5"
- "v2.5.0"
- "v2.12"
- "v2.12.2"
runs-on: ${{ matrix.os }}
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24.x
- uses: actions/setup-go@v6
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: oldstable
- uses: ./
with:
version: ${{ matrix.version }}
args: --timeout=5m --issues-exit-code=0 ./sample/...
args: --timeout=5m --issues-exit-code=0 ./fixtures/simple/...
only-new-issues: true
test-go-install: # make sure the action works on a clean machine without building (go-install mode)
# make sure the action works on a clean machine without building (go-install mode)
test-go-install:
needs: [ build ]
strategy:
matrix:
@@ -66,24 +73,23 @@ jobs:
version:
- ""
- "latest"
- "v2.5.0"
- "655e8ede5178280b2a640e185bc4a343aed0f54e"
- "v2.12.1"
- "c0d3ddc9cf3faa61a4e378e879ece580256d76e5"
runs-on: ${{ matrix.os }}
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24.x
- uses: actions/setup-go@v6
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: oldstable
- uses: ./
with:
version: ${{ matrix.version }}
args: --timeout=5m --issues-exit-code=0 ./sample/...
args: --timeout=5m --issues-exit-code=0 ./fixtures/simple/...
only-new-issues: true
install-mode: goinstall
@@ -97,17 +103,17 @@ jobs:
- macos-latest
- windows-latest
wd:
- sample-go-mod
- sample-go-tool
- fixtures/go-mod
- fixtures/go-tool
runs-on: ${{ matrix.os }}
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24.x
- uses: actions/setup-go@v6
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: oldstable
- uses: ./
@@ -115,7 +121,8 @@ jobs:
working-directory: ${{ matrix.wd }}
args: --timeout=5m --issues-exit-code=0 ./...
test-plugins: # make sure the action works on a clean machine with plugins
# make sure the action works on a clean machine with plugins
test-plugins:
needs: [ build ]
strategy:
matrix:
@@ -127,24 +134,23 @@ jobs:
version:
- ""
- "latest"
- "v2.5"
- "v2.5.0"
- "v2.12"
- "v2.12.1"
runs-on: ${{ matrix.os }}
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24.x
- uses: actions/setup-go@v6
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: oldstable
- uses: ./
with:
version: ${{ matrix.version }}
working-directory: sample-plugins
working-directory: fixtures/plugins
args: --timeout=5m --issues-exit-code=0 ./...
test-monorepo:
@@ -157,19 +163,18 @@ jobs:
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 24.x
- uses: actions/setup-go@v6
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: oldstable
- uses: ./
with:
working-directory: sample-monorepo
working-directory: fixtures/monorepo
experimental: "automatic-module-directories"
args: --timeout=5m --issues-exit-code=0 ./...
+84 -29
View File
@@ -49,14 +49,14 @@ jobs:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: stable
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.6
version: v2.12
```
</details>
@@ -87,14 +87,14 @@ jobs:
name: lint
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: ${{ matrix.go }}
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.6
version: v2.12
```
You will also likely need to add the following `.gitattributes` file to ensure that line endings for Windows builds are properly formatted:
@@ -120,7 +120,7 @@ on:
env:
GO_VERSION: stable
GOLANGCI_LINT_VERSION: v2.6
GOLANGCI_LINT_VERSION: v2.12
jobs:
detect-modules:
@@ -128,7 +128,7 @@ jobs:
outputs:
modules: ${{ steps.set-modules.outputs.modules }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
@@ -142,7 +142,7 @@ jobs:
matrix:
modules: ${{ fromJSON(needs.detect-modules.outputs.modules) }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
@@ -179,7 +179,7 @@ jobs:
with:
os: ${{ matrix.os }}
go-version: ${{ matrix.go-version }}
golangci-lint-version: v2.6
golangci-lint-version: v2.12
```
```yaml
@@ -201,7 +201,7 @@ on:
golangci-lint-version:
description: 'Golangci-lint version'
type: string
default: 'v2.6'
default: 'v2.12'
jobs:
detect-modules:
@@ -209,7 +209,7 @@ jobs:
outputs:
modules: ${{ steps.set-modules.outputs.modules }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: ${{ inputs.go-version }}
@@ -224,7 +224,7 @@ jobs:
matrix:
modules: ${{ fromJSON(needs.detect-modules.outputs.modules) }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: ${{ inputs.go-version }}
@@ -247,7 +247,6 @@ You will also likely need to add the following `.gitattributes` file to ensure t
* `v9.0.0` requires Nodejs runtime [`node24`](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/)
* `v8.0.0` works with `golangci-lint` version >= `v2.1.0`
* `v8.0.0` works with `golangci-lint` version >= `v2.1.0`
* `v7.0.0` supports golangci-lint v2 only.
* `v6.0.0+` removes `annotations` option, removes the default output format (`github-actions`).
* `v5.0.0+` removes `skip-pkg-cache` and `skip-build-cache` because the cache related to Go itself is already handled by `actions/setup-go`.
@@ -261,21 +260,22 @@ You will also likely need to add the following `.gitattributes` file to ensure t
### Overview
| Option | Description |
|---------------------------------------------------------------|----------------------------------------------------|
| [`version`](#version) | The version of golangci-lint to use. |
| [`install-mode`](#install-mode) | The mode to install golangci-lint. |
| [`install-only`](#install-only) | Only install golangci-lint. |
| [`verify`](#verify) | Validates golangci-lint configuration file. |
| [`github-token`](#github-token) | Used by the `only-new-issues` option. |
| [`only-new-issues`](#only-new-issues) | Show only new issues. |
| [`working-directory`](#working-directory) | The golangci-lint working directory. |
| [`args`](#args) | Golangci-lint command line arguments. |
| [`skip-cache`](#skip-cache) | Disable cache support. |
| [`skip-save-cache`](#skip-save-cache) | Don't save cache. |
| [`cache-invalidation-interval`](#cache-invalidation-interval) | Number of days before cache invalidation. |
| [`problem-matchers`](#problem-matchers) | Forces the usage of the embedded problem matchers. |
| [Experimental](#experimental) | Experimental options |
| Option | Description |
|---------------------------------------------------------------|-------------------------------------------------------|
| [`version`](#version) | The version of golangci-lint to use. |
| [`version-file`](#version-file) | Gets the version of golangci-lint to use from a file. |
| [`install-mode`](#install-mode) | The mode to install golangci-lint. |
| [`install-only`](#install-only) | Only install golangci-lint. |
| [`verify`](#verify) | Validates golangci-lint configuration file. |
| [`github-token`](#github-token) | Used by the `only-new-issues` option. |
| [`only-new-issues`](#only-new-issues) | Show only new issues. |
| [`working-directory`](#working-directory) | The golangci-lint working directory. |
| [`args`](#args) | Golangci-lint command line arguments. |
| [`skip-cache`](#skip-cache) | Disable cache support. |
| [`skip-save-cache`](#skip-save-cache) | Don't save cache. |
| [`cache-invalidation-interval`](#cache-invalidation-interval) | Number of days before cache invalidation. |
| [`problem-matchers`](#problem-matchers) | Forces the usage of the embedded problem matchers. |
| [Experimental](#experimental) | Experimental options |
### Installation
@@ -296,7 +296,29 @@ When `install-mode` is:
```yml
uses: golangci/golangci-lint-action@v9
with:
version: v2.6
version: v2.12
# ...
```
</details>
#### `version-file`
Gets the version of golangci-lint to use from a file.
The path must be relative to the root of the project, or the `working-directory` if defined.
This parameter supports `.golangci-lint-version`, and `.tool-versions` files.
Only works with `install-mode: binary` (the default).
<details>
<summary>Example</summary>
```yml
uses: golangci/golangci-lint-action@v9
with:
version-file: .tool-versions
# ...
```
@@ -310,7 +332,7 @@ The mode to install golangci-lint: it can be `binary`, `goinstall`, or `none`.
The default value is `binary`.
`goinstall` is not recommended, more explanations [here](https://golangci-lint.run/docs/welcome/install/#install-from-sources).
`goinstall` is not recommended, more explanations [here](https://golangci-lint.run/docs/welcome/install/local/#install-from-sources).
<details>
<summary>Example</summary>
@@ -594,6 +616,23 @@ with:
</details>
#### `no-run-logs-group`
(optional)
This option disables the grouping of logs from golangci-lint run.
<details>
<summary>Example</summary>
```yaml
uses: golangci/golangci-lint-action@v9
with:
experimental: "no-run-logs-group"
```
</details>
## Annotations
Currently, GitHub parses the action's output and creates [annotations](https://github.blog/2018-12-14-introducing-check-runs-and-annotations/).
@@ -624,6 +663,22 @@ build and run the custom version of golangci-lint.
For more information, see [module plugin system](https://golangci-lint.run/docs/plugins/module-plugins/).
## Tips
### Using Renovate to update the golangci-lint version
[Renovate](https://docs.renovatebot.com/) can update both the action and the
`golangci-lint` version it uses via its [github-actions manager](https://docs.renovatebot.com/modules/manager/github-actions/#commonly-used-community-actions)
which is included in presets like `config:recommended`.
It can also be enabled explicitly in `renovate.json`:
```json
{
"enabledManagers": ["github-actions"]
}
```
## Performance
The action was implemented with performance in mind:
+8
View File
@@ -11,6 +11,13 @@ inputs:
- `goinstall`: the value can be v2.3.4, `latest`, or the hash of a commit.
- `none`: the value is ignored.
required: false
version-file:
description: |
Gets the version of golangci-lint to use from a file.
The path must be relative to the root of the project, or the `working-directory` if defined.
This parameter supports `.golangci-lint-version`, and `.tool-versions` files.
Only works with `install-mode: binary` (the default).
required: false
install-mode:
description: "The mode to install golangci-lint. It can be 'binary', 'goinstall', or 'none'."
default: "binary"
@@ -69,6 +76,7 @@ inputs:
description: |
Experimental options for the action.
List of comma separated options.
Available options: `automatic-module-directories`, `no-run-logs-group`
default: ""
required: false
runs:
Generated Vendored
+62056 -63346
View File
File diff suppressed because one or more lines are too long
Generated Vendored
+62056 -63346
View File
File diff suppressed because one or more lines are too long
+55
View File
@@ -0,0 +1,55 @@
import { defineConfig } from "eslint/config";
import { fixupConfigRules, fixupPluginRules } from "@eslint/compat";
import typescriptEslint from "@typescript-eslint/eslint-plugin";
import simpleImportSort from "eslint-plugin-simple-import-sort";
import globals from "globals";
import tsParser from "@typescript-eslint/parser";
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
export default defineConfig([{
extends: fixupConfigRules(compat.extends(
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",
"plugin:prettier/recommended",
)),
plugins: {
"@typescript-eslint": fixupPluginRules(typescriptEslint),
"simple-import-sort": simpleImportSort,
},
languageOptions: {
globals: {
...globals.node,
...globals.jest,
},
parser: tsParser,
ecmaVersion: 2020,
sourceType: "commonjs",
},
rules: {
"import/first": "error",
"import/newline-after-import": "error",
"import/no-duplicates": "error",
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error",
"sort-imports": "off",
},
}]);
@@ -1,4 +1,4 @@
module sample
module github.com/golangci/sample
go 1.24.0
@@ -1,4 +1,4 @@
module sample
module github.com/golangci/sample
go 1.24.0
@@ -1,4 +1,4 @@
version: v2.6.1
version: v2.10.1
name: custom-golangci-lint
#destination: ./zzz/path/
+1006 -1033
View File
File diff suppressed because it is too large Load Diff
+21 -14
View File
@@ -1,6 +1,6 @@
{
"name": "golanci-lint-action",
"version": "8.0.0",
"version": "9.3.0",
"private": true,
"description": "golangci-lint github action",
"main": "dist/main.js",
@@ -27,31 +27,38 @@
"node": ">=24.0.0"
},
"dependencies": {
"@actions/cache": "^4.1.0",
"@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1",
"@actions/github": "^6.0.1",
"@actions/cache": "^5.0.3",
"@actions/core": "^2.0.2",
"@actions/exec": "^2.0.0",
"@actions/github": "^7.0.0",
"@actions/http-client": "^3.0.0",
"@actions/tool-cache": "^3.0.0",
"@octokit/plugin-retry": "^6.1.0",
"@actions/tool-cache": "^2.0.2",
"@types/node": "^24.10.1",
"@types/node": "^25.0.10",
"@types/semver": "^7.7.1",
"@types/tmp": "^0.2.6",
"@types/which": "^3.0.4",
"tmp": "^0.2.5",
"which": "^6.0.0",
"yaml": "^2.8.1"
"tmp": "^0.2.7",
"which": "^7.0.0",
"yaml": "^2.9.0"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^8.46.4",
"@eslint/compat": "^2.0.5",
"@eslint/eslintrc": "^3.3.5",
"@eslint/js": "^9.39.2",
"@typescript-eslint/eslint-plugin": "^8.58.1",
"@typescript-eslint/parser": "^8.32.1",
"@vercel/ncc": "^0.38.4",
"eslint": "^8.57.1",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-simple-import-sort": "^12.1.1",
"prettier": "^3.6.2",
"globals": "^17.5.0",
"prettier": "^3.8.2",
"typescript": "^5.9.3"
},
"overrides": {
"undici": "^6.27.0"
}
}
+14 -2
View File
@@ -205,19 +205,31 @@ async function runLint(binPath: string): Promise<void> {
const experimental = core.getInput(`experimental`).split(`,`)
const noGroup = experimental.includes(`no-run-logs-group`)
if (experimental.includes(`automatic-module-directories`)) {
const wds = modulesAutoDetection(workingDirectory)
const cwd = process.cwd()
for (const wd of wds) {
await core.group(`run golangci-lint in ${path.relative(cwd, wd)}`, () => runGolangciLint(binPath, wd))
await optionalGroup(noGroup, `run golangci-lint in ${path.relative(cwd, wd)}`, () => runGolangciLint(binPath, wd))
}
return
}
await core.group(`run golangci-lint`, () => runGolangciLint(binPath, workingDirectory))
await optionalGroup(noGroup, `run golangci-lint`, () => runGolangciLint(binPath, workingDirectory))
}
async function optionalGroup<T>(noGroup: boolean, name: string, fn: () => Promise<T>): Promise<T> {
if (noGroup) {
core.info(name)
return fn()
}
return core.group(name, fn)
}
export async function run(): Promise<void> {
+27
View File
@@ -67,6 +67,12 @@ const isLessVersion = (a: Version, b: Version): boolean => {
const getRequestedVersion = (): Version => {
let requestedVersion = core.getInput(`version`)
let versionFilePath = core.getInput(`version-file`)
if (requestedVersion && versionFilePath) {
core.warning(`Both version (${requestedVersion}) and version-file (${versionFilePath}) inputs are specified, only version will be used`)
}
const workingDirectory = core.getInput(`working-directory`)
let goMod = "go.mod"
@@ -83,6 +89,27 @@ const getRequestedVersion = (): Version => {
}
}
if (requestedVersion == "" && versionFilePath) {
if (workingDirectory) {
versionFilePath = path.join(workingDirectory, versionFilePath)
}
if (!fs.existsSync(versionFilePath)) {
throw new Error(`The specified golangci-lint version file at: ${versionFilePath} does not exist`)
}
const content = fs.readFileSync(versionFilePath, "utf-8")
if (path.basename(versionFilePath) === ".tool-versions") {
// asdf/mise file.
const match = content.match(/^golangci-lint\s+([^\n#]+)/m)
requestedVersion = match ? "v" + match[1].trim().replace(/^v/gi, "") : ""
} else {
// .golangci-lint-version file.
requestedVersion = "v" + content.trim().replace(/^v/gi, "")
}
}
const parsedRequestedVersion = parseVersion(requestedVersion)
if (parsedRequestedVersion == null) {
return null