Compare commits

..

7 Commits

6 changed files with 150 additions and 105 deletions

View File

@ -52,8 +52,8 @@ jobs:
version:
- ""
- "latest"
- "v1.56"
- "v1.56.1"
- "v1.58"
- "v1.58.0"
runs-on: ${{ matrix.os }}
permissions:
contents: read
@ -63,7 +63,6 @@ jobs:
- uses: actions/setup-go@v5
with:
go-version: oldstable
cache: false # setup-go v4 caches by default
- uses: ./
with:
version: ${{ matrix.version }}
@ -81,8 +80,8 @@ jobs:
version:
- ""
- "latest"
- "v1.56.1"
- "bf5008a11acf2da5fe76716eb21d808499e079fa"
- "v1.58.0"
- "4bf574a12bb61234e28e3d6172be6ed95b0e8baf"
runs-on: ${{ matrix.os }}
permissions:
contents: read
@ -92,7 +91,6 @@ jobs:
- uses: actions/setup-go@v5
with:
go-version: oldstable
cache: false # setup-go v4 caches by default
- uses: ./
with:
version: ${{ matrix.version }}
@ -116,7 +114,6 @@ jobs:
- uses: actions/setup-go@v5
with:
go-version: oldstable
cache: false # setup-go v4 caches by default
- uses: ./
with:
working-directory: sample-go-mod

159
README.md
View File

@ -43,39 +43,11 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.21'
go-version: '1.22'
- name: golangci-lint
uses: golangci/golangci-lint-action@v5
with:
# Require: The version of golangci-lint to use.
# When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version.
# When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit.
version: v1.57
# Optional: working directory, useful for monorepos
# working-directory: somedir
# Optional: golangci-lint command line arguments.
#
# Note: By default, the `.golangci.yml` file should be at the root of the repository.
# The location of the configuration file can be changed by using `--config=`
# args: --timeout=30m --config=/my/path/.golangci.yml --issues-exit-code=0
# Optional: Show only new issues.
# If you are using `merge_group` event (merge queue) you should add the option `fetch-depth: 0` to `actions/checkout` step.
# The default value is `false`.
# only-new-issues: true
# Optional: if set to true, then all caching functionality will be completely disabled,
# takes precedence over all other caching options.
# skip-cache: true
# Optional: if set to true, caches will not be saved, but they may still be restored,
# subject to other options
# skip-save-cache: true
# Optional: The mode to install golangci-lint. It can be 'binary' or 'goinstall'.
# install-mode: "goinstall"
version: latest
```
We recommend running this action in a job separate from other jobs (`go test`, etc.)
@ -105,7 +77,7 @@ jobs:
golangci:
strategy:
matrix:
go: ['1.21']
go: ['1.22']
os: [ubuntu-latest, macos-latest, windows-latest]
name: lint
runs-on: ${{ matrix.os }}
@ -117,35 +89,7 @@ jobs:
- name: golangci-lint
uses: golangci/golangci-lint-action@v5
with:
# Require: The version of golangci-lint to use.
# When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version.
# When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit.
version: v1.57
# Optional: working directory, useful for monorepos
# working-directory: somedir
# Optional: golangci-lint command line arguments.
#
# Note: By default, the `.golangci.yml` file should be at the root of the repository.
# The location of the configuration file can be changed by using `--config=`
# args: --timeout=30m --config=/my/path/.golangci.yml --issues-exit-code=0
# Optional: Show only new issues.
# If you are using `merge_group` event (merge queue) you should add the option `fetch-depth: 0` to `actions/checkout` step.
# The default value is `false`.
# only-new-issues: true
# Optional: if set to true, then all caching functionality will be completely disabled,
# takes precedence over all other caching options.
# skip-cache: true
# Optional: if set to true, caches will not be saved, but they may still be restored,
# subject to other options
# skip-save-cache: true
# Optional: The mode to install golangci-lint. It can be 'binary' or 'goinstall'.
# install-mode: "goinstall"
version: latest
```
You will also likely need to add the following `.gitattributes` file to ensure that line endings for Windows builds are properly formatted:
@ -154,7 +98,95 @@ You will also likely need to add the following `.gitattributes` file to ensure t
*.go text eol=lf
```
## Comments and Annotations
## Options
`version`: (required) The version of golangci-lint to use.
* When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version.
* When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit.
```yml
uses: golangci/golangci-lint-action@v5
with:
version: latest
# ...
```
`install-mode`: (optional) The mode to install golangci-lint.
It can be `binary` or `goinstall`.
The default value is `binary`.
```yml
uses: golangci/golangci-lint-action@v5
with:
install-mode: "goinstall"
# ...
```
`only-new-issues`: (optional) Show only new issues.
If you are using `merge_group` event (merge queue) you should add the option `fetch-depth: 0` to `actions/checkout` step.
The default value is `false`.
```yml
uses: golangci/golangci-lint-action@v5
with:
only-new-issues: true
# ...
```
`working-directory`: (optional) working directory, useful for monorepos.
```yml
uses: golangci/golangci-lint-action@v5
with:
working-directory: somedir
# ...
```
`skip-cache`: (optional) If set to `true`, then all caching functionality will be completely disabled,
takes precedence over all other caching options.
The default value is `false`.
```yml
uses: golangci/golangci-lint-action@v5
with:
skip-cache: true
# ...
```
`skip-save-cache`: (optional) If set to `true`, caches will not be saved, but they may still be restored, required `skip-cache: false`.
The default value is `false`.
```yml
uses: golangci/golangci-lint-action@v5
with:
skip-save-cache: true
# ...
```
`annotations`: (optional) To enable/disable GitHub Action annotations.
If disabled (`false`), the output format(s) will follow the golangci-lint configuration file and use the same default as golangci-lint (i.e. `colored-line-number`).
https://golangci-lint.run/usage/configuration/#output-configuration
The default value is `true`.
```yml
uses: golangci/golangci-lint-action@v5
with:
annotations: false
# ...
```
`args`: (optional) golangci-lint command line arguments.
Note: By default, the `.golangci.yml` file should be at the root of the repository.
The location of the configuration file can be changed by using `--config=`
```yml
uses: golangci/golangci-lint-action@v5
with:
args: --timeout=30m --config=/my/path/.golangci.yml --issues-exit-code=0
# ...
```
## Annotations
Currently, GitHub parses the action's output and creates [annotations](https://github.blog/2018-12-14-introducing-check-runs-and-annotations/).
@ -163,8 +195,9 @@ The restrictions of annotations are the following:
1. Currently, they don't support Markdown formatting (see the [feature request](https://github.community/t5/GitHub-API-Development-and/Checks-Ability-to-include-Markdown-in-line-annotations/m-p/56704))
2. They aren't shown in the list of comments.
If you would like to have comments - please, up-vote [the issue](https://github.com/golangci/golangci-lint-action/issues/5).
3. The number of annotations is [limited](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md#limitations).
To enable annotations, you need to add the `checks' permission to your action.
To enable annotations, you need to add the `checks` permission to your action.
```yaml annotate
permissions:
@ -172,7 +205,7 @@ permissions:
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.
# Optional: allow write access to checks to allow the action to annotate code in the PR.
checks: write
```

View File

@ -1,4 +1,5 @@
name: "Run golangci-lint"
# https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions
name: "Golangci-lint"
description: "Official golangci-lint action with line-attached annotations for found issues, caching and parallel execution."
author: "golangci"
inputs:
@ -8,9 +9,9 @@ inputs:
When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version.
When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit.
required: false
args:
description: "golangci-lint command line arguments"
default: ""
install-mode:
description: "The mode to install golangci-lint. It can be 'binary' or 'goinstall'."
default: "binary"
required: false
working-directory:
description: "golangci-lint working directory, default is project root"
@ -35,9 +36,13 @@ inputs:
restore existing caches, subject to other options.
default: 'false'
required: false
install-mode:
description: "The mode to install golangci-lint. It can be 'binary' or 'goinstall'."
default: "binary"
annotations:
description: "To Enable/disable GitHub Action annotations"
default: 'true'
required: false
args:
description: "golangci-lint command line arguments"
default: ""
required: false
runs:
using: "node20"
@ -45,4 +50,4 @@ runs:
post: "dist/post_run/index.js"
branding:
icon: "shield"
color: "yellow"
color: "white"

21
dist/post_run/index.js generated vendored
View File

@ -89287,15 +89287,18 @@ async function runLint(lintPath, patchPath) {
.map(([key, value]) => [key.toLowerCase(), value ?? ""]);
const userArgsMap = new Map(userArgsList);
const userArgNames = new Set(userArgsList.map(([key]) => key));
const formats = (userArgsMap.get("out-format") || "")
.trim()
.split(",")
.filter((f) => f.length > 0)
.filter((f) => !f.startsWith(`github-actions`))
.concat("github-actions")
.join(",");
addedArgs.push(`--out-format=${formats}`);
userArgs = userArgs.replace(/--out-format=\S*/gi, "").trim();
const annotations = core.getInput(`annotations`).trim() !== "false";
if (annotations) {
const formats = (userArgsMap.get("out-format") || "")
.trim()
.split(",")
.filter((f) => f.length > 0)
.filter((f) => !f.startsWith(`github-actions`))
.concat("github-actions")
.join(",");
addedArgs.push(`--out-format=${formats}`);
userArgs = userArgs.replace(/--out-format=\S*/gi, "").trim();
}
if (isOnlyNewIssues()) {
if (userArgNames.has(`new`) || userArgNames.has(`new-from-rev`) || userArgNames.has(`new-from-patch`)) {
throw new Error(`please, don't specify manually --new* args when requesting only new issues`);

21
dist/run/index.js generated vendored
View File

@ -89287,15 +89287,18 @@ async function runLint(lintPath, patchPath) {
.map(([key, value]) => [key.toLowerCase(), value ?? ""]);
const userArgsMap = new Map(userArgsList);
const userArgNames = new Set(userArgsList.map(([key]) => key));
const formats = (userArgsMap.get("out-format") || "")
.trim()
.split(",")
.filter((f) => f.length > 0)
.filter((f) => !f.startsWith(`github-actions`))
.concat("github-actions")
.join(",");
addedArgs.push(`--out-format=${formats}`);
userArgs = userArgs.replace(/--out-format=\S*/gi, "").trim();
const annotations = core.getInput(`annotations`).trim() !== "false";
if (annotations) {
const formats = (userArgsMap.get("out-format") || "")
.trim()
.split(",")
.filter((f) => f.length > 0)
.filter((f) => !f.startsWith(`github-actions`))
.concat("github-actions")
.join(",");
addedArgs.push(`--out-format=${formats}`);
userArgs = userArgs.replace(/--out-format=\S*/gi, "").trim();
}
if (isOnlyNewIssues()) {
if (userArgNames.has(`new`) || userArgNames.has(`new-from-rev`) || userArgNames.has(`new-from-patch`)) {
throw new Error(`please, don't specify manually --new* args when requesting only new issues`);

View File

@ -192,16 +192,20 @@ async function runLint(lintPath: string, patchPath: string): Promise<void> {
const userArgsMap = new Map<string, string>(userArgsList)
const userArgNames = new Set<string>(userArgsList.map(([key]) => key))
const formats = (userArgsMap.get("out-format") || "")
.trim()
.split(",")
.filter((f) => f.length > 0)
.filter((f) => !f.startsWith(`github-actions`))
.concat("github-actions")
.join(",")
const annotations = core.getInput(`annotations`).trim() !== "false"
addedArgs.push(`--out-format=${formats}`)
userArgs = userArgs.replace(/--out-format=\S*/gi, "").trim()
if (annotations) {
const formats = (userArgsMap.get("out-format") || "")
.trim()
.split(",")
.filter((f) => f.length > 0)
.filter((f) => !f.startsWith(`github-actions`))
.concat("github-actions")
.join(",")
addedArgs.push(`--out-format=${formats}`)
userArgs = userArgs.replace(/--out-format=\S*/gi, "").trim()
}
if (isOnlyNewIssues()) {
if (userArgNames.has(`new`) || userArgNames.has(`new-from-rev`) || userArgNames.has(`new-from-patch`)) {