diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5cce5c5..7358e32 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -87,6 +87,8 @@ jobs: - name: Generate release checksums shell: bash + env: + VERSION: ${{ needs.version.outputs.version }} run: | mapfile -t files < <(find release-assets -type f -name '*.zip' | sort) if [ "${#files[@]}" -eq 0 ]; then @@ -94,8 +96,27 @@ jobs: exit 1 fi + timestamp="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" + sbom_file="release-assets/MarkdownTableEditorIdea-$VERSION-sbom.cdx.json" + cat > "$sbom_file" <&2 exit 1 @@ -126,6 +152,7 @@ jobs: ## Builds / Downloads - [MarkdownTableEditorIdea-$VERSION.zip](https://github.com/krotname/IdeaMarkdownTableEditor/releases/download/v$VERSION/MarkdownTableEditorIdea-$VERSION.zip) + - [MarkdownTableEditorIdea-$VERSION-sbom.cdx.json](https://github.com/krotname/IdeaMarkdownTableEditor/releases/download/v$VERSION/MarkdownTableEditorIdea-$VERSION-sbom.cdx.json) - [SHA256SUMS.txt](https://github.com/krotname/IdeaMarkdownTableEditor/releases/download/v$VERSION/SHA256SUMS.txt) - [MARKETPLACE_SUBMISSION.md](https://github.com/krotname/IdeaMarkdownTableEditor/releases/download/v$VERSION/MARKETPLACE_SUBMISSION.md) @@ -133,7 +160,7 @@ jobs: - Hardened GitHub Actions permissions, dependency review, CodeQL, Scorecard, and release checks after repository audit. - Refreshed the Gradle wrapper and build baseline used for the JetBrains IDE plugin package. - - Rebuilt the plugin ZIP with SHA-256 sums and provenance-ready release assets. + - Rebuilt the plugin ZIP with SHA-256 sums, SBOM, and GitHub attestations. ## Validation diff --git a/README.en.md b/README.en.md index f2aafb8..d7d17c6 100644 --- a/README.en.md +++ b/README.en.md @@ -64,6 +64,16 @@ The GIF is built from real JetBrains IDE screenshots on Windows: a regular `.md` The plugin is packaged as a dynamic plugin and is designed to install without restarting compatible JetBrains IDEs. If the IDE asks for a restart, the platform has detected a loading or unloading limitation in the current session. +## Release Verification + +Each GitHub release publishes the plugin ZIP, `MARKETPLACE_SUBMISSION.md`, +`SHA256SUMS.txt`, CycloneDX SBOM, and GitHub attestations. + +```bash +sha256sum -c SHA256SUMS.txt +gh attestation verify MarkdownTableEditorIdea-*.zip --repo krotname/IdeaMarkdownTableEditor +``` + ## Compatibility The plugin is built with Java 17 bytecode and declares compatibility with IntelliJ Platform `223+` without an `until-build` upper bound. diff --git a/README.md b/README.md index fdb2a58..ceafe3c 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,16 @@ GIF собран из реальных скриншотов IDE JetBrains под Плагин собран как dynamic plugin и рассчитан на установку без перезапуска IDE в совместимых версиях продуктов JetBrains. Если сама IDE попросит перезапуск, значит платформа обнаружила ограничение загрузки или выгрузки в текущей сессии. +## Проверка Релиза + +Каждый GitHub release публикует plugin ZIP, `MARKETPLACE_SUBMISSION.md`, +`SHA256SUMS.txt`, CycloneDX SBOM и GitHub attestations. + +```bash +sha256sum -c SHA256SUMS.txt +gh attestation verify MarkdownTableEditorIdea-*.zip --repo krotname/IdeaMarkdownTableEditor +``` + ## Совместимость Плагин собран в bytecode Java 17 и заявляет совместимость с IntelliJ Platform `223+` без верхней границы `until-build`. diff --git a/SECURITY.md b/SECURITY.md index 06e86f7..5b1b64e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -20,3 +20,9 @@ Include: - suggested mitigation if available. The maintainer aims to acknowledge valid reports within 48 hours and provide a remediation timeline after the impact is confirmed. + +## Supply-chain controls + +- Release packages include the plugin ZIP, `MARKETPLACE_SUBMISSION.md`, `SHA256SUMS.txt`, CycloneDX SBOM, and GitHub attestations. +- GitHub Actions are pinned by immutable commit SHA. +- Dependency Review, CodeQL, Scorecard, and actionlint run as repository quality gates.