Improve viewing/tracking license exceptions#1294
Open
Conversation
- Create JSON Schema (draft 2020-12) defining the structure for all exception data - Add initial empty exceptions.json as the new source of truth - Schema supports blanket exceptions (e.g., eBPF/GPL) and individual package exceptions - Includes metadata like requesting project, approval date, issue URL Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Add migration script that consolidates CSV and JSON data sources - Migrate 467 unique exception entries from legacy files - Add blanket eBPF/GPL exception to blanketExceptions array - Extract approval dates from comments and determine status - Deduplicate entries by package name - Sort by date (newest first), then by package name Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Add generate-csv.js for CSV format with proper field escaping - Add generate-spdx.js for SPDX 2.1 tag-value format - Add generate-all.js to run both generators - Regenerate CSV (467 entries) and SPDX files from exceptions.json Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Create index.html with filters, table, and blanket exceptions display - Create styles.css with CNCF branding and responsive design - Create app.js with client-side filtering, sorting, and CSV export - Support filtering by package name, license, status, and year - Support sorting by date, package name, or license - Auto-link github.com packages to their URLs - Display blanket exceptions (eBPF/GPL) as cards Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Deploy on push to main when license-exceptions/ changes - Generate CSV/SPDX before deployment - Copy site files and data files to _site - Use GitHub's official pages actions (v3/v4) Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Add link to searchable exceptions database - Document data files and their purposes - Add maintainer instructions for updating data - Document JSON schema and status values - Keep blanket eBPF/GPL exception info Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Parse issue body to extract project name and components - Check for duplicate packages against exceptions.json - Add needs-review label to all new issues - Add possible-duplicate label when components already have exceptions - Post triage comment with summary and links Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Trigger on 'approved' label added to issue
- Parse issue body to extract components and project
- Generate unique IDs for each exception
- Update exceptions.json and regenerate CSV/SPDX
- Create PR with branch license-exception-{issue_number}
- Comment on issue with PR link
Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Validate JSON against schema using ajv-cli - Check for duplicate exception IDs - Verify CSV and SPDX files are in sync with JSON - Validate required fields and status enum values Signed-off-by: Jeffrey Sica <me@jeefy.dev>
Add a section directing users to check the searchable exceptions database before submitting a new request to reduce duplicates. Signed-off-by: Jeffrey Sica <me@jeefy.dev>
- Add Playwright E2E testing with 30 tests covering: - Page loading and data display - Search and filter functionality - Column sorting (clickable headers) - Download functionality (CSV/JSON) - Navigation between pages - Footer metadata - Add blanket exceptions as separate page with card layout - Add navigation bar to switch between package and blanket exceptions - Add scope and results fields to exception schema - Enhance search to query all fields - Add clickable column headers for sorting - Add GitHub Actions workflow for E2E tests on PRs - Integrate E2E tests into deploy workflow (tests must pass before deploy) - Update deploy to serve site at /license-exceptions/ path Signed-off-by: Jeffrey Sica <me@jeefy.dev>
cbcb09f to
c194889
Compare
The Created timestamp was using current time, causing CI validation to fail because regenerated files always differed. Now uses noon UTC on the lastUpdated date for reproducible output. Signed-off-by: Jeffrey Sica <me@jeefy.dev>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR centralizes CNCF license exception data into a single exceptions.json, adds generators/validators for derived formats, and introduces a small static site (plus Playwright E2E tests) to browse/search/filter and download exception data.
Changes:
- Add a static browsing UI for package + blanket exceptions with search/filter/sort and downloads.
- Add Node scripts to migrate legacy sources and generate CSV/SPDX outputs from
exceptions.json, plus schema validation. - Add GitHub Actions workflows for validation, triage/approval automation, E2E testing, and GitHub Pages deployment.
Reviewed changes
Copilot reviewed 23 out of 26 changed files in this pull request and generated 17 comments.
Show a summary per file
| File | Description |
|---|---|
| license-exceptions/tests/package-exceptions.spec.js | Adds Playwright E2E coverage for the package exceptions UI. |
| license-exceptions/tests/blanket-exceptions.spec.js | Adds Playwright E2E coverage for the blanket exceptions UI. |
| license-exceptions/site/styles.css | Adds styling for the new static UI. |
| license-exceptions/site/index.html | New package exceptions page markup (filters/table/download links). |
| license-exceptions/site/blanket-exceptions.html | New blanket exceptions page markup (cards/download link). |
| license-exceptions/site/app.js | Client-side filtering/sorting/rendering + CSV download for package exceptions. |
| license-exceptions/site/blanket-app.js | Client-side rendering for blanket exceptions. |
| license-exceptions/scripts/migrate-data.js | Migration script to consolidate legacy CSV/JSON sources into exceptions.json. |
| license-exceptions/scripts/generate-spdx.js | Generates SPDX tag-value output from exceptions.json. |
| license-exceptions/scripts/generate-csv.js | Generates CSV output from exceptions.json. |
| license-exceptions/scripts/generate-all.js | Convenience wrapper to generate CSV + SPDX together. |
| license-exceptions/schema/exception.schema.json | JSON Schema for exceptions.json. |
| license-exceptions/playwright.config.js | Playwright configuration + local web server setup. |
| license-exceptions/package.json | Adds Playwright/serve tooling and scripts for tests/generation. |
| license-exceptions/package-lock.json | Locks Node dependencies for the new tooling. |
| license-exceptions/README.md | Updates documentation for the new source-of-truth and browsing UI. |
| license-exceptions/CNCF-licensing-exceptions.csv | Regenerated CSV output from the unified data source. |
| license-exceptions/.gitignore | Ignores Node/Playwright artifacts. |
| .github/workflows/validate-exceptions.yml | Validates schema + generated-file sync on PRs touching exceptions/schema. |
| .github/workflows/license-exception-triage.yml | Automates issue triage/duplicate detection for licensing-labeled issues. |
| .github/workflows/license-exception-approved.yml | Automates PR creation when an issue is labeled “approved”. |
| .github/workflows/e2e-license-site.yml | Runs Playwright E2E tests on relevant PR changes. |
| .github/workflows/deploy-license-site.yml | Builds and deploys the site + data artifacts to GitHub Pages on main. |
| .github/ISSUE_TEMPLATE/license-exception-request.yaml | Adds a “check existing exceptions” prompt linking to the new UI. |
Files not reviewed (1)
- license-exceptions/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Jeffrey Sica <jeef111x@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Jeffrey Sica <jeef111x@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Jeffrey Sica <jeef111x@gmail.com>
Fixed typo '20212-04-12' -> '2022-04-12' in 5 exception comments. Signed-off-by: Jeffrey Sica <me@jeefy.dev>
Member
Author
|
HOLD for more revving :) |
…fill data - Add Project column to site UI with filter and sorting support - Add 'denied' status for rejected exception requests (e.g., Liquibase FSL) - Move blanket exceptions to main table with project='All CNCF Projects' - Backfill ~20 exception entries from GitHub issues with scope/results/project - Update GHA workflow to capture scope field and handle denied labels - Update CSV/SPDX generators with new columns (Project, Scope, Status) - Remove top-level nav from main page (blanket exceptions now in main table) - Update README with new field documentation and blanket exception details - Fix tests for removed navigation and improve data loading reliability - Add pretest/posttest hooks to copy exceptions.json for test server Signed-off-by: Jeffrey Sica <me@jeefy.dev>
4c8b973 to
358aa8a
Compare
Signed-off-by: Jeffrey Sica <me@jeefy.dev>
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

exceptions.cncf.ioAny progress here is good progress IMO.