mirror of https://github.com/wolfSSL/wolfBoot.git
105 lines
3.8 KiB
YAML
105 lines
3.8 KiB
YAML
name: wolfBoot VSCode
|
|
|
|
on:
|
|
push:
|
|
# TODO: branches: [ 'master', 'main', 'release/**' ]
|
|
branches: [ '*' ]
|
|
pull_request:
|
|
branches: [ '*' ]
|
|
workflow_dispatch:
|
|
inputs:
|
|
workspace_path:
|
|
description: "Path to the .code-workspace file"
|
|
required: true
|
|
default: "IDE/VSCode/wolfBoot.code-workspace"
|
|
cmake_list_presets:
|
|
description: "Also run 'cmake --list-presets'"
|
|
required: true
|
|
default: "true"
|
|
|
|
jobs:
|
|
check:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: ghcr.io/wolfssl/wolfboot-ci-arm:v1.0
|
|
# Provide fallbacks when not workflow_dispatch
|
|
env:
|
|
WORKSPACE_PATH: ${{ github.event_name == 'workflow_dispatch' && inputs.workspace_path || 'IDE/VSCode/wolfBoot.code-workspace' }}
|
|
CMAKE_LIST: ${{ github.event_name == 'workflow_dispatch' && inputs.cmake_list_presets || 'true' }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Validate workspace JSONC and folder paths
|
|
shell: python3 {0}
|
|
env:
|
|
WORKSPACE_PATH: ${{ env.WORKSPACE_PATH }}
|
|
run: |
|
|
import os, sys, re, json, pathlib
|
|
print("pwd:", pathlib.Path(".").resolve())
|
|
ws_rel = os.environ.get("WORKSPACE_PATH", "").strip()
|
|
print("WORKSPACE_PATH:", ws_rel or "<EMPTY>")
|
|
|
|
if not ws_rel:
|
|
print("WORKSPACE_PATH input is required", file=sys.stderr)
|
|
sys.exit(2)
|
|
|
|
ws = pathlib.Path(ws_rel)
|
|
if not ws.exists():
|
|
print(f"Workspace file not found: {ws}", file=sys.stderr)
|
|
sys.exit(3)
|
|
|
|
txt = ws.read_text(encoding="utf-8", errors="replace")
|
|
# strip /* */ and // comments (JSONC -> JSON)
|
|
txt = re.sub(r"/\*.*?\*/", "", txt, flags=re.S)
|
|
txt = re.sub(r"//.*", "", txt)
|
|
try:
|
|
data = json.loads(txt)
|
|
except Exception:
|
|
print("Failed to parse workspace as JSON after removing comments.", file=sys.stderr)
|
|
raise
|
|
|
|
folders = data.get("folders", [])
|
|
if not isinstance(folders, list) or not folders:
|
|
print("No 'folders' defined in workspace.", file=sys.stderr)
|
|
sys.exit(4)
|
|
|
|
ws_dir = ws.parent.resolve()
|
|
errors = 0
|
|
for idx, item in enumerate(folders):
|
|
if not isinstance(item, dict):
|
|
print(f"folders[{idx}] is not an object", file=sys.stderr)
|
|
errors += 1
|
|
continue
|
|
path = item.get("path"); uri = item.get("uri")
|
|
if path is None and uri is None:
|
|
print(f"folders[{idx}] missing 'path' or 'uri'", file=sys.stderr)
|
|
errors += 1
|
|
continue
|
|
if path is not None:
|
|
if not isinstance(path, str):
|
|
print(f"folders[{idx}].path is not a string", file=sys.stderr)
|
|
errors += 1
|
|
else:
|
|
resolved = (ws_dir / path).resolve()
|
|
print(f"[ok] folders[{idx}] path='{path}' -> '{resolved}'")
|
|
if not resolved.exists():
|
|
print(f"[warn] resolved path does not exist on runner: {resolved}", file=sys.stderr)
|
|
if uri is not None:
|
|
print(f"[info] folders[{idx}] uses 'uri': {uri}")
|
|
|
|
if errors:
|
|
sys.exit(5)
|
|
|
|
settings = data.get("settings", {})
|
|
if settings and not isinstance(settings, dict):
|
|
print("settings is not an object", file=sys.stderr)
|
|
sys.exit(6)
|
|
|
|
print("Workspace JSONC and folder paths look sane.")
|
|
|
|
- name: List CMake presets (optional)
|
|
if: ${{ env.CMAKE_LIST == 'true' }}
|
|
run: |
|
|
cmake --list-presets || true
|