#!/bin/bash # Run this script inside its folder to generate the SARIF python object model files # from the SARIF schema. # e.g. ./gen_sarif.sh # # This script requires the jschema_to_python package to be installed. # To install it, run: # pip install jschema_to_python set -e -x ROOT="${PWD}/../../.." SARIF_DIR="torch/onnx/_internal/diagnostics/infra/sarif" # SARIF version SARIF_VERSION="2.1.0" SARIF_SCHEMA_LINK="https://docs.oasis-open.org/sarif/sarif/v2.1.0/cs01/schemas/sarif-schema-2.1.0.json" # Download SARIF schema tmp_dir="$(mktemp -d)" sarif_schema_file_path="${tmp_dir}/sarif-schema-${SARIF_VERSION}.json" curl -L -o "$sarif_schema_file_path" "$SARIF_SCHEMA_LINK" # TODO: A private branch of jschema_to_python was used to enable # the generation to dataclasses and support annotation. python -m jschema_to_python \ --schema-path "$sarif_schema_file_path" \ --module-name torch.onnx._internal.diagnostics.infra.sarif \ --output-directory "${ROOT}/${SARIF_DIR}" \ --root-class-name SarifLog \ --hints-file-path code-gen-hints.json \ --force \ --library dataclasses \ -vv # Generate SARIF version file echo "from typing import Final" > "${ROOT}/${SARIF_DIR}/version.py" echo "SARIF_VERSION: Final = \"${SARIF_VERSION}\"" >> "${ROOT}/${SARIF_DIR}/version.py" echo "SARIF_SCHEMA_LINK: Final = \"${SARIF_SCHEMA_LINK}\"" >> "${ROOT}/${SARIF_DIR}/version.py" pushd "$ROOT" ( # Hack to have flake8 not complain about generated code. set +x while IFS= read -r -d '' file; do echo "# flake8: noqa" >> "$file" done < <(find "$SARIF_DIR" -name '*.py' -print0) set -x lintrunner "${SARIF_DIR}/"** -a ) popd