Skip to content

Commit 3cb80e6

Browse files
authored
Validate if tools from prerequisites are installed (#52)
Validate if tools from prerequisites are installed
1 parent 42da859 commit 3cb80e6

24 files changed

Lines changed: 334 additions & 187 deletions

.github/workflows/security.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,6 @@ jobs:
1414
contents: read
1515
security-events: write
1616
uses: fabasoad/reusable-workflows/.github/workflows/wf-security-sast.yml@main
17+
with:
18+
code-scanning: true
19+
sca: true

.github/workflows/update-license.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name: License
33

44
on: # yamllint disable-line rule:truthy
55
schedule:
6+
# Every January 1st at 14:00 JST
67
- cron: "0 5 1 1 *"
78

89
jobs:

.pre-commit-config.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ repos:
77
hooks:
88
- id: build
99
name: Build
10-
entry: make build
10+
entry: make install
1111
language: system
1212
pass_filenames: false
1313
verbose: true
@@ -34,11 +34,11 @@ repos:
3434
hooks:
3535
- id: detect-secrets
3636
- repo: https://github.com/gitleaks/gitleaks
37-
rev: v8.22.1
37+
rev: v8.23.2
3838
hooks:
3939
- id: gitleaks
4040
- repo: https://github.com/fabasoad/pre-commit-grype
41-
rev: v0.6.1
41+
rev: v0.6.2
4242
hooks:
4343
- id: grype-dir
4444
args:
@@ -47,7 +47,7 @@ repos:
4747
stages: ["pre-push"]
4848
# Markdown
4949
- repo: https://github.com/igorshubovych/markdownlint-cli
50-
rev: v0.43.0
50+
rev: v0.44.0
5151
hooks:
5252
- id: markdownlint-fix
5353
stages: ["pre-commit"]
@@ -66,7 +66,7 @@ repos:
6666
stages: ["pre-push"]
6767
# GitHub Actions
6868
- repo: https://github.com/rhysd/actionlint
69-
rev: v1.7.6
69+
rev: v1.7.7
7070
hooks:
7171
- id: actionlint
7272
args: ["-pyflakes="]

Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
.PHONY: build clean test
1+
.PHONY: install clean test
22

3-
.DEFAULT_GOAL := build
3+
.DEFAULT_GOAL := install
44

5-
build: clean
6-
@./scripts/build.sh
5+
install: clean
6+
@./scripts/install.sh
77

88
clean:
99
@./scripts/clean.sh

README.md

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,27 @@
88

99
## Table of Contents
1010

11-
- [How it works?](#how-it-works)
12-
- [Prerequisites](#prerequisites)
13-
- [Hooks](#hooks)
14-
- [snyk-code](#snyk-code)
15-
- [snyk-container](#snyk-container)
16-
- [snyk-iac](#snyk-iac)
17-
- [snyk-log4shell](#snyk-log4shell)
18-
- [snyk-test](#snyk-test)
19-
- [Customization](#customization)
20-
- [Description](#description)
21-
- [Parameters](#parameters)
22-
- [Snyk](#snyk)
23-
- [pre-commit-snyk](#pre-commit-snyk)
24-
- [Log level](#log-level)
25-
- [Log color](#log-color)
26-
- [Snyk version](#snyk-version)
27-
- [Clean cache](#clean-cache)
28-
- [Examples](#examples)
11+
- [Snyk pre-commit hooks](#snyk-pre-commit-hooks)
12+
- [Table of Contents](#table-of-contents)
13+
- [How it works?](#how-it-works)
14+
- [Prerequisites](#prerequisites)
15+
- [Hooks](#hooks)
16+
- [snyk-code](#snyk-code)
17+
- [snyk-container](#snyk-container)
18+
- [snyk-iac](#snyk-iac)
19+
- [snyk-log4shell](#snyk-log4shell)
20+
- [snyk-test](#snyk-test)
21+
- [Customization](#customization)
22+
- [Description](#description)
23+
- [Parameters](#parameters)
24+
- [Snyk](#snyk)
25+
- [pre-commit-snyk](#pre-commit-snyk)
26+
- [Log level](#log-level)
27+
- [Log color](#log-color)
28+
- [Snyk version](#snyk-version)
29+
- [Clean cache](#clean-cache)
30+
- [Examples](#examples)
31+
- [Contributions](#contributions)
2932

3033
## How it works?
3134

@@ -35,11 +38,12 @@ that will be removed after scanning is completed.
3538

3639
## Prerequisites
3740

38-
The following tools have to be available on a runner prior using this pre-commit
41+
The following tools have to be available on a machine prior using this pre-commit
3942
hook:
4043

4144
- [bash >=4.0](https://www.gnu.org/software/bash/)
4245
- [curl](https://curl.se/)
46+
- [jq](https://jqlang.github.io/jq/)
4347

4448
## Hooks
4549

@@ -290,3 +294,7 @@ repos:
290294
- --hook-args=--log-level debug
291295
- --snyk-args=--detection-depth=1 --ignore-policy
292296
```
297+
298+
## Contributions
299+
300+
![Alt](https://repobeats.axiom.co/api/embed/7ce583138987e93d1295be43056e647a1d2ede8e.svg "Repobeats analytics image")

scripts/build.sh renamed to scripts/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ main() {
99
mkdir -p "${bpkg_packages_dir}"
1010
lock_file="${ROOT_DIR}/.bpkg.lock"
1111
while IFS= read -r line; do
12-
PREFIX="${bpkg_packages_dir}" bpkg install "$line"
12+
PREFIX="${bpkg_packages_dir}" bpkg install "${line}"
1313
done < "${lock_file}"
1414
}
1515

src/.bpkg/bin/fabasoad-log

Lines changed: 99 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,65 @@
1-
#!/usr/bin/env sh
1+
#!/usr/bin/env bash
22

33
FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT="text"
44
FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT="%Y-%m-%d %T"
55
FABASOAD_LOG_CONFIG_HEADER_DEFAULT="fabasoad-log"
66
FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT="true"
7-
FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT="[<header>] <time> level=<level> <message>"
7+
FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT="[<header>] <timestamp> level=<level> <message>"
88
FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT="info"
99

10+
# Initialization
11+
12+
_get_from_config_or_default() {
13+
jq -r --arg p "${1}" --arg d "${3}" 'try .config[$p] catch $d' "${2}"
14+
}
15+
16+
_fabasoad_log_init() {
17+
header="${FABASOAD_LOG_CONFIG_HEADER_DEFAULT}"
18+
output_format="${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT}"
19+
text_format="${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT}"
20+
date_format="${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}"
21+
text_color="${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT}"
22+
log_level="${FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT}"
23+
24+
config_path="${1}"
25+
26+
if [ -f "${config_path}" ]; then
27+
header=$(_get_from_config_or_default "header" "${config_path}" "${FABASOAD_LOG_CONFIG_HEADER_DEFAULT}")
28+
tmp=$(_get_from_config_or_default "output-format" "${config_path}" "${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT}")
29+
case "${tmp}" in
30+
json|xml|text)
31+
output_format="${tmp}"
32+
;;
33+
esac
34+
text_format=$(_get_from_config_or_default "text-format" "${config_path}" "${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT}")
35+
date_format=$(_get_from_config_or_default "date-format" "${config_path}" "${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}")
36+
tmp=$(_get_from_config_or_default "text-color" "${config_path}" "${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT}")
37+
case "${tmp}" in
38+
true|false)
39+
text_color="${tmp}"
40+
;;
41+
esac
42+
tmp=$(_get_from_config_or_default "log-level" "${config_path}" "${FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT}")
43+
case "${tmp}" in
44+
error|warning|info|debug|off)
45+
log_level="${tmp}"
46+
;;
47+
esac
48+
fi
49+
50+
export FABASOAD_LOG_CONFIG_HEADER="${header:-${FABASOAD_LOG_CONFIG_HEADER_DEFAULT}}"
51+
export FABASOAD_LOG_CONFIG_OUTPUT_FORMAT="${output_format:-${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT}}"
52+
export FABASOAD_LOG_CONFIG_TEXT_FORMAT="${text_format:-${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT}}"
53+
export FABASOAD_LOG_CONFIG_DATE_FORMAT="${date_format:-${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}}"
54+
export FABASOAD_LOG_CONFIG_TEXT_COLOR="${text_color:-${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT}}"
55+
export FABASOAD_LOG_CONFIG_LOG_LEVEL="${log_level:-${FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT}}"
56+
}
57+
1058
# Text modifications
1159

1260
_fabasoad_wrap_text_with_color() {
13-
log_line="$1"
14-
level="$2"
61+
log_line="${1}"
62+
level="${2}"
1563
if [ "${FABASOAD_LOG_CONFIG_TEXT_COLOR:-${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT}}" = "true" ]; then
1664
if [ "${level}" = "error" ]; then
1765
printf "\033[91m${log_line}\033[0m"
@@ -29,9 +77,9 @@ _fabasoad_wrap_text_with_color() {
2977

3078
_fabasoad_wrap_text_with_bold() {
3179
if [ "${FABASOAD_LOG_CONFIG_TEXT_COLOR:-${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT}}" = "true" ]; then
32-
echo "\033[1m$1\033[22m"
80+
echo "\033[1m${1}\033[22m"
3381
else
34-
echo "$1"
82+
echo "${1}"
3583
fi
3684
}
3785

@@ -76,8 +124,8 @@ _fabasoad_is_printing_debug_ok() {
76124
# Printing
77125

78126
_fabasoad_print_log() {
79-
level="$1"
80-
message="$2"
127+
level="${1}"
128+
message="${2}"
81129

82130
if [ "${level}" = "error" ] && [ "$(_fabasoad_is_printing_error_ok)" = "true" ]; then # error
83131
printf "${message}\n" >&2
@@ -91,12 +139,12 @@ _fabasoad_print_log() {
91139
}
92140

93141
_fabasoad_log_text() {
94-
level="$1"
95-
message="$2"
142+
level="${1}"
143+
message="${2}"
96144

97145
text_msg="${FABASOAD_LOG_CONFIG_TEXT_FORMAT:-${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT}}"
98146
text_msg=${text_msg/<header>/${FABASOAD_LOG_CONFIG_HEADER:-${FABASOAD_LOG_CONFIG_HEADER_DEFAULT}}}
99-
text_msg=${text_msg/<time>/$(date +"${FABASOAD_LOG_CONFIG_DATE_FORMAT:-${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}}")}
147+
text_msg=${text_msg/<timestamp>/$(date +"${FABASOAD_LOG_CONFIG_DATE_FORMAT:-${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}}")}
100148
text_msg=${text_msg/<level>/$(_fabasoad_wrap_text_with_bold "${level}")}
101149
text_msg=${text_msg/<message>/${message}}
102150

@@ -105,22 +153,27 @@ _fabasoad_log_text() {
105153
}
106154

107155
_fabasoad_log_json() {
108-
level="$1"
109-
message="$2"
110-
111-
json_msg="{"
112-
json_msg="${json_msg}\"timestamp\":\"$(date +"${FABASOAD_LOG_CONFIG_DATE_FORMAT:-${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}}")\","
113-
json_msg="${json_msg}\"header\":\"${FABASOAD_LOG_CONFIG_HEADER:-${FABASOAD_LOG_CONFIG_HEADER_DEFAULT}}\","
114-
json_msg="${json_msg}\"level\":\"${level}\","
115-
json_msg="${json_msg}\"message\":\"${message}\""
116-
json_msg="${json_msg}}"
156+
timestamp="$(date +"${FABASOAD_LOG_CONFIG_DATE_FORMAT:-${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}}")"
157+
header="${FABASOAD_LOG_CONFIG_HEADER:-${FABASOAD_LOG_CONFIG_HEADER_DEFAULT}}"
158+
159+
json_msg=$(jq -cn \
160+
--arg timestamp "${timestamp}" \
161+
--arg header "${header}" \
162+
--arg level "${1}" \
163+
--arg message "${2}" \
164+
'{
165+
timestamp: $timestamp,
166+
header: $header,
167+
level: $level,
168+
message: $message
169+
}')
117170

118171
_fabasoad_print_log "${level}" "${json_msg}"
119172
}
120173

121174
_fabasoad_log_xml() {
122-
level="$1"
123-
message="$2"
175+
level="${1}"
176+
message="${2}"
124177

125178
xml_msg="<log>"
126179
xml_msg="${xml_msg}<timestamp>$(date +"${FABASOAD_LOG_CONFIG_DATE_FORMAT:-${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT}}")</timestamp>"
@@ -134,30 +187,41 @@ _fabasoad_log_xml() {
134187

135188
# Public functions
136189

190+
# Prints log line.
191+
# Parameters:
192+
# 1. (Required) Log level. Possible values: debug, info, warning, error, off.
193+
# 2. (Required) Log message.
194+
# 2. (Optional) Path to the config file.
195+
#
196+
# Usage example:
197+
# fabasoad_log "error" "This is error message"
198+
# fabasoad_log "debug" "This is debug message" "./config.json"
137199
fabasoad_log() {
138200
level="${1}"
139201
message="${2}"
140202
config_path="${3:-""}"
141203

142204
if [ -f "${config_path}" ]; then
143-
log_init_lib="$(dirname $(realpath "${0}"))/fabasoad-log-init.sh"
144-
if [ -f "${log_init_lib}" ]; then
145-
. "${log_init_lib}"
146-
fabasoad_log_init "${config_path}"
147-
fi
205+
_fabasoad_log_init "${config_path}"
148206
fi
149207

150-
if [ "${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT:-${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT}}" = "xml" ]; then
151-
_fabasoad_log_xml "${level}" "${message}"
152-
elif [ "${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT:-${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT}}" = "json" ]; then
153-
_fabasoad_log_json "${level}" "${message}"
154-
else
155-
_fabasoad_log_text "${level}" "${message}"
156-
fi
208+
case "${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT:-${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT}}" in
209+
"xml")
210+
log_func="_fabasoad_log_xml"
211+
;;
212+
"json")
213+
log_func="_fabasoad_log_json"
214+
;;
215+
*)
216+
log_func="_fabasoad_log_text"
217+
;;
218+
esac
219+
220+
${log_func} "${level}" "${message}"
157221
}
158222

159223
# export
160-
if [ ${BASH_SOURCE[0]} != $0 ]; then
224+
if [[ ${BASH_SOURCE[0]} != $0 ]]; then
161225
export -f fabasoad_log
162226
else
163227
fabasoad_log "${@}"

0 commit comments

Comments
 (0)