diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2183dfcca8..ccfbbd8ac4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,15 +17,13 @@ variables: # Leave only bandit, flawfinder, semgrep. SAST_EXCLUDED_ANALYZERS: "eslint, spotbugs" +image: "${CI_REGISTRY_IMAGE}:latest" + stages: - test shellcheck: stage: test - image: "${CI_REGISTRY_IMAGE}:latest" - tags: - - linux - - amd64 script: - SCRIPTS= - SCRIPTS+="src/bin/admin/admin-utils.sh " @@ -106,6 +104,7 @@ shellcheck: - SCRIPTS+="tools/add-config-h.sh " - SCRIPTS+="tools/bump-lib-versions.sh " - SCRIPTS+="tools/check-for-duplicate-includes.sh " + - SCRIPTS+="tools/check-for-missing-api-commands.sh " - SCRIPTS+="tools/mk_cfgrpt.sh " - SCRIPTS+="tools/path_replacer.sh.in " - SCRIPTS+="tools/print-generated-files.sh " @@ -116,9 +115,6 @@ shellcheck: danger: stage: test image: registry.gitlab.isc.org/isc-projects/stork/ci-danger - tags: - - linux - - amd64 before_script: - export CI_MERGE_REQUEST_ID=$(git ls-remote -q origin merge-requests\*\head | grep $CI_COMMIT_SHA | sed 's/.*refs\/merge-requests\/\([0-9]*\)\/head/\1/g') - export CI_PROJECT_PATH=$CI_PROJECT_ID #some version of gitlab has problems with searching by project path @@ -133,25 +129,21 @@ danger: dhcpdb_create-upgrade-consistency: allow_failure: false stage: test - image: "${CI_REGISTRY_IMAGE}:latest" script: - ./src/share/database/scripts/utils/are-scripts-in-sync.py duplicate-includes: stage: test - image: "${CI_REGISTRY_IMAGE}:latest" - tags: - - linux - - amd64 script: - ./tools/check-for-duplicate-includes.sh +missing-api-commands: + stage: test + script: + - ./tools/check-for-missing-api-commands.sh + missing-config-h-include: stage: test - image: "${CI_REGISTRY_IMAGE}:latest" - tags: - - linux - - amd64 script: - FILES=$(./tools/add-config-h.sh -n) - printf '%s\n' "${FILES}" @@ -159,10 +151,6 @@ missing-config-h-include: missing-git-attribute: stage: test - image: "${CI_REGISTRY_IMAGE}:latest" - tags: - - linux - - amd64 script: - git_diff=$(git diff) - if test -n "${git_diff}"; then printf '%s\n\ngit diff should be empty here under all circumstances. CI broken?\n' "${git_diff}"; exit 1; fi diff --git a/tools/check-for-missing-api-commands.sh b/tools/check-for-missing-api-commands.sh new file mode 100755 index 0000000000..f4e406dee2 --- /dev/null +++ b/tools/check-for-missing-api-commands.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +# Copyright (C) 2022 Internet Systems Consortium, Inc. ("ISC") +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Usage: +# +# check-for-missing-api-commands.sh [$kea_repo] +# +# $kea_repo is by default ${script_path}/.. + +set -eu + +script_path=$(cd "$(dirname "${0}")" && pwd) +cd "${script_path}/.." + +if test "${#}" -gt 0; then + kea_repo=${1} +else + kea_repo="${script_path}/.." +fi + +# In order: +# 1. grep perl-regexp with-filename only-matching recursive null-output +# 2. Exclude doxygen files. +# 3. Exclude tests directories. +# 4. Grep for all calls to registerCommandCallout even if they span multiple lines. +# 5. Remove the null byte to be able to assign it to a variable. +# 6. Remove the newlines to be able to more easily grep further. +# 7. Remove the spaces to be able to more easily grep further. +# 8. Turn commas into newlines so that each command is on its own line. +# 9. Remove commands that are commented out in code. +# 10. Grep for the name of the command alone. +# 11. Remove double quotes from the command name. +commands=$(grep -Phorz \ + --exclude '*.dox' \ + --exclude-dir 'tests' \ + '.*registerCommandCallout\(\s*\n*\s*".*?",' . | \ + tr -d '\0' | \ + tr -d '\n' | \ + tr -d ' ' | \ + tr ',' '\n' | \ + grep -Ev '//.*registerCommandCallout' | \ + grep -Eo '".*?"' | \ + tr -d '"') + +# Check if there is a file with the ${command}.json format in src/share/api. +failed=false +for i in ${commands}; do + if test -f "${kea_repo}/src/share/api/${i}.json"; then + printf '[ SUCCESS ] %s\n' "${i}" + else + failed=true + printf '[ FAILURE ] %s - not found in src/share/api\n' "${i}" + fi +done + +if "${failed}"; then + return 1 +fi