|
4 | 4 | # Pre-requisites: golangci-lint |
5 | 5 | set -eo pipefail |
6 | 6 |
|
7 | | -SKIP_NON_GENERATED_FILES="${1}" |
8 | | -if [ ! "${SKIP_NON_GENERATED_FILES}" = true ]; then |
9 | | - SKIP_NON_GENERATED_FILES=false |
10 | | -fi |
11 | | - |
| 7 | +# Global flags |
12 | 8 | ROOT_DIR=$(git rev-parse --show-toplevel) |
13 | 9 | CORE_PATH="${ROOT_DIR}/core" |
14 | 10 | SERVICES_PATH="${ROOT_DIR}/services" |
15 | 11 | EXAMPLES_PATH="${ROOT_DIR}/examples" |
16 | 12 | GOLANG_CI_YAML_PATH="${ROOT_DIR}/golang-ci.yaml" |
17 | 13 | GOLANG_CI_ARGS="--allow-parallel-runners --timeout=5m --config=${GOLANG_CI_YAML_PATH}" |
18 | 14 |
|
| 15 | +# Arguments |
| 16 | +SKIP_NON_GENERATED_FILES="${1}" |
| 17 | +SERVICE="${2}" |
| 18 | + |
| 19 | +# Default values |
| 20 | +if [ ! "${SKIP_NON_GENERATED_FILES}" = true ]; then |
| 21 | + SKIP_NON_GENERATED_FILES=false |
| 22 | +fi |
| 23 | + |
19 | 24 | if type -p golangci-lint >/dev/null; then |
20 | 25 | : |
21 | 26 | else |
22 | 27 | echo "golangci-lint not installed, unable to proceed." |
23 | 28 | exit 1 |
24 | 29 | fi |
25 | 30 |
|
26 | | -if [ "${SKIP_NON_GENERATED_FILES}" = false ]; then |
27 | | - echo ">> Linting core" |
28 | | - cd ${CORE_PATH} |
29 | | - golangci-lint run ${GOLANG_CI_ARGS} |
30 | | -fi |
| 31 | +lint_service() { |
| 32 | + service=$1 |
31 | 33 |
|
32 | | -for service_dir in ${SERVICES_PATH}/*; do |
33 | | - service=$(basename ${service_dir}) |
34 | 34 | echo ">> Linting service ${service}" |
35 | | - cd ${service_dir} |
| 35 | + cd ${SERVICES_PATH}/${service} |
36 | 36 | if [ "${SKIP_NON_GENERATED_FILES}" = true ]; then |
37 | 37 | golangci-lint run ${GOLANG_CI_ARGS} --skip-dirs wait # All manually maintained files are in subfolders |
38 | 38 | else |
39 | 39 | golangci-lint run ${GOLANG_CI_ARGS} |
40 | 40 | fi |
41 | | -done |
| 41 | +} |
42 | 42 |
|
43 | | -if [ "${SKIP_NON_GENERATED_FILES}" = false ]; then |
44 | | - for example_dir in ${EXAMPLES_PATH}/*; do |
45 | | - example=$(basename ${example_dir}) |
46 | | - echo ">> Linting example ${example}" |
47 | | - cd ${example_dir} |
| 43 | +# If a service is specified, only lint that service |
| 44 | +if [ ! -z "${SERVICE}" ]; then |
| 45 | + lint_service ${SERVICE} |
| 46 | +# Otherwise, lint all modules and examples |
| 47 | +else |
| 48 | + if [ "${SKIP_NON_GENERATED_FILES}" = false ]; then |
| 49 | + echo ">> Linting core" |
| 50 | + cd ${CORE_PATH} |
48 | 51 | golangci-lint run ${GOLANG_CI_ARGS} |
| 52 | + fi |
| 53 | + |
| 54 | + for service_dir in ${SERVICES_PATH}/*; do |
| 55 | + service=$(basename ${service_dir}) |
| 56 | + lint_service ${service} |
49 | 57 | done |
| 58 | + |
| 59 | + if [ "${SKIP_NON_GENERATED_FILES}" = false ]; then |
| 60 | + for example_dir in ${EXAMPLES_PATH}/*; do |
| 61 | + example=$(basename ${example_dir}) |
| 62 | + echo ">> Linting example ${example}" |
| 63 | + cd ${example_dir} |
| 64 | + golangci-lint run ${GOLANG_CI_ARGS} |
| 65 | + done |
| 66 | + fi |
50 | 67 | fi |
0 commit comments