@@ -55,22 +55,22 @@ inputs:
55
55
paths :
56
56
description : " Paths to scan when using all scope"
57
57
required : false
58
- default : " ./src "
58
+ default : " ." # all scope by default, exclude_dirs are taken from pyproject.toml
59
59
config_file :
60
60
description : " Path to pyproject.toml or custom bandit config"
61
61
required : false
62
62
default : " pyproject.toml"
63
- severity_level :
63
+ severity-level :
64
64
description : " Minimum severity level to report (all/LOW/MEDIUM/HIGH)"
65
65
default : " LOW"
66
- confidence_level :
66
+ confidence-level :
67
67
description : " Minimum confidence level to report (all/LOW/MEDIUM/HIGH)"
68
68
required : false
69
69
default : " LOW"
70
70
output-format :
71
- description : " Format for scan results (json/txt/html/csv)"
71
+ description : " Format for scan results (json/txt/html/csv/sarif )"
72
72
required : false
73
- default : " json "
73
+ default : " sarif " # by default to upload into Security tab
74
74
fail-on-findings :
75
75
description : " Whether to fail the action if issues are found"
76
76
required : false
@@ -88,20 +88,20 @@ runs:
88
88
using : composite
89
89
steps :
90
90
- name : Set up Python
91
- uses : actions/setup-python@v4
91
+ uses : actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
92
92
with :
93
93
python-version : " 3.10"
94
94
95
95
- name : Install Bandit
96
96
shell : bash
97
97
run : |
98
98
python -m pip install --upgrade pip
99
- pip install bandit[toml]
99
+ pip install bandit[toml,sarif ]
100
100
101
101
- name : Get changed files
102
102
if : inputs.scan-scope == 'changed'
103
103
id : changed-files
104
- uses : tj-actions/changed-files@v41
104
+ uses : tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3
105
105
with :
106
106
files : |
107
107
**/*.py
@@ -111,31 +111,50 @@ runs:
111
111
- name : Run Bandit scan
112
112
id : run-bandit
113
113
shell : bash
114
+ env :
115
+ INPUTS_SCAN_SCOPE : ${{ inputs.scan-scope }}
116
+ INPUTS_PATHS : ${{ inputs.paths }}
117
+ INPUTS_CONFIG_FILE : ${{ inputs.config_file }}
118
+ INPUTS_SEVERITY_LEVEL : ${{ inputs.severity-level }}
119
+ INPUTS_CONFIDENCE_LEVEL : ${{ inputs.confidence-level }}
120
+ INPUTS_OUTPUT_FORMAT : ${{ inputs.output-format }}
121
+ INPUTS_FAIL_ON_FINDINGS : ${{ inputs.fail-on-findings }}
114
122
run : |
115
- REPORT_FILE="bandit-report.${{ inputs.output-format }}"
116
-
117
- if [[ "${{ inputs.scan-scope }}" == "changed" && -n "${{ steps.changed-files.outputs.all_changed_files }}" ]]; then
118
- echo "Running Bandit on changed files"
119
- FILES="${{ steps.changed-files.outputs.all_changed_files }}"
120
- else
121
- echo "Running Bandit on all files in ${{ inputs.paths }}"
122
- FILES="${{ inputs.paths }}"
123
- fi
123
+ set +e
124
+ REPORT_FILE="bandit-report.$INPUTS_OUTPUT_FORMAT"
124
125
125
126
# Convert severity and confidence to lowercase
126
- SEVERITY=$(echo "${{ inputs.severity_level }} " | tr '[:upper:]' '[:lower:]')
127
- CONFIDENCE=$(echo "${{ inputs.confidence_level }} " | tr '[:upper:]' '[:lower:]')
127
+ SEVERITY=$(echo "$INPUTS_SEVERITY_LEVEL " | tr '[:upper:]' '[:lower:]')
128
+ CONFIDENCE=$(echo "$INPUTS_CONFIDENCE_LEVEL " | tr '[:upper:]' '[:lower:]')
128
129
129
- bandit \
130
- -c ${{ inputs.config_file }} \
131
- --severity-level ${SEVERITY} \
132
- --confidence-level ${CONFIDENCE} \
133
- -f ${{ inputs.output-format }} \
134
- -o "${REPORT_FILE}" \
135
- -r ${FILES} || echo "exit_code=$?" >> $GITHUB_OUTPUT
130
+ if [[ "$INPUTS_SCAN_SCOPE" == "changed" && -n "${{ steps.changed-files.outputs.all_changed_files }}" ]]; then
131
+ echo "Running Bandit on changed files, output results into workflow log only"
132
+ FILES="${{ steps.changed-files.outputs.all_changed_files }}"
133
+ bandit \
134
+ -a file \
135
+ -c "$INPUTS_CONFIG_FILE" \
136
+ --severity-level ${SEVERITY} \
137
+ --confidence-level ${CONFIDENCE} \
138
+ -r ${FILES}
139
+ exit_code="$?"
140
+ echo "exit_code=$exit_code" >> $GITHUB_OUTPUT
136
141
137
- echo "report_path=${REPORT_FILE}" >> $GITHUB_OUTPUT
142
+ elif [[ "$INPUTS_SCAN_SCOPE" == "all" ]] ; then
143
+ echo "Running Bandit on all files in $INPUTS_PATHS"
144
+ bandit \
145
+ -c "$INPUTS_CONFIG_FILE" \
146
+ --severity-level ${SEVERITY} \
147
+ --confidence-level ${CONFIDENCE} \
148
+ -f "$INPUTS_OUTPUT_FORMAT" \
149
+ -o "${REPORT_FILE}" \
150
+ -r "$INPUTS_PATHS"
151
+ exit_code="$?"
152
+ echo "exit_code=$exit_code" >> $GITHUB_OUTPUT
153
+ echo "report_path=${REPORT_FILE}" >> $GITHUB_OUTPUT
154
+ else
155
+ echo "No files to scan found"
156
+ fi
138
157
139
- if [[ "${{ inputs.fail-on-findings }} " == "true" && -n "$exit_code" && "$exit_code" != "0" ]]; then
158
+ if [[ "$INPUTS_FAIL_ON_FINDINGS " == "true" && -n "$exit_code" && "$exit_code" != "0" ]]; then
140
159
exit $exit_code
141
160
fi
0 commit comments