mirror of
https://git.dn42.dev/dn42/registry.git
synced 2026-05-16 20:23:48 +08:00
Update registry scripts
This commit is contained in:
parent
f8199a0902
commit
36e3570111
6 changed files with 258 additions and 56 deletions
|
|
@ -1,19 +1,90 @@
|
|||
#!/bin/sh
|
||||
#!/bin/sh -e
|
||||
###########################################################################
|
||||
#
|
||||
# dn42 registry - object validation
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
if [ "$#" -eq "0" ]
|
||||
then
|
||||
echo "Usage: $0 YOUR-MNT"
|
||||
exit
|
||||
mntner="$1"
|
||||
|
||||
if [ -z "$mntner" ]
|
||||
then
|
||||
>&2 echo "Usage: $0 YOUR-MNT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BASE="$(readlink -f "$0" 2>/dev/null || python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "$0")"
|
||||
BASE="$(dirname "$BASE")"
|
||||
cd "$BASE" || exit 1
|
||||
check_script='utils/schema-check/dn42_schema_local.py'
|
||||
|
||||
###########################################################################
|
||||
# determine registry directory
|
||||
#
|
||||
# this will fail if the script is in the PATH or is sourced but those
|
||||
# both seem unlikely. In any case if it does fail an env var can be used
|
||||
# to override the check
|
||||
|
||||
rdir="$REGDIR"
|
||||
if [ -z "$rdir" ]
|
||||
then
|
||||
rdir=$(cd -- "$(dirname -- "$0")" && pwd)
|
||||
fi
|
||||
|
||||
if ! [ -x "${rdir}/${check_script}" ]
|
||||
then
|
||||
>&2 cat <<EOF
|
||||
ERROR: Unable to automatically find the registry directory,
|
||||
or the script '$check_script' is not executable
|
||||
|
||||
You can set the directory manually using the
|
||||
REGDIR environment variable.
|
||||
|
||||
For example:
|
||||
REGDIR='path/to/registry' $0 $mntner
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# switch to the registry directory
|
||||
cd "$rdir"
|
||||
|
||||
###########################################################################
|
||||
# perform the validation
|
||||
|
||||
if [ "$mntner" = "--all" ]
|
||||
then
|
||||
# check everything
|
||||
|
||||
if ! "$check_script" -v scan data/
|
||||
then
|
||||
>&2 echo 'Schema validation failed!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = "--all" ]; then
|
||||
utils/schema-check/dn42-schema.py -v scan data/ || ( echo "Schema validation failed, please check above!" ; exit 1 )
|
||||
else
|
||||
utils/schema-check/dn42-schema.py -v scan data/ -f "data/mntner/$1" || ( echo "Schema validation for mntner object failed, please check above!" ; exit 1 )
|
||||
utils/schema-check/dn42-schema.py -v scan data/ -m "$1" || ( echo "Schema validation for related objects failed, please check above!" ; exit 1 )
|
||||
# check single mntner
|
||||
mfile="data/mntner/$mntner"
|
||||
|
||||
if ! [ -f "$mfile" ]
|
||||
then
|
||||
>&2 echo "MNTNER object does not exist: $mfile"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! "$check_script" -v scan data/ -f "$mfile"
|
||||
then
|
||||
>&2 echo 'Schema validation for mntner object failed!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! "$check_script" -v scan data/ -m "$mntner"
|
||||
then
|
||||
>&2 echo 'Schema validation for related objects failed!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# all good
|
||||
exit 0
|
||||
|
||||
###########################################################################
|
||||
# end of file
|
||||
|
|
|
|||
113
check-pol
113
check-pol
|
|
@ -1,18 +1,105 @@
|
|||
#!/usr/bin/env bash
|
||||
set -o pipefail
|
||||
#!/bin/sh -e
|
||||
###########################################################################
|
||||
#
|
||||
# dn42 registry - policy checks
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
echo "Usage: $0 COMMIT YOUR-MNT"
|
||||
exit
|
||||
commit="$1"
|
||||
mntner="$2"
|
||||
|
||||
if [ -z "$commit" ] || [ -z "$mntner" ]
|
||||
then
|
||||
>&2 echo "Usage: $0 COMMIT YOUR-MNT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BASE="$(readlink -f "$0" 2>/dev/null || python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "$0")"
|
||||
BASE="$(dirname "$BASE")"
|
||||
cd "$BASE" || exit 1
|
||||
check_script='utils/schema-check/dn42_schema_local.py'
|
||||
exitcode=0
|
||||
|
||||
git diff --name-only "$1" | while IFS='/' read -ra LINE; do
|
||||
if [[ "${LINE[0]}" = "data" && -n "${LINE[2]}" ]]; then
|
||||
utils/schema-check/dn42-schema.py -v policy "${LINE[1]}" "${LINE[2]}" "$2"
|
||||
###########################################################################
|
||||
# determine registry directory
|
||||
#
|
||||
# this will fail if the script is in the PATH or is sourced but those
|
||||
# both seem unlikely. In any case if it does fail an env var can be used
|
||||
# to override the check
|
||||
|
||||
rdir="$REGDIR"
|
||||
if [ -z "$rdir" ]
|
||||
then
|
||||
rdir=$(cd -- "$(dirname -- "$0")" && pwd)
|
||||
fi
|
||||
done
|
||||
|
||||
if ! [ -x "${rdir}/${check_script}" ]
|
||||
then
|
||||
>&2 cat <<EOF
|
||||
ERROR: Unable to automatically find the registry directory,
|
||||
or the script '$check_script' is not executable
|
||||
|
||||
You can set the directory manually using the
|
||||
REGDIR environment variable.
|
||||
|
||||
For example:
|
||||
REGDIR='path/to/registry' $0 $commit $mntner
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# switch to the registry directory
|
||||
cd "$rdir"
|
||||
|
||||
###########################################################################
|
||||
# find each changed file, using git diff, and then run the policy
|
||||
# check against each object that has changed
|
||||
#
|
||||
# the shell loop is a bit contrived but is required to maintain POSIX
|
||||
# compatibility and avoid the need for subshells
|
||||
|
||||
# loop through each file that has changed
|
||||
while IFS= read -r filename
|
||||
do
|
||||
|
||||
# extract the object type and name from the filename
|
||||
IFS='/'
|
||||
# shellcheck disable=SC2086
|
||||
set -- $filename
|
||||
IFS=
|
||||
|
||||
path="$1"
|
||||
type="$2"
|
||||
object="$3"
|
||||
|
||||
# check the file really is a registry object
|
||||
# (including if it still exists, as it may have been deleted)
|
||||
if [ -f "$filename" ] && [ "$path" = 'data' ] && \
|
||||
[ -n "$type" ] && [ -n "$object" ]
|
||||
then
|
||||
|
||||
# run the check script
|
||||
if ! "$check_script" -v policy \
|
||||
"$type" "$object" "$mntner" "$commit"
|
||||
then
|
||||
# update exit code on failure
|
||||
exitcode=1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done <<EOF
|
||||
$(git diff --name-only "$commit")
|
||||
EOF
|
||||
|
||||
###########################################################################
|
||||
# output a message and set exit code on failure
|
||||
|
||||
if [ "$exitcode" -ne 0 ]
|
||||
then
|
||||
>&2 echo 'FAILED: check the output for details'
|
||||
exit "$exitcode"
|
||||
fi
|
||||
|
||||
# all good
|
||||
exit 0
|
||||
|
||||
###########################################################################
|
||||
# end of file
|
||||
|
|
|
|||
59
fmt-my-stuff
59
fmt-my-stuff
|
|
@ -1,15 +1,54 @@
|
|||
#!/bin/sh
|
||||
#!/bin/sh -e
|
||||
###########################################################################
|
||||
#
|
||||
# dn42 registry - object formatting
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
if [ "$#" -eq "0" ]
|
||||
then
|
||||
echo "Usage: $0 YOUR-MNT"
|
||||
exit
|
||||
mntner="$1"
|
||||
|
||||
if [ -z "$mntner" ]
|
||||
then
|
||||
>&2 echo "Usage: $0 YOUR-MNT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BASE="$(readlink -f "$0" 2>/dev/null || python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "$0")"
|
||||
BASE="$(dirname "$BASE")"
|
||||
check_script='utils/schema-check/dn42_schema_local.py'
|
||||
|
||||
grep -lrE "(\s|:)$1(\s|\$)" "$BASE/data/" | while read -r line; do
|
||||
utils/schema-check/dn42-schema.py fmt -i "$line"
|
||||
done
|
||||
###########################################################################
|
||||
# determine registry directory
|
||||
#
|
||||
# this will fail if the script is in the PATH or is sourced but those
|
||||
# both seem unlikely. In any case if it does fail an env var can be used
|
||||
# to override the check
|
||||
|
||||
rdir="$REGDIR"
|
||||
if [ -z "$rdir" ]
|
||||
then
|
||||
rdir=$(cd -- "$(dirname -- "$0")" && pwd)
|
||||
fi
|
||||
|
||||
if ! [ -x "${rdir}/${check_script}" ]
|
||||
then
|
||||
>&2 cat <<EOF
|
||||
ERROR: Unable to automatically find the registry directory,
|
||||
or the script '$check_script' is not executable
|
||||
|
||||
You can set the directory manually using the
|
||||
REGDIR environment variable.
|
||||
|
||||
For example:
|
||||
REGDIR='path/to/registry' $0 $mntner
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
###########################################################################
|
||||
|
||||
grep -lrE "(\s|:)$mntner(\s|\$)" "${rdir}/data/" | \
|
||||
while read -r line; do
|
||||
"$check_script" fmt -i "$line"
|
||||
done
|
||||
|
||||
###########################################################################
|
||||
# end of file
|
||||
|
|
|
|||
|
|
@ -13,6 +13,6 @@ cd "$BASE" || exit 1
|
|||
|
||||
git diff --name-only "$1" | while IFS='/' read -ra LINE; do
|
||||
if [[ "${LINE[0]}" = "data" && -n "${LINE[2]}" ]]; then
|
||||
utils/schema-check/dn42_schema_local.py -v policy "${LINE[1]}" "${LINE[2]}" "$2" "$1"
|
||||
utils/schema-check/dn42-schema.py -v policy "${LINE[1]}" "${LINE[2]}" "$2"
|
||||
fi
|
||||
done
|
||||
|
|
@ -22,6 +22,11 @@ SCHEMA_NAMESPACE = "dn42."
|
|||
REGISTRY_URL = "git@git.dn42.dev:dn42/registry.git" if not "REG_URL" in os.environ else os.environ["REG_URL"]
|
||||
REGISTRY_COMMIT = "dn42registry/master"
|
||||
|
||||
# CLEVEL contains terminal escape codes for coloring log levels (overwriting it with LEVEL which doesn't)
|
||||
log.CLEVEL = log.LEVEL if "DN42REG_NO_COLOR" in os.environ else log.CLEVEL
|
||||
log.CMSG = log.MSG if "DN42REG_NO_COLOR" in os.environ else log.CMSG # not actually used in this context
|
||||
log.CMULTI = "[{1}] {2}" if "DN42REG_NO_COLOR" in os.environ else log.CMULTI
|
||||
|
||||
class SchemaDOM:
|
||||
"schema"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue