46 lines
1.2 KiB
Bash
46 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cases_root="${1:-cases}"
|
|
out_dir="${2:-/tmp/codeql-baseline}"
|
|
|
|
cases_root="$(cd "${cases_root}" && pwd)"
|
|
mkdir -p "${out_dir}"
|
|
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
tmp_dir="$(mktemp -d "${out_dir}/codeql-all-XXXX")"
|
|
submission="${out_dir}/submission.json"
|
|
|
|
find "${cases_root}" -name case.yaml -print | sort | while read -r case_file; do
|
|
case_dir="$(dirname "${case_file}")"
|
|
case_out="${tmp_dir}/$(basename "${case_dir}")"
|
|
mkdir -p "${case_out}"
|
|
"${script_dir}/run_case.sh" "${case_dir}" "${case_out}" >/dev/null
|
|
done
|
|
|
|
python - <<'PY'
|
|
import json, pathlib, sys
|
|
tmp_dir = pathlib.Path(sys.argv[1])
|
|
dest = pathlib.Path(sys.argv[2])
|
|
|
|
subs = []
|
|
for path in sorted(tmp_dir.glob("*/submission.json")):
|
|
subs.append(json.loads(path.read_text()))
|
|
|
|
merged = {
|
|
"version": "1.0.0",
|
|
"tool": {"name": "codeql", "version": "aggregate"},
|
|
"run": {"platform": "codeql-baseline-offline"},
|
|
"cases": []
|
|
}
|
|
|
|
for sub in subs:
|
|
merged["cases"].extend(sub.get("cases", []))
|
|
|
|
merged["cases"] = sorted(merged["cases"], key=lambda c: c.get("case_id",""))
|
|
|
|
dest.write_text(json.dumps(merged, indent=2, sort_keys=True))
|
|
print(f"submission written: {dest}")
|
|
PY "${tmp_dir}" "${submission}"
|