Skip to content

Commit 1968a81

Browse files
committed
Add support for --fail-on-warnings
1 parent 1aa3d43 commit 1968a81

18 files changed

Lines changed: 274 additions & 95 deletions
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
name: Major Version Update
2+
on:
3+
release:
4+
types: [ published ]
5+
jobs:
6+
actions-tagger:
7+
runs-on: windows-latest
8+
steps:
9+
- uses: Actions-R-Us/actions-tagger@v2
10+
env:
11+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
.idea
22
*.iml
3-
sourcehawk-scan-results.txt
4-
sourcehawk-scan-results.json
5-
sourcehawk-scan-results.md
3+
sourcehawk-scan-results.*

Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1+
# Github Docs: https://docs.github.com/en/free-pro-team@latest/actions/creating-actions/dockerfile-support-for-github-actions
2+
13
# Small Linux based image with sourcehawk installed
2-
FROM optumopensource/sourcehawk:0.1.3-alpine
4+
FROM optumopensource/sourcehawk:0.1.5-alpine
35

46
# Need root to write
57
USER root
68

79
# Repository gets mounted to this directory
810
WORKDIR /github/workspace
911

10-
# Copy Entrypoint script into image and make sure its executable
12+
# Copy Entrypoint script into image
1113
COPY entrypoint.sh /entrypoint.sh
12-
RUN chmod +x /entrypoint.sh
1314

1415
# Execute the entrypoint
1516
ENTRYPOINT ["/entrypoint.sh"]

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,18 @@ The configuration file path
3636

3737
**Default**: `sourcehawk-scan-results.txt`
3838

39+
### `fail-on-warnings`
40+
41+
Whether or not to fail the build on warnings
42+
43+
**Default**: `false`
44+
45+
### `fail-build`
46+
47+
Whether or not to fail the build if the scan fails
48+
49+
**Default**: `true`
50+
3951
## Outputs
4052

4153
### `scan-passed`
@@ -86,7 +98,7 @@ jobs:
8698
uses: actions/checkout@v2
8799
- name: Run Sourcehawk Scan
88100
id: sourcehawk
89-
uses: pptum/sourcehawk-scan-github-action@v1
101+
uses: optum/sourcehawk-scan-github-action@v1
90102
with:
91103
output-format: JSON
92104
output-file: sourcehawk-scan-results.json

action.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
name: 'Sourcehawk Scan'
22
description: 'Run a sourcehawk scan on the code base'
3+
branding:
4+
icon: 'terminal'
5+
color: 'blue'
36
inputs:
47
repository-root:
58
description: 'Repository Root'
@@ -17,6 +20,10 @@ inputs:
1720
description: 'Output file to write results to'
1821
required: false
1922
default: 'sourcehawk-scan-results.txt'
23+
fail-on-warnings:
24+
description: 'Whether or not to fail the scan if only warnings found'
25+
required: false
26+
default: 'false'
2027
fail-build:
2128
description: 'Whether or not to fail the build on scan failure'
2229
required: false
@@ -32,5 +39,6 @@ runs:
3239
- ${{ inputs.config-file }}
3340
- ${{ inputs.output-format }}
3441
- ${{ inputs.output-file }}
42+
- ${{ inputs.fail-on-warnings }}
3543
- ${{ inputs.fail-build }}
3644

entrypoint.sh

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@ REPOSITORY_ROOT=${1:-'.'}
2020
CONFIG_FILE=${2:-'sourcehawk.yml'}
2121
OUTPUT_FORMAT=${3:-TEXT}
2222
OUTPUT_FILE=${4:-'sourcehawk-scan-results.txt'}
23-
FAIL_BUILD=${5:-true}
23+
FAIL_ON_WARNINGS=${5:-false}
24+
FAIL_BUILD=${6:-true}
2425

2526
PASSED=false
2627

2728
# Run the scan and output the results
28-
sourcehawk scan --verbosity MEDIUM --config-file "$CONFIG_FILE" --output-format "$OUTPUT_FORMAT" "$REPOSITORY_ROOT" > "$OUTPUT_FILE"
29+
if [ "$FAIL_ON_WARNINGS" = "true" ]; then
30+
sourcehawk scan --config-file "$CONFIG_FILE" --output-format "$OUTPUT_FORMAT" --fail-on-warnings "$REPOSITORY_ROOT" > "$OUTPUT_FILE"
31+
else
32+
sourcehawk scan --config-file "$CONFIG_FILE" --output-format "$OUTPUT_FORMAT" "$REPOSITORY_ROOT" > "$OUTPUT_FILE"
33+
fi
2934

3035
# Determine if scan passed
3136
if [ $? -eq 0 ]; then

test.sh

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,39 @@
33
set -e
44

55
# Set up testing environment
6-
./tests/setup.sh
6+
ROOT=$(dirname "$(readlink -fm "$0")")
7+
TEST_IMAGE="sourcehawk-scan-github-action:test"
8+
docker build -t "$TEST_IMAGE" .
79

8-
# Execute tests
9-
./tests/scan-passed.sh
10-
./tests/scan-failed.sh
11-
./tests/scan-error.sh
12-
./tests/scan-custom.sh
10+
# Define Tests
11+
TESTS=( "scan-passed" "scan-failed" "scan-error" "scan-custom" "scan-warning" "scan-warning-fail" )
12+
13+
PASSED=()
14+
FAILED=()
15+
16+
echo "Running Tests"
17+
echo "----------------------------------------"
18+
19+
# Execute Tests
20+
for test in "${TESTS[@]}"; do
21+
22+
echo "[TEST]: ${test}"
23+
echo "----------------------------------------"
24+
25+
if ./tests/"${test}".sh "$ROOT" "$TEST_IMAGE"; then
26+
echo " >> PASSED"
27+
PASSED+=("${test}")
28+
else
29+
echo " >> [ERROR] FAILED"
30+
FAILED+=("${test}")
31+
fi
32+
echo "----------------------------------------"
33+
34+
done
35+
36+
echo "Tests Completed"
37+
echo -n " >> Result: "
38+
[ ${#FAILED[@]} -gt 0 ] && echo "FAILURE " || echo "SUCCESS"
39+
echo " >> Tests: $((${#PASSED[@]}+${#FAILED[@]})), Passed: ${#PASSED[@]}, Failed: ${#FAILED[@]}"
40+
echo "----------------------------------------"
41+
exit ${#FAILED[@]}

tests/scan-custom.sh

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
#!/usr/bin/env bash
22

3-
set -e
4-
5-
echo "Running test: Scan Custom"
6-
echo "-------------------------"
7-
8-
ROOT="$(dirname "$(dirname "$(readlink -fm "$0")")")"
9-
10-
OUTPUT=$(docker run -v "$ROOT:/github/workspace" sourcehawk-scan-github-action:test "tests/scan-custom" "sh.yml" "JSON" "sourcehawk-scan-results.json")
3+
OUTPUT=$(docker run -v "$1:/github/workspace" "$2" "tests/scan-custom" "sh.yml" "JSON" "sourcehawk-scan-results.json")
114
SCAN_EXIT_CODE=$?
125

6+
PASSED=()
7+
FAILED=()
8+
9+
TEST_NAME="SCAN_EXIT_CODE"
1310
if [[ $SCAN_EXIT_CODE -eq 0 ]]; then
14-
echo " > SCAN_EXIT_CODE: Correct"
11+
echo " > $TEST_NAME: Correct"
12+
PASSED+=("$TEST_NAME")
1513
else
16-
echo " > SCAN_EXIT_CODE: Incorrect, expected 0, got $SCAN_EXIT_CODE"
14+
echo " > $TEST_NAME: Incorrect, expected 0, got $SCAN_EXIT_CODE"
15+
FAILED+=("$TEST_NAME")
1716
fi
1817

18+
TEST_NAME="SCAN_RESULT_MESSAGE"
1919
FIRST_LINE=$(echo "$OUTPUT" | head -1 | sed -e 's/[[:space:]]*$//')
2020
EXPECTED='{"passed":true,"errorCount":0,"warningCount":0,"messages":{},"formattedMessages":[]}'
2121
if [[ "$FIRST_LINE" = "$EXPECTED" ]]; then
22-
echo " > SCAN_RESULT_MESSAGE: Correct"
22+
echo " > $TEST_NAME: Correct"
23+
PASSED+=("$TEST_NAME")
2324
else
24-
echo " > SCAN_RESULT_MESSAGE: Missing or incorrect, found: [$FIRST_LINE], expected: [$EXPECTED]"
25-
exit 1
25+
echo " > $TEST_NAME: Missing or incorrect, found: [$FIRST_LINE], expected: [$EXPECTED]"
26+
FAILED+=("$TEST_NAME")
2627
fi
2728

29+
TEST_NAME="RESULT_FILE"
2830
if [[ -f "sourcehawk-scan-results.json" ]]; then
29-
echo " > RESULT_FILE: Correct"
31+
echo " > $TEST_NAME: Correct"
32+
PASSED+=("$TEST_NAME")
3033
else
31-
echo " > RESULT_FILE: Missing result file at path: sourcehawk-scan-results.json"
32-
exit 1
34+
echo " > $TEST_NAME: Missing result file at path: sourcehawk-scan-results.json"
35+
FAILED+=("$TEST_NAME")
3336
fi
3437

35-
echo "Test Passed"
36-
echo "-------------------------"
38+
echo " >> Tests: $((${#PASSED[@]}+${#FAILED[@]})), Passed: ${#PASSED[@]}, Failed: ${#FAILED[@]}"
39+
exit ${#FAILED[@]}

tests/scan-error.sh

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,49 @@
11
#!/usr/bin/env bash
22

3-
echo "Running test: Scan Error"
4-
echo "-------------------------"
5-
6-
ROOT="$(dirname "$(dirname "$(readlink -fm "$0")")")"
7-
8-
OUTPUT=$(docker run -v "$ROOT:/github/workspace" sourcehawk-scan-github-action:test "tests/scan-error")
3+
OUTPUT=$(docker run -v "$1:/github/workspace" "$2" "tests/scan-error")
94
SCAN_EXIT_CODE=$?
105

6+
TEST_NAME="SCAN_EXIT_CODE"
117
if [[ $SCAN_EXIT_CODE -eq 1 ]]; then
12-
echo " > SCAN_EXIT_CODE: Correct"
8+
echo " > $TEST_NAME: Correct"
9+
PASSED+=("$TEST_NAME")
1310
else
14-
echo " > SCAN_EXIT_CODE: Incorrect, expected 1, got $SCAN_EXIT_CODE"
11+
echo " > $TEST_NAME: Incorrect, expected 1, got $SCAN_EXIT_CODE"
12+
FAILED+=("$TEST_NAME")
1513
fi
1614

15+
TEST_NAME="SCAN_RESULT_MESSAGE"
1716
FIRST_LINE=$(echo "$OUTPUT" | head -1 | sed -e 's/[[:space:]]*$//')
1817
EXPECTED="Scan resulted in failure. Error(s): 1, Warning(s): 0"
1918
if [[ "$FIRST_LINE" = "$EXPECTED" ]]; then
20-
echo " > SCAN_RESULT_MESSAGE: Correct"
19+
echo " > $TEST_NAME: Correct"
20+
PASSED+=("$TEST_NAME")
2121
else
22-
echo " > SCAN_RESULT_MESSAGE: Missing or incorrect, found: [$FIRST_LINE], expected: [$EXPECTED]"
23-
exit 1
22+
echo " > $TEST_NAME: Missing or incorrect, found: [$FIRST_LINE], expected: [$EXPECTED]"
23+
FAILED+=("$TEST_NAME")
2424
fi
2525

26+
TEST_NAME="SCAN_RESULT_ERROR"
2627
SECOND_LINE=$(echo "$OUTPUT" | tail -2 | head -1 | sed -e 's/[[:space:]]*$//')
2728
EXPECTED="[ERROR] sourcehawk.yml :: Configuration file not found"
2829
if [[ "$SECOND_LINE" = "$EXPECTED" ]]; then
29-
echo " > SCAN_RESULT_ERROR: Correct"
30+
echo " > $TEST_NAME: Correct"
31+
PASSED+=("$TEST_NAME")
3032
else
31-
echo " > SCAN_RESULT_ERROR: Missing or incorrect, found: [$SECOND_LINE], expected: [$EXPECTED]"
32-
exit 1
33+
echo " > $TEST_NAME: Missing or incorrect, found: [$SECOND_LINE], expected: [$EXPECTED]"
34+
FAILED+=("$TEST_NAME")
3335
fi
3436

37+
TEST_NAME="GITHUB_ACTION_OUTPUT"
3538
LAST_LINE=$(echo "$OUTPUT" | tail -1 | sed -e 's/[[:space:]]*$//')
3639
EXPECTED="::set-output name=scan-passed::false"
3740
if [[ "$LAST_LINE" = "$EXPECTED" ]]; then
38-
echo " > GITHUB_ACTION_OUTPUT: Correct"
41+
echo " > $TEST_NAME: Correct"
42+
PASSED+=("$TEST_NAME")
3943
else
40-
echo " > GITHUB_ACTION_OUTPUT: Missing scan-passed(false) output"
41-
exit 1
44+
echo " > $TEST_NAME: Missing scan-passed(false) output"
45+
FAILED+=("$TEST_NAME")
4246
fi
4347

44-
echo "Test Passed"
45-
echo "-------------------------"
48+
echo " >> Tests: $((${#PASSED[@]}+${#FAILED[@]})), Passed: ${#PASSED[@]}, Failed: ${#FAILED[@]}"
49+
exit ${#FAILED[@]}

tests/scan-failed.sh

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,49 @@
11
#!/usr/bin/env bash
22

3-
echo "Running test: Scan Failed"
4-
echo "-------------------------"
5-
6-
ROOT="$(dirname "$(dirname "$(readlink -fm "$0")")")"
7-
8-
OUTPUT=$(docker run -v "$ROOT:/github/workspace" sourcehawk-scan-github-action:test "tests/scan-failed")
3+
OUTPUT=$(docker run -v "$1:/github/workspace" "$2" "tests/scan-failed")
94
SCAN_EXIT_CODE=$?
105

6+
EST_NAME="SCAN_EXIT_CODE"
117
if [[ $SCAN_EXIT_CODE -eq 1 ]]; then
12-
echo " > SCAN_EXIT_CODE: Correct"
8+
echo " > $TEST_NAME: Correct"
9+
PASSED+=("$TEST_NAME")
1310
else
14-
echo " > SCAN_EXIT_CODE: Incorrect, expected 1, got $SCAN_EXIT_CODE"
11+
echo " > $TEST_NAME: Incorrect, expected 1, got $SCAN_EXIT_CODE"
12+
FAILED+=("$TEST_NAME")
1513
fi
1614

15+
TEST_NAME="SCAN_RESULT_MESSAGE"
1716
FIRST_LINE=$(echo "$OUTPUT" | head -1 | sed -e 's/[[:space:]]*$//')
1817
EXPECTED="Scan resulted in failure. Error(s): 1, Warning(s): 0"
1918
if [[ "$FIRST_LINE" = "$EXPECTED" ]]; then
20-
echo " > SCAN_RESULT_MESSAGE: Correct"
19+
echo " > $TEST_NAME: Correct"
20+
PASSED+=("$TEST_NAME")
2121
else
22-
echo " > SCAN_RESULT_MESSAGE: Missing or incorrect, found: [$FIRST_LINE], expected: [$EXPECTED]"
23-
exit 1
22+
echo " > $TEST_NAME: Missing or incorrect, found: [$FIRST_LINE], expected: [$EXPECTED]"
23+
FAILED+=("$TEST_NAME")
2424
fi
2525

26+
TEST_NAME="SCAN_RESULT_ERROR"
2627
SECOND_LINE=$(echo "$OUTPUT" | tail -2 | head -1 | sed -e 's/[[:space:]]*$//')
2728
EXPECTED="[ERROR] foo.bar :: File not found"
2829
if [[ "$SECOND_LINE" = "$EXPECTED" ]]; then
29-
echo " > SCAN_RESULT_ERROR: Correct"
30+
echo " > $TEST_NAME: Correct"
31+
PASSED+=("$TEST_NAME")
3032
else
31-
echo " > SCAN_RESULT_ERROR: Missing or incorrect, found: [$SECOND_LINE], expected: [$EXPECTED]"
32-
exit 1
33+
echo " > $TEST_NAME: Missing or incorrect, found: [$SECOND_LINE], expected: [$EXPECTED]"
34+
FAILED+=("$TEST_NAME")
3335
fi
3436

37+
TEST_NAME="GITHUB_ACTION_OUTPUT"
3538
LAST_LINE=$(echo "$OUTPUT" | tail -1 | sed -e 's/[[:space:]]*$//')
3639
EXPECTED="::set-output name=scan-passed::false"
3740
if [[ "$LAST_LINE" = "$EXPECTED" ]]; then
38-
echo " > GITHUB_ACTION_OUTPUT: Correct"
41+
echo " > $TEST_NAME: Correct"
42+
PASSED+=("$TEST_NAME")
3943
else
40-
echo " > GITHUB_ACTION_OUTPUT: Missing scan-passed(false) output"
41-
exit 1
44+
echo " > $TEST_NAME: Missing scan-passed(false) output"
45+
FAILED+=("$TEST_NAME")
4246
fi
4347

44-
echo "Test Passed"
45-
echo "-------------------------"
48+
echo " >> Tests: $((${#PASSED[@]}+${#FAILED[@]})), Passed: ${#PASSED[@]}, Failed: ${#FAILED[@]}"
49+
exit ${#FAILED[@]}

0 commit comments

Comments
 (0)