ARSVIN uses tag-driven GitHub Actions to build two self-contained applications, a suite installer, a portable ZIP, a CycloneDX SBOM, SHA-256 checksums, and GitHub artifact attestations.
Local source builds require Windows 10 or Windows 11 x64, .NET 8 SDK feature band 8.0.4xx, and PowerShell 7+ recommended. Reproducing the installer also requires Inno Setup 6.7.1.
Npcap is required only for authorized live capture or transmission tests. It is not bundled or silently installed.
Before restore, build, site publication, or release packaging, run:
python scripts/verify-current-license.py
python scripts/validate-public-neutrality.pyThe first command verifies:
- GNU GPL version 3 as the current root license;
GPL-3.0-or-laterproject metadata;- historical Apache boundary documentation without an active dual-license presentation;
- commercial-notice wording that grants no rights by itself;
- required copyright, trademark, CLA, DCO, provenance, and third-party files; and
- current README, site, installer, and packaging markers.
The second command rejects prohibited external-product comparison terms from public content.
Package versions are centrally managed in Directory.Packages.props. Every project commits packages.lock.json so the resolved graph is reviewable and reproducible.
dotnet restore ARSVIN.sln --locked-modeA deliberate dependency update uses:
dotnet restore ARSVIN.sln --force-evaluateReview direct and transitive changes, licenses, vulnerability output, and lock-file integrity. Do not hand-edit lock files.
.\build.ps1The build script:
- verifies current licensing, provenance, and public wording;
- validates public terminology neutrality;
- restores the locked dependency graph;
- builds Publisher and Subscriber with warnings as errors; and
- runs deterministic tests.
Publisher, Subscriber, and Tests reference the same ARSVIN.Engine assembly. Protocol parsing, Sampled Values behavior, SCL handling, profile observations, comparison logic, capture, and transport code remain owned by the shared engine project.
.\scripts\test-with-coverage.ps1 -MinimumWholeEngineLineCoverage 14.25 -MinimumLineCoverage 72.5The coverage workflow retains TRX, full test logs, and Cobertura output under artifacts/test-results, then enforces whole-engine and protocol-core regression floors.
The documented baseline contains 88 deterministic tests. Whole-engine coverage is 14.61% with 2,423 of 16,582 lines covered, and protocol-core coverage is 72.76% with 1,739 of 2,390 lines covered. CI enforces floors of 14.25% and 72.5%. These values are regression evidence, not formal conformance, complete live-network validation, deterministic timing evidence, or universal device-interoperability evidence.
python scripts/build-public-site.py --output artifacts/public-site
.\scripts\validate-public-site.ps1 -SiteRoot artifacts/public-siteThe site validator checks:
- one H1 per page;
- meta descriptions and canonical URLs;
- canonical uniqueness;
- valid JSON-LD;
- local links and assets;
- documentation search-index targets;
- sitemap coverage;
- web-manifest icons;
- required release filenames; and
- sitemap metadata in
robots.txt.
Generated documentation pages identify GPL-3.0-or-later as the current community license and link to the separate commercial path without presenting it as an automatically granted alternative.
.\scripts\publish-release.ps1 -Version 0.4.0Compatibility wrapper:
.\publish-win-x64.ps1 -Version 0.4.0Generated portable files:
artifacts/release/
├── ARSVIN-Publisher-win-x64.exe
├── ArSubsv-Subscriber-win-x64.exe
└── ARSVIN-win-x64-portable.zip
Installer staging is created under artifacts/installer-input/.
The portable ZIP and installer staging include:
README.md
LICENSE.txt
NOTICE.txt
COMMERCIAL-LICENSE.md
COPYRIGHT.md
TRADEMARK.md
THIRD_PARTY_NOTICES.md
docs/LICENSING.md
LICENSE.txt must contain GNU GPL version 3. A historical Apache license file must not be included in a current GPL package.
After restoring the solution:
.\scripts\generate-sbom.ps1 -Version 0.4.0Output:
artifacts/release/ARSVIN-SBOM.cdx.json
The CycloneDX 1.5 SBOM records locked managed runtime dependencies used by Publisher and Subscriber. It does not claim to inventory Windows, separately installed Npcap, hosted-runner contents, or every build-service component.
After publishing the applications:
$version = '0.4.0'
$sourceDir = (Resolve-Path '.\artifacts\installer-input').Path
$outputDir = (Resolve-Path '.\artifacts\release').Path
$iscc = "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe"
& $iscc `
"/DMyAppVersion=$version" `
"/DSourceDir=$sourceDir" `
"/DOutputDir=$outputDir" `
'.\installer\ARSVIN.iss'The installer is per-user, contains Publisher and Subscriber, includes current legal and documentation files, creates Start Menu shortcuts, supports silent install and uninstall validation, and informs the user when Npcap is not detected.
Workflow: .github/workflows/release.yml
When release tooling or application inputs change, the workflow:
- runs the licensing and wording gate through
build.ps1; - restores, builds, and tests;
- publishes both portable applications;
- creates the portable suite ZIP;
- installs pinned installer tooling;
- compiles and smoke-tests the installer;
- generates and validates the SBOM;
- validates artifact names and non-empty files;
- generates checksums; and
- uploads a private workflow artifact.
A pull-request run does not create a public GitHub Release or public attestation.
A release is created only by pushing a semantic-version tag whose commit is already contained in main:
git switch main
git pull --ff-only origin main
git tag -a v0.4.0 -m "ARSVIN v0.4.0"
git push origin v0.4.0Published releases are immutable in automation. Corrections require a new semantic-version patch.
Prerelease suffixes such as v0.5.0-rc.1 produce prereleases without replacing the latest stable release. Manual workflow dispatch produces private workflow artifacts only.
| File | Description |
|---|---|
ARSVIN-Publisher-win-x64.exe |
Portable Publisher. |
ArSubsv-Subscriber-win-x64.exe |
Portable Subscriber. |
ARSVIN-Suite-Setup-win-x64.exe |
Installer for both applications. |
ARSVIN-win-x64-portable.zip |
Portable suite package. |
ARSVIN-SBOM.cdx.json |
CycloneDX managed runtime-dependency SBOM. |
SHA256SUMS.txt |
Integrity hashes for release assets. |
Get-FileHash .\ARSVIN-Suite-Setup-win-x64.exe -Algorithm SHA256
gh attestation verify .\ARSVIN-Suite-Setup-win-x64.exe --repo masarray/arsvinChecksums verify file integrity against the same release. Artifact attestations verify repository and workflow provenance. Neither is Windows Authenticode signing.
Release binaries are currently unsigned. Windows SmartScreen may show an unknown-publisher warning. When a trusted certificate and operating process are available, sign the portable executables before installer compilation and sign the completed installer before checksum generation.
- Confirm the intended commit is on
main. - Confirm CI, CodeQL, Pages validation, and release validation are green.
- Update
VersionPrefix,CHANGELOG.md, and release notes. - Review dependency locks, SBOM, checksums, legal notices, and package contents.
- Confirm no release already exists for the tag.
- Test Publisher dry run and Subscriber PCAP import.
- Use authorized isolated links for any live test.
- Use a new patch version for any correction to an existing release.