63 Commits

Author SHA1 Message Date
José Lorenzo Rodríguez 54c9adbab1 fix release 2023-01-17 17:19:55 +01:00
José Lorenzo Rodríguez 0ef98d9a5c Merge pull request #71 from DracoBlue/patch-2
Make output-file by default to /dev/stdout
2023-01-17 17:09:37 +01:00
DracoBlue 1a139ce6cc Make output-file by default to /dev/stdout
To fix https://github.com/hadolint/hadolint-action/issues/60 in hadolint-action>v2.0.0
2023-01-17 15:38:26 +01:00
José Lorenzo Rodríguez 4b5806eb9c Merge pull request #66 from javoweb/hadolint-2.11
Upgrade hadolint to 2.12
2022-11-11 12:13:19 +01:00
José Lorenzo Rodríguez e977686583 Merge pull request #56 from mgray88/patch-1
Update usage example
2022-11-11 12:10:59 +01:00
José Lorenzo Rodríguez 67d715bb13 Merge pull request #65 from mrdoodles/fix-github-deprecations
fix: update deprecated commands
2022-11-11 12:08:51 +01:00
Gonzalo Tixilima 48c4120377 upgrade hadolint to 2.12 2022-11-11 05:52:50 -05:00
Gonzalo Tixilima e81a8de9db upgrade hadolint to 2.11 2022-11-11 01:18:35 -05:00
mrdoodles 68a2276a3c fix-github-deprecations 2022-11-08 21:33:58 +00:00
José Lorenzo Rodríguez eeab5ede16 Merge pull request #57 from offa/hadolint_2.10
Update hadolint to 2.10
2022-05-13 12:59:47 +02:00
offa 169ddcf265 Update hadolint to 2.10
Use GHCR instead of Dockerhub and a fully qualified FROM
2022-05-13 12:48:12 +02:00
Mike Gray d51839a6b5 Update usage example
"Example to create a comment in a PR" doesn't work with v2.0.0
2022-04-23 10:19:23 -04:00
José Lorenzo Rodríguez f988afea3d Merge pull request #55 from harmw/set-output
feat: expose results of hadolint to env var
2022-03-31 15:57:42 +02:00
Harm Weites 55991004e8 chore: spotted a little typo in readme 2022-03-31 15:32:03 +02:00
Harm Weites d73282b64c chore: update readme 2022-03-31 14:56:53 +02:00
Harm Weites 2faf5c6ef4 chore: remove createComment(), depends on githubToken scopes 2022-03-31 14:17:52 +02:00
Harm Weites 724e05f46b chore: typo in step id 2022-03-31 12:57:54 +02:00
Harm Weites a78be8d386 chore: use env var 2022-03-31 12:52:56 +02:00
Harm Weites 652bc66203 chore: also push results to env var 2022-03-31 12:49:42 +02:00
Harm Weites 1dd44fc493 chore: fix issue with multiline strings in output
Looking at [1] this should do some magic, so let's see.

[1] https://github.community/t/set-output-truncates-multiline-strings/16852
2022-03-31 12:45:58 +02:00
Harm Weites 5fc1b0e2fb chore: escape backticks in results var 2022-03-31 11:14:55 +02:00
Harm Weites a8bbf351c0 chore: update PR with text as test of results 2022-03-31 10:31:29 +02:00
Harm Weites e3462c378d chore: quotes to not parse it by mistake 2022-03-31 10:08:14 +02:00
Harm Weites 0c7fcaa67b chore: typo 2022-03-31 10:03:56 +02:00
Harm Weites 8ea032569b chore: empty commit to trigger ci 2022-03-31 10:01:01 +02:00
Harm Weites 262f403978 chore: add simple integration test 2022-03-31 09:57:07 +02:00
Harm Weites 1878581f63 chore: fix typos 2022-03-31 09:56:25 +02:00
Harm Weites bc289f2eaa feat: use 'set-output name=results'
This will introduce a parameter with name results that holds the
hadolint output. Other steps in a workflow can make use of this.

Also fix an error with the piping to tee that was broken.
2022-03-31 09:51:31 +02:00
José Lorenzo Rodríguez 83b3de1e17 fix example 2022-03-25 10:31:04 +01:00
José Lorenzo Rodríguez 289302ad8f Merge pull request #52 from mikenye/master
Update README.md
2022-03-25 10:28:55 +01:00
Mike Nye 89e60e4868 more info for inputs 2022-03-25 13:09:48 +08:00
Mike Nye 8a428b4815 prettify readme 2022-03-25 13:07:15 +08:00
José Lorenzo Rodríguez 0a6d062e78 disable broken test 2022-03-24 15:36:08 +01:00
José Lorenzo Rodríguez 0b08ca228d fix path 2022-03-24 15:32:24 +01:00
José Lorenzo Rodríguez 9a555bc2d4 run all tests properly 2022-03-24 15:29:17 +01:00
José Lorenzo Rodríguez e8cde77aa0 avoid failing on missing trusted registries 2022-03-24 15:28:03 +01:00
José Lorenzo Rodríguez bc86787e19 bump Hadolint version 2022-03-24 15:18:44 +01:00
José Lorenzo Rodríguez d2b4ab26ff don't fail in CI tests 2022-03-24 15:02:38 +01:00
José Lorenzo Rodríguez 2bcb99c6e2 Merge pull request #50 from paulbarton90/check_exit_status
Apply exit code to hadolint.sh
2022-03-24 14:57:38 +01:00
Paul Barton 63666e594d Apply exit code to hadolint.sh 2022-03-24 13:32:02 +00:00
José Lorenzo Rodríguez 96339c1113 Merge pull request #49 from offa/doc_inputs_typo
Fix typo in input docs
2022-03-22 13:59:30 +01:00
offa 37f399667b Fix markdown 2022-03-22 11:44:03 +01:00
offa aa70df94a2 Fix typo in inputs 2022-03-22 11:40:08 +01:00
José Lorenzo Rodríguez 0bc6199b82 upgrade to 2.9.2 2022-03-22 09:41:42 +01:00
José Lorenzo Rodríguez 070f68df71 Merge pull request #43 from m-ildefons/config-options
features: config options, saving to file, SARIF
2022-03-22 09:41:12 +01:00
José Lorenzo Rodríguez 40f98da752 Merge pull request #45 from mblottiere/fix/missing-problem-matcher
fix: missing problem-matcher
2022-03-22 09:40:46 +01:00
Matthieu Blottière 390bcfc1bc fix: attempt to fix missing problem-matcher
It uses the solution mentioned in
https://github.com/actions/toolkit/issues/305#issuecomment-585515210
2021-12-08 17:26:25 +01:00
Moritz Röhrich 98fb3f8040 features: config options, saving to file, SARIF
- Upgrade to Hadolint 2.8.0, enabling the SARIF formatter
- Expand config options to reflect more of those regularly available
  with Hadolint including `no-fail` and `failure-threshold` options
- Enable the creation of report files

Breaking change: The list of ignored rules is now comma separated and
not space separated.

fixes: #23
fixes: #36
fixes: #42
2021-11-20 12:02:12 +01:00
José Lorenzo Rodríguez 3cfc69d4b2 Merge pull request #41 from revolunet/patch-1
docs: fix example
2021-10-19 16:19:35 +02:00
Julien Bouquillon 03ff2f358b docs: fix example 2021-10-19 15:49:02 +02:00
José Lorenzo Rodríguez d7b3858233 Make tests pass 2021-08-26 13:31:58 +02:00
José Lorenzo Rodríguez fdf6f4b6d2 Merge pull request #34 from itamargiv/feature/recursive-dir-check
Feature: Recursive dir check - Lint multiple files
2021-08-26 13:29:29 +02:00
José Lorenzo Rodríguez 0bb0c4c131 Merge pull request #39 from Juneezee/hadolint-v2.7.0
build: bump hadolint from v2.4.0 to v2.7.0
2021-08-26 12:42:52 +02:00
Eng Zer Jun 8af94d9fae build: bump hadolint from v2.4.0 to v2.7.0
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2021-08-26 17:47:50 +08:00
Itamar Givon afcbb72a70 Update docs 2021-06-14 12:02:23 +02:00
Itamar Givon 34545a185d Add recursive linting 2021-06-14 12:01:11 +02:00
José Lorenzo Rodríguez 1fe9ddfd12 Merge pull request #33 from brpaz/update-readme
update support section and remove funding configuration
2021-06-13 13:20:59 +02:00
José Lorenzo Rodríguez 64243a4c85 Merge pull request #35 from jward-bw/patch-1
Improve readability of `Inputs` table.
2021-06-13 13:19:51 +02:00
Jacob Ward 9c70326916 Improve readability of Inputs table.
In my opinion it's still not very easy to read, but it is correctly formatted now.
2021-06-04 16:49:26 +01:00
Bruno Paz 6c5b4b97b1 docs(README): update support section and remove funding configuration 2021-05-17 19:06:18 +01:00
José Lorenzo Rodríguez f49a60108f Merge pull request #30 from kalikiana/docs_readme_checkout
doc: Add checkout action to the example
2021-05-10 11:31:15 +02:00
José Lorenzo Rodríguez 5f549be9cc Merge branch 'master' into docs_readme_checkout 2021-05-10 11:31:03 +02:00
Christian Dywan 785eabb2d4 doc: Add checkout action to the example
Fixes: #25
2021-05-02 08:45:07 +02:00
7 changed files with 177 additions and 62 deletions
-4
View File
@@ -1,4 +0,0 @@
# https://help.github.com/en/articles/displaying-a-sponsor-button-in-your-repository
github: brpaz
patreon: brpaz
custom: https://www.buymeacoffee.com/Z1Bu6asGV
+20 -6
View File
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-20.04
container: pipelinecomponents/hadolint:0.10.1
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Run hadolint
run: hadolint Dockerfile
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-20.04
needs: ["lint"]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t $TEST_IMAGE_NAME .
@@ -37,7 +37,7 @@ jobs:
runs-on: ubuntu-20.04
needs: build-test
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Run integration test 1
uses: ./
@@ -50,7 +50,8 @@ jobs:
uses: ./
with:
dockerfile: testdata/warning.Dockerfile
ignore: DL3014 DL3008
ignore: 'DL3014,DL3008'
no-fail: true
- name: Run integration test 3 - set failure threshold
# This step will print out an info level rule violation, but not fail
@@ -68,13 +69,26 @@ jobs:
failure-threshold: error
format: json
- name: Run integration test 4 - output format
- name: Run integration test 5 - output format
# This step will never fail, but will print out rule violations.
id: hadolint5
uses: ./
with:
dockerfile: testdata/warning.Dockerfile
config: testdata/hadolint.yaml
- name: Run integration test 6 - verify results output parameter
# This step will never fail, but will print out the results from step5
run: echo "${{ steps.hadolint5.outputs.results }}"
#- name: Run integration test 6 - output to file
# # This step will never fail, but will print out rule violations.
# uses: ./
# with:
# dockerfile: testdata/warning.Dockerfile
# format: sarif
# output-file: report.sarif
release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
name: Release
@@ -82,7 +96,7 @@ jobs:
needs: integration-tests
steps:
- uses: actions/checkout@v2
- uses: cycjimmy/semantic-release-action@v2
- uses: cycjimmy/semantic-release-action@v3
with:
extra_plugins: |
@semantic-release/git
+1 -1
View File
@@ -1,4 +1,4 @@
FROM hadolint/hadolint:v2.4.0-debian
FROM ghcr.io/hadolint/hadolint:v2.12.0-debian
COPY LICENSE README.md problem-matcher.json /
COPY hadolint.sh /usr/local/bin/hadolint.sh
+3 -3
View File
@@ -1,7 +1,7 @@
IMAGE_NAME:=hadolint-action
lint-dockerfile: ## Runs hadoint against application dockerfile
lint-dockerfile: ## Runs hadolint against application dockerfile
@docker run --rm -v "$(PWD):/data" -w "/data" hadolint/hadolint hadolint Dockerfile
lint-yaml: ## Lints yaml configurations
@@ -12,8 +12,8 @@ build: ## Builds the docker image
test: build ## Runs a test in the image
@docker run -i --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ${PWD}:/test zemanlx/container-structure-test:v1.8.0-alpine \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ${PWD}:/test zemanlx/container-structure-test:v1.8.0-alpine \
test \
--image $(IMAGE_NAME) \
--config test/structure-tests.yaml
+49 -25
View File
@@ -6,7 +6,6 @@
[![License](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](LICENSE)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge)](http://commitizen.github.io/cz-cli/)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge)](https://github.com/semantic-release/semantic-release?style=for-the-badge)
[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/hadolint/hadolint-action/CI?style=for-the-badge)](https://github.com/hadolint/hadolint-action/action)
## Usage
@@ -15,31 +14,63 @@ Add the following step to your workflow configuration:
```yml
steps:
- uses: hadolint/hadolint-action@v1.4.0
- uses: actions/checkout@v2
- uses: hadolint/hadolint-action@v2.1.0
with:
dockerfile: Dockerfile
```
## Inputs
| Name | Description | Default |
|------------------ |------------------------------------------ |----------------- |
| dockerfile | The path to the Dockerfile to be tested | ./Dockerfile |
| format | The output format. One of [tty | json | | tty |
| | checkstyle | codeclimate | | |
| | gitlab_codeclimate] | |
| ignore | Space separated list of Hadolint rules to | <none> |
| | ignore. | |
| config | Custom path to a Hadolint config file | ./.hadolint.yaml |
| failure-threshold | Rule severity threshold for pipeline | info |
| | failure. One of [error | warning | info | | |
| | style | ignore] | |
| Name | Description | Default |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------|--------------------|
| `dockerfile` | The path to the Dockerfile to be tested | `./Dockerfile` |
| `recursive` | Search for specified dockerfile </br> recursively, from the project root | `false` |
| `config` | Custom path to a Hadolint config file | `./.hadolint.yaml` |
| `output-file` | A sub-path where to save the </br> output as a file to | |
| `no-color` | Don't create colored output (`true`/`false`) | |
| `no-fail` | Never fail the action (`true`/`false`) | |
| `verbose` | Output more information (`true`/`false`) | |
| `format` | The output format. One of [`tty` \| `json` \| </br> `checkstyle` \| `codeclimate` \| </br> `gitlab_codeclimate` \| `codacy` \| `sarif`] | `tty` |
| `failure-threshold` | Rule severity threshold for pipeline </br> failure. One of [`error` \| `warning` \| </br> `info` \| `style` \| `ignore`] | `info` |
| `override-error` | Comma separated list of rules to treat with `error` severity | |
| `override-warning` | Comma separated list of rules to treat with `warning` severity | |
| `override-info` | Comma separated list of rules to treat with `info` severity | |
| `override-style` | Comma separated list of rules to treat with `style` severity | |
| `ignore` | Comma separated list of Hadolint rules to ignore. | <none> |
| `trusted-registries` | Comma separated list of urls of trusted registries | |
## Output
The Action will store results in an environment variable that can be used in other steps in a workflow.
Example to create a comment in a PR:
```
- name: Update Pull Request
uses: actions/github-script@v6
if: github.event_name == 'pull_request'
with:
script: |
const output = `
#### Hadolint: \`${{ steps.hadolint.outcome }}\`
\`\`\`
${process.env.HADOLINT_RESULTS}
\`\`\`
`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
```
## Hadolint Configuration
To configure Hadolint (for example ignore rules), you can create an `.hadolint.yaml` file in the root of your repository. Please check the Hadolint [documentation](https://github.com/hadolint/hadolint#configure).
## 🤝 Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.
@@ -52,17 +83,12 @@ Contributions are what make the open source community such an amazing place to b
## 💛 Support the project
If this project was useful to you in some form, I would be glad to have your support. It will help to keep the project alive and to have more time to work on Open Source.
If this project was useful to you in some form, We would be glad to have your support. It will help keeping the project alive.
The sinplest form of support is to give a ⭐️ to this repo.
You can also contribute with [GitHub Sponsors](https://github.com/sponsors/brpaz).
This project was originally created by [Bruno Paz](https://github.com/sponsors/brpaz) and incorporated into the Hadolint organization. If you appreciate the work done on this action, Bruno would be happy with your [sponsorship](https://github.com/sponsors/brpaz).
[![GitHub Sponsors](https://img.shields.io/badge/GitHub%20Sponsors-Sponsor%20Me-red?style=for-the-badge)](https://github.com/sponsors/brpaz)
Or if you prefer a one time donation to the project, you can simple:
<a href="https://www.buymeacoffee.com/Z1Bu6asGV" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: auto !important;width: auto !important;" ></a>
## Author
👤 **Bruno Paz**
@@ -72,6 +98,4 @@ Or if you prefer a one time donation to the project, you can simple:
## 📝 License
Copyright © 2019 [Bruno Paz](https://github.com/brpaz).
This project is [MIT](LICENSE) licensed.
[MIT](LICENSE)
+65 -9
View File
@@ -6,11 +6,38 @@ inputs:
required: false
description: 'The path to the Dockerfile to lint'
default: 'Dockerfile'
config:
required: false
description: 'Path to a config file'
default:
recursive:
required: false
description:
'Search for specified dockerfile recursively, from the project root'
default: 'false'
output-file:
required: false
description: 'The path where to save the linting results to'
default: "/dev/stdout"
# standart hadolint options:
no-color:
required: false
description: Don't create colored output.
default: 'false'
no-fail:
required: false
description: Never exit with a failure status code
default: 'false'
verbose:
required: false
description: Print more information about the running config
default: 'false'
format:
required: false
description: |
The output format, one of [tty (default) | json | checkstyle |
codeclimate | gitlab_codeclimate ]
codeclimate | gitlab_codeclimate | codacy | sarif]
default: 'tty'
failure-threshold:
required: false
@@ -18,27 +45,56 @@ inputs:
Fail the pipeline only if rules with severity above this threshold are
violated. One of [error | warning | info (default) | style | ignore]
default: 'info'
override-error:
required: false
description:
'A comma separated list of rules whose severity will be `error`'
default:
override-warning:
required: false
description:
'A comma separated list of rules whose severity will be `warning`'
default:
override-info:
required: false
description:
'A comma separated list of rules whose severity will be `info`'
default:
override-style:
required: false
description:
'A comma separated list of rules whose severity will be `style`'
default:
ignore:
required: false
description: 'A space separated string of rules to ignore'
description: 'A comma separated string of rules to ignore'
default:
config:
trusted-registries:
required: false
description: 'Path to a config file'
description: 'A comma separated list of trusted registry urls'
default:
runs:
using: 'docker'
image: 'Dockerfile'
args:
- -f
- ${{ inputs.format }}
- -t
- ${{ inputs.failure-threshold }}
- ${{ inputs.dockerfile }}
env:
HADOLINT_CONFIG: ${{ inputs.config }}
NO_COLOR: ${{ inputs.no-color }}
HADOLINT_NOFAIL: ${{ inputs.no-fail }}
HADOLINT_VERBOSE: ${{ inputs.verbose }}
HADOLINT_FORMAT: ${{ inputs.format }}
HADOLINT_FAILURE_THRESHOLD: ${{ inputs.failure-threshold }}
HADOLINT_OVERRIDE_ERROR: ${{ inputs.override-error }}
HADOLINT_OVERRIDE_WARNING: ${{ inputs.override-warning }}
HADOLINT_OVERRIDE_INFO: ${{ inputs.override-info }}
HADOLINT_OVERRIDE_STYLE: ${{ inputs.override-style }}
HADOLINT_IGNORE: ${{ inputs.ignore }}
HADOLINT_TRUSTED_REGISTRIES: ${{ inputs.trusted-registries }}
HADOLINT_CONFIG: ${{ inputs.config }}
HADOLINT_RECURSIVE: ${{ inputs.recursive }}
HADOLINT_OUTPUT: ${{ inputs.output-file }}
branding:
icon: 'layers'
color: 'purple'
+39 -14
View File
@@ -1,31 +1,56 @@
#!/bin/sh
#!/bin/bash
# The problem-matcher definition must be present in the repository
# checkout (outside the Docker container running hadolint). We create
# a temporary folder and copy problem-matcher.json to it and make it
# readable.
TMP_FOLDER=$(mktemp -d -p .)
cp /problem-matcher.json "${TMP_FOLDER}"
chmod -R a+rX "${TMP_FOLDER}"
# checkout (outside the Docker container running hadolint). We copy
# problem-matcher.json to the home folder.
cp /problem-matcher.json "$HOME/"
# After the run has finished we remove the problem-matcher.json from
# the repository so we don't leave the checkout dirty. We also remove
# the matcher so it won't take effect in later steps.
cleanup() {
echo "::remove-matcher owner=brpaz/hadolint-action::"
rm -rf "${TMP_FOLDER}"
}
trap cleanup EXIT
echo "::add-matcher::${TMP_FOLDER}/problem-matcher.json"
echo "::add-matcher::$HOME/problem-matcher.json"
if [ -n "$HADOLINT_CONFIG" ]; then
HADOLINT_CONFIG="-c ${HADOLINT_CONFIG}"
fi
for i in $HADOLINT_IGNORE; do
HADOLINT_IGNORE_CMDLINE="${HADOLINT_IGNORE_CMDLINE} --ignore=${i}"
done
if [ -z "$HADOLINT_TRUSTED_REGISTRIES" ]; then
unset HADOLINT_TRUSTED_REGISTRIES;
fi
# shellcheck disable=SC2086
hadolint $HADOLINT_IGNORE_CMDLINE $HADOLINT_CONFIG "$@"
if [ "$HADOLINT_RECURSIVE" = "true" ]; then
shopt -s globstar
filename="${!#}"
flags="${@:1:$#-1}"
RESULTS=$(hadolint $HADOLINT_CONFIG $flags **/$filename)
else
# shellcheck disable=SC2086
RESULTS=$(hadolint $HADOLINT_CONFIG "$@")
fi
FAILED=$?
if [ -n "$HADOLINT_OUTPUT" ]; then
if [ -f "$HADOLINT_OUTPUT" ]; then
HADOLINT_OUTPUT="$TMP_FOLDER/$HADOLINT_OUTPUT"
fi
echo "$RESULTS" > $HADOLINT_OUTPUT
fi
RESULTS="${RESULTS//$'\\n'/''}"
echo "results<<EOF" >> $GITHUB_OUTPUT
echo "${RESULTS}" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
{ echo "HADOLINT_RESULTS<<EOF"; echo "$RESULTS"; echo "EOF"; } >> $GITHUB_ENV
[ -z "$HADOLINT_OUTPUT" ] || echo "Hadolint output saved to: $HADOLINT_OUTPUT"
exit $FAILED