{"id":50369516,"url":"https://github.com/oaslananka/boardreadyops","last_synced_at":"2026-05-30T06:04:38.972Z","repository":{"id":359257647,"uuid":"1245187222","full_name":"oaslananka/boardreadyops","owner":"oaslananka","description":"Board-ready operations toolkit for governance evidence, release discipline, issue triage, security controls, and executive reporting across software delivery workflows.","archived":false,"fork":false,"pushed_at":"2026-05-28T17:46:46.000Z","size":9300,"stargazers_count":1,"open_issues_count":18,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T18:11:01.484Z","etag":null,"topics":["automation","ci-cd","compliance","evidence","github-actions","governance","issue-triage","operations","project-management","release-management","reporting","security","typescript"],"latest_commit_sha":null,"homepage":"https://github.com/oaslananka/boardreadyops","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oaslananka.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["oaslananka"],"buy_me_a_coffee":"oaslananka"}},"created_at":"2026-05-21T01:57:45.000Z","updated_at":"2026-05-28T16:20:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oaslananka/boardreadyops","commit_stats":null,"previous_names":["oaslananka/boardreadyops"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/oaslananka/boardreadyops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oaslananka%2Fboardreadyops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oaslananka%2Fboardreadyops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oaslananka%2Fboardreadyops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oaslananka%2Fboardreadyops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oaslananka","download_url":"https://codeload.github.com/oaslananka/boardreadyops/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oaslananka%2Fboardreadyops/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33681815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","ci-cd","compliance","evidence","github-actions","governance","issue-triage","operations","project-management","release-management","reporting","security","typescript"],"created_at":"2026-05-30T06:04:35.673Z","updated_at":"2026-05-30T06:04:38.961Z","avatar_url":"https://github.com/oaslananka.png","language":"TypeScript","funding_links":["https://github.com/sponsors/oaslananka","https://buymeacoffee.com/oaslananka"],"categories":[],"sub_categories":[],"readme":"# BoardReadyOps\n\nCI preflight for production-ready PCBs.\n\nBoardReadyOps checks KiCad hardware repositories for production readiness before fabrication. It runs locally as a CLI and in CI as a GitHub Action, producing JSON, SARIF, Markdown, HTML, JUnit, and workflow annotation output.\n\n[![CI](https://github.com/oaslananka/boardreadyops/actions/workflows/ci.yml/badge.svg)](https://github.com/oaslananka/boardreadyops/actions/workflows/ci.yml)\n[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-BoardReadyOps-blue?logo=github)](https://github.com/marketplace/actions/boardreadyops)\n[![npm](https://img.shields.io/npm/v/boardreadyops)](https://www.npmjs.com/package/boardreadyops)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/oaslananka/boardreadyops/badge)](https://scorecard.dev/viewer/?uri=github.com/oaslananka/boardreadyops)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n## Installation\n\n```bash\nnpm i -g boardreadyops\n```\n\nThe current public package is `boardreadyops@1.1.0` on npm. It is verified on\nNode.js 22 and 24, includes the current CLI bundle, schemas, docs, Action\nmetadata, and `kicad-plugin/`, and matches the public `v1.1.0` tag archive.\nThe `v1.1.0` GitHub Release also contains the binary asset matrix and\n`SHA256SUMS`; Homebrew checksum publication remains tracked in BOARD-63. See\n[release channel verification](docs/release/channel-verification.md) for the\ntested artifact list and remaining channel follow-ups.\n\n## Runtime Support\n\nBoardReadyOps supports Node.js 22 and 24. Node.js 24 is the recommended Active\nLTS runtime; Node.js 22 remains supported for Maintenance LTS users. Node.js 26\nCurrent is tracked but not supported in `engines.node` or CI until it reaches\nLTS and dependency validation is added.\n\nKiCad CLI compatibility is CI-tested on KiCad 9.0 and 10.0, with 10.0 as the\nrecommended stable line. The machine-readable policy and generated support\ntable live in [docs/support-matrix.md](docs/support-matrix.md).\n\n### Install Via Script\n\nLinux and macOS release binaries are installed with the checksum-verifying shell\ninstaller when the selected GitHub Release includes the matching binary asset\nand `SHA256SUMS`:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/oaslananka/boardreadyops/main/install.sh | sh\n```\n\nWindows x64 release binaries use the same release asset and checksum flow:\n\n```powershell\nirm https://raw.githubusercontent.com/oaslananka/boardreadyops/main/install.ps1 | iex\n```\n\nThe installers download the release asset plus `SHA256SUMS` before placing\n`boardreadyops` on the local command path. The public `v1.0.2` release currently\nhas no binary assets, so these installers return 404 for that tag. A Homebrew\nformula template for the same binary assets lives at `Formula/boardreadyops.rb`;\nit must be filled with release checksums from `SHA256SUMS` before publishing it\nthrough a tap. Treat the installer blocks above as post-BOARD-63 examples until\nthe release asset matrix lists binary files and checksums.\n\n## Quick Start\n\n```bash\nboardreadyops --help\nboardreadyops check . --fail-on never\n```\n\n`npx boardreadyops --help` also works when npm can resolve the package.\n\n## GitHub Action\n\n```yaml\nname: BoardReadyOps\n\non:\n  pull_request:\n  push:\n    branches: [main]\n\njobs:\n  boardreadyops:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: write\n      security-events: write\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: oaslananka/boardreadyops@41856e44bb2fc5def47a71072eccdad307301fc4 # v1.1.0\n        with:\n          config: boardreadyops.yml\n          mode: enforce\n          fail-on: high\n```\n\nSARIF upload requires `security-events: write`. Pull request comments require `pull-requests: write`.\n\nUse the full container action when a workflow should carry KiCad CLI inside the\nBoardReadyOps runtime instead of installing KiCad separately:\n\n```yaml\n      - uses: oaslananka/boardreadyops/apps/container@41856e44bb2fc5def47a71072eccdad307301fc4 # v1.1.0\n        with:\n          config: boardreadyops.yml\n          require-kicad: \"true\"\n          mode: enforce\n```\n\nThe same image can run as a CLI:\n\n```bash\ndocker run --rm ghcr.io/oaslananka/boardreadyops-full:v1 --help\n```\n\nThe `v1`, `v1.1.0`, and `latest` container tags currently resolve to OCI index\ndigest `sha256:5258e7de0e25382894c70164e990820f78a7fdfce92453932e2f75d51728934b`\nwith `linux/amd64` and `linux/arm64` manifests. Anonymous pull and a clean\ncontainer Action sample workflow remain tracked in BOARD-64.\n\n## CLI\n\n```bash\nboardreadyops run --json build/findings.json --sarif build/findings.sarif.json .\nboardreadyops check .\nboardreadyops check manufacturing.jobset-outputs .\nboardreadyops doctor\nboardreadyops schema config\n```\n\nThe npm package exposes the `boardreadyops` binary from the committed CLI bundle in `dist/cli/index.cjs`.\n\n## Configuration\n\nCreate `boardreadyops.yml`:\n\n```yaml\nversion: 1\nmode: warn\nprojects:\n  - path: .\n    pinmap: firmware/pins.yml\n    bom: bom/board.csv\n    variants:\n      - name: production\n        bom: bom/prod.csv\nrules:\n  bom.missing-mpn:\n    enabled: true\n    severity: high\n    ignore-refs: [\"TP*\", \"FID*\"]\n  bom.variant-consistency:\n    enabled: true\n  manufacturing.jobset-outputs:\n    enabled: true\n  manufacturing.outputs-present:\n    enabled: true\n    required: [gerber, drill, position, pdf]\nfail-on: high\nreport:\n  sarif: build/boardreadyops.sarif.json\n  json: build/boardreadyops.findings.json\n  markdown: build/boardreadyops.report.md\n  html: build/boardreadyops.report.html\n```\n\nThe config schema is committed at `schemas/config.schema.json`.\n\n## Supported Checks\n\n- KiCad DRC and ERC report normalization.\n- BOM completeness, lifecycle, DNP consistency, variant consistency, and footprint mismatch checks.\n- Pinmap format, collision, unmapped pin, and net label checks.\n- Manufacturing output, drill coverage, fab note, panel sanity, layer stackup, and jobset checks.\n- Design outline and copper balance checks.\n- Release revision, version format, tag, and changelog checks.\n\n## Local Development\n\n```bash\ncorepack pnpm install --frozen-lockfile\ncorepack pnpm run lint\ncorepack pnpm run typecheck\ncorepack pnpm run test\ncorepack pnpm run build\ncorepack pnpm run verify:dist\ncorepack pnpm run docs\n```\n\nThe repository intentionally versions `dist/action/index.cjs` and `dist/cli/index.cjs` so the GitHub Action and npm package can run without a consumer build step.\n\n## Links\n\n- Repository: \u003chttps://github.com/oaslananka/boardreadyops\u003e\n- Issues: \u003chttps://github.com/oaslananka/boardreadyops/issues\u003e\n- Security advisories: \u003chttps://github.com/oaslananka/boardreadyops/security/advisories/new\u003e\n\n## License\n\nMIT. Third-party notices are generated in `NOTICE`. The full container image\nredistributes KiCad under GPL terms and preserves the KiCad license text inside\nthe image.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foaslananka%2Fboardreadyops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foaslananka%2Fboardreadyops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foaslananka%2Fboardreadyops/lists"}