diff --git a/.github/workflows/validate-shapes.yml b/.github/workflows/validate-shapes.yml new file mode 100644 index 0000000..b5dd49a --- /dev/null +++ b/.github/workflows/validate-shapes.yml @@ -0,0 +1,52 @@ +name: Validate Shapes +on: + push: + branches: + - main + - shapes-and-schemas-subtask + pull_request: + branches: + - main + - shapes-and-schemas-subtask + +jobs: + validate-shapes: + runs-on: ubuntu-latest + strategy: + matrix: + folders: + - catalog/message + - negotiation/message + - transfer/message + + steps: + - uses: actions/checkout@v3 + name: Checkout + + - name: Install SHACL Validator + run: | + sudo pipx install pyshacl + + - name: Validate Shapes + run: | + for folder in ${{ matrix.folders }} + do + for json_file in $folder/example/*.json + do + _base_filename=$(basename "$json_file" .json) + + # Handle "_initial" files differently + if [[ "$_base_filename" =~ _initial$ ]]; then + _base_filename=${_base_filename%_initial} # Remove "_initial" suffix + fi + + shape_file="$folder/shape/${_base_filename}-shape.ttl" + + if [[ -f "$shape_file" ]]; then + echo "Validating $json_file against $shape_file" + pyshacl -df json-ld -sf turtle -s $shape_file $json_file + else + echo "WARNING: Shape file not found for $json_file" + fi + done + done