116 lines
2.2 KiB
Bash
Executable File
116 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
shopt -s nullglob
|
|
|
|
fail() {
|
|
echo "Failure: $@"
|
|
exit 1
|
|
}
|
|
|
|
lint() {
|
|
local spec=$1
|
|
|
|
echo "Linting (luarocks)..."
|
|
|
|
if ! luarocks lint "$spec"; then
|
|
fail "luarocks lint returned error"
|
|
fi
|
|
|
|
echo "Linting (luacheck)..."
|
|
|
|
# luacheck helps to point out some semantic issues (like duplicate
|
|
# table keys)
|
|
if ! luacheck \
|
|
--quiet \
|
|
--no-global \
|
|
-- - \
|
|
< "$spec";
|
|
then
|
|
fail "luacheck returned error"
|
|
fi
|
|
}
|
|
|
|
read_modules() {
|
|
local spec="$1"
|
|
resty -e '
|
|
local fn = loadstring(io.stdin:read("*a"))
|
|
local rock = {}
|
|
setfenv(fn, rock)
|
|
fn()
|
|
|
|
for mod, fname in pairs(rock.build.modules) do
|
|
print(fname .. "|" .. mod)
|
|
end
|
|
' < "$spec"
|
|
}
|
|
|
|
check_modules() {
|
|
local spec=$1
|
|
local -A files=()
|
|
|
|
echo "Checking modules..."
|
|
|
|
local failed=0
|
|
|
|
for line in $(read_modules "$spec"); do
|
|
fname=${line%|*}
|
|
module=${line#*|}
|
|
|
|
files[$fname]="$module"
|
|
|
|
if [[ ! -f $fname ]]; then
|
|
: $(( failed++ ))
|
|
echo "Module ($module) file ($fname) is missing"
|
|
fi
|
|
done
|
|
|
|
for fname in $(git ls-files 'kong/*.lua'); do
|
|
if [[ -z ${files[$fname]:-} ]]; then
|
|
: $(( failed++ ))
|
|
echo "File ($fname) not found in rockspec ($spec)"
|
|
fi
|
|
done
|
|
|
|
if (( failed > 0 )); then
|
|
fail "rockspec build.modules is invalid"
|
|
fi
|
|
}
|
|
|
|
|
|
main() {
|
|
local files=(kong-*.rockspec)
|
|
local spec
|
|
|
|
if (( ${#files[@]} == 0 )); then
|
|
fail "no rockspec file found"
|
|
|
|
elif (( ${#files[@]} > 1 )); then
|
|
fail "multiple rockspec files found: ${files[*]}"
|
|
|
|
else
|
|
spec=${files[0]}
|
|
fi
|
|
|
|
if [ "$spec" = "kong-latest.rockspec" ]; then
|
|
version=$(grep -E '^\s*(major|minor|patch)\s*=' kong/meta.lua \
|
|
| sed -E 's/[^0-9]*([0-9]+).*/\1/' \
|
|
| paste -sd. -)
|
|
cp "$spec" "kong-$version-0.rockspec"
|
|
sed -i "s/^version *= *\".*\"/version = \"$version-0\"/" "kong-$version-0.rockspec"
|
|
spec=kong-$version-0.rockspec
|
|
fi
|
|
|
|
echo "Found rockspec file to validate: $spec"
|
|
|
|
lint "$spec"
|
|
|
|
check_modules "$spec"
|
|
|
|
echo "OK!"
|
|
}
|
|
|
|
|
|
main "$@"
|