Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
da08fbe
Rewrite public README for ARSVIN suite
masarray Jul 10, 2026
286b25a
Harden build script exit handling
masarray Jul 10, 2026
97566f0
Add portable EXE and installer release automation
masarray Jul 10, 2026
0e9649f
Add repeatable release packaging script
masarray Jul 10, 2026
425ccb8
Keep portable publish wrapper compatible
masarray Jul 10, 2026
81a81c4
Add ARSVIN Suite Inno Setup installer
masarray Jul 10, 2026
9c37f54
Document portable and installer release process
masarray Jul 10, 2026
acf880a
Redesign public landing page for ARSVIN suite
masarray Jul 10, 2026
e33eb43
Apply compact responsive landing page design
masarray Jul 10, 2026
18e46b3
Refresh sitemap metadata
masarray Jul 10, 2026
7872285
Align web manifest with ARSVIN suite
masarray Jul 10, 2026
9080c88
Align contribution guide with Publisher and Subscriber suite
masarray Jul 10, 2026
dfcb42c
Build Publisher and Subscriber in CI
masarray Jul 10, 2026
a724b96
Update Apache notice for ARSVIN suite
masarray Jul 10, 2026
c637e90
Align third-party notices with suite distribution
masarray Jul 10, 2026
ec5b696
Expand quick start for installer, Publisher, and Subscriber
masarray Jul 10, 2026
91e096b
Organize documentation for Publisher and Subscriber workflows
masarray Jul 10, 2026
2a48888
Update GitHub metadata and release settings guide
masarray Jul 10, 2026
a07eae8
Add optimized real application screenshots
masarray Jul 11, 2026
09b2000
Show real ARSVIN interfaces in README
masarray Jul 11, 2026
0eb0561
Use real ARSVIN screenshots on product site
masarray Jul 11, 2026
ff703e8
Merge main and resolve GitHub Actions conflicts
masarray Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,26 @@ jobs:
with:
dotnet-version: 8.0.x

- name: Restore app
- name: Restore Publisher
run: dotnet restore src/ARSVIN/ARSVIN.csproj

- name: Restore Subscriber
run: dotnet restore src/ARSVIN.Subscriber/ARSVIN.Subscriber.csproj

- name: Restore tests
run: dotnet restore tests/ARSVIN.Tests/ARSVIN.Tests.csproj

- name: Build app
- name: Build Publisher
run: dotnet build src/ARSVIN/ARSVIN.csproj -c Release --no-restore

- name: Build Subscriber
run: dotnet build src/ARSVIN.Subscriber/ARSVIN.Subscriber.csproj -c Release --no-restore

- name: Test
run: dotnet test tests/ARSVIN.Tests/ARSVIN.Tests.csproj -c Release --no-restore --logger trx

- name: Dependency vulnerability report
- name: Publisher dependency vulnerability report
run: dotnet list src/ARSVIN/ARSVIN.csproj package --vulnerable --include-transitive

- name: Subscriber dependency vulnerability report
run: dotnet list src/ARSVIN.Subscriber/ARSVIN.Subscriber.csproj package --vulnerable --include-transitive
121 changes: 111 additions & 10 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,32 @@
name: Release Portable Windows EXE
name: Build Windows Release

on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
inputs:
version:
description: 'Version used for manual artifact builds (for example 0.3.0)'
required: false
default: '0.0.0-dev'

permissions:
contents: write

concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false

env:
DOTNET_CLI_TELEMETRY_OPTOUT: '1'
DOTNET_NOLOGO: '1'

jobs:
publish:
name: Publish win-x64 portable package
release:
name: Portable EXEs and installer
runs-on: windows-latest

steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -21,24 +35,111 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
cache: true
cache-dependency-path: |
**/*.csproj
Directory.Packages.props

- name: Resolve version
id: version
shell: pwsh
run: |
if ('${{ github.ref_type }}' -eq 'tag') {
$version = '${{ github.ref_name }}' -replace '^[vV]', ''
}
else {
$version = '${{ inputs.version }}'
if ([string]::IsNullOrWhiteSpace($version)) {
$version = '0.0.0-dev'
}
$version = $version -replace '^[vV]', ''
}

if ($version -notmatch '^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$') {
throw "Unsupported release version: $version"
}

"value=$version" >> $env:GITHUB_OUTPUT
Write-Host "Release version: $version"

- name: Build and test
shell: pwsh
run: .\build.ps1

- name: Publish portable ZIP
- name: Publish single-file portable applications
shell: pwsh
run: .\publish-win-x64.ps1
run: .\scripts\publish-release.ps1 -Version '${{ steps.version.outputs.value }}' -SkipTests

- name: Install Inno Setup
shell: pwsh
run: choco install innosetup --no-progress -y

- name: Build Windows installer
shell: pwsh
run: |
$iscc = @(
"${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe",
"${env:ProgramFiles}\Inno Setup 6\ISCC.exe"
) | Where-Object { Test-Path $_ } | Select-Object -First 1

if (-not $iscc) {
throw 'Inno Setup compiler (ISCC.exe) was not found.'
}

$sourceDir = (Resolve-Path '.\artifacts\installer-input').Path
$outputDir = (Resolve-Path '.\artifacts\release').Path
$version = '${{ steps.version.outputs.value }}'

& $iscc `
"/DMyAppVersion=$version" `
"/DSourceDir=$sourceDir" `
"/DOutputDir=$outputDir" `
'.\installer\ARSVIN.iss'

if ($LASTEXITCODE -ne 0) {
throw "Inno Setup failed with exit code $LASTEXITCODE."
}

- name: Generate SHA-256 checksums
shell: pwsh
run: |
$releaseRoot = Resolve-Path '.\artifacts\release'
$lines = Get-ChildItem $releaseRoot -File |
Where-Object { $_.Name -ne 'SHA256SUMS.txt' } |
Sort-Object Name |
ForEach-Object {
$hash = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
"$hash $($_.Name)"
}

[System.IO.File]::WriteAllLines(
(Join-Path $releaseRoot 'SHA256SUMS.txt'),
$lines,
[System.Text.UTF8Encoding]::new($false)
)

Get-Content (Join-Path $releaseRoot 'SHA256SUMS.txt')

- name: Upload workflow artifact
- name: Upload release workflow artifact
uses: actions/upload-artifact@v4
with:
name: ARSVIN-win-x64-portable
path: artifacts/ARSVIN-win-x64-portable.zip
name: ARSVIN-${{ steps.version.outputs.value }}-windows-x64
path: |
artifacts/release/*.exe
artifacts/release/*.zip
artifacts/release/SHA256SUMS.txt
if-no-files-found: error
retention-days: 30

- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
if: github.ref_type == 'tag'
uses: softprops/action-gh-release@v3
with:
files: artifacts/ARSVIN-win-x64-portable.zip
generate_release_notes: true
fail_on_unmatched_files: true
files: |
artifacts/release/ARSVIN-Publisher-win-x64.exe
artifacts/release/ArSubsv-Subscriber-win-x64.exe
artifacts/release/ARSVIN-Suite-Setup-win-x64.exe
artifacts/release/ARSVIN-win-x64-portable.zip
artifacts/release/SHA256SUMS.txt
21 changes: 11 additions & 10 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

Thank you for considering a contribution to ARSVIN.

ARSVIN is an engineering tool for IEC 61850 Sampled Values lab publishing. The project values clear code, cautious live-network behavior, reproducible test notes, and documentation that an engineer can use in the field.
ARSVIN is an engineering suite for IEC 61850 Sampled Values laboratory workflows. The project values clear code, cautious live-network behavior, reproducible test notes, and documentation that an engineer can use in the field.

## Project principles

- Keep the product focused on SV publishing and relay readability checks.
- Do not turn ARSVIN into a general protocol analyzer unless the feature directly improves publishing safety or setup correctness.
- Keep live packet injection guarded, visible, and clearly labelled.
- Keep Publisher and Subscriber responsibilities explicit and independently testable.
- Add analysis features only when they improve Sampled Values visibility, interoperability, troubleshooting, or evidence quality.
- Keep live packet capture and injection guarded, visible, and clearly labelled.
- Preserve Apache-2.0 compatibility.
- Prefer explicit engineering wording over marketing claims.
- Update documentation when behavior, UI, safety assumptions, or release packaging changes.
Expand All @@ -20,7 +20,7 @@ Recommended environment:
- Windows 10/11 x64
- .NET 8 SDK
- PowerShell 7+
- Npcap for live packet publishing tests
- Npcap for live packet capture/publishing tests
- Wireshark for packet inspection

Build:
Expand All @@ -35,18 +35,18 @@ Run tests:
dotnet test tests/ARSVIN.Tests/ARSVIN.Tests.csproj -c Release
```

Create a portable package:
Create portable release artifacts:

```powershell
.\publish-win-x64.ps1
.\scripts\publish-release.ps1 -Version 0.1.0
```

## Pull request checklist

Before opening a PR, please check:

- The change has a narrow engineering purpose.
- The app builds in Release mode.
- Both affected applications build in Release mode.
- Relevant unit tests were added or updated where practical.
- Safety behavior is not weakened.
- Docs are updated for user-visible changes.
Expand All @@ -68,12 +68,13 @@ Document smpSynch compatibility mode
Use GitHub Issues and include:

- ARSVIN version or commit
- Application: Publisher or ArSubsv Subscriber
- Windows version
- Npcap version
- SCL/COMTRADE sample if shareable
- SCL/COMTRADE/PCAP sample if shareable
- Steps to reproduce
- Expected behavior
- Actual behavior
- Screenshots or Wireshark capture notes when relevant

Do not upload confidential station SCL files, relay IP plans, or production network captures.
Do not upload confidential station SCL files, relay IP plans, credentials, or production network captures.
7 changes: 5 additions & 2 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
ARSVIN - IEC 61850 Sampled Values Publisher & Process Bus Traffic Tester
ARSVIN - IEC 61850 Sampled Values Engineering Suite
Copyright 2026 Ari Sulistiono

Licensed under the Apache License, Version 2.0.

Author: Ari Sulistiono
GitHub: https://github.com/masarray
Project: https://github.com/masarray/arsvin

ARSVIN can transmit raw Ethernet frames and is intended only for isolated lab networks, point-to-point engineering tests, and educational use.
ARSVIN includes a Sampled Values Publisher and the ArSubsv Subscriber companion. The software can capture and transmit raw Ethernet frames and is intended only for isolated laboratory networks, authorized point-to-point engineering tests, development, troubleshooting support, and education.

ARSVIN is not a certified IEC 61850 conformance tool, calibrated merging unit, protection test set, deterministic real-time platform, or production process-bus monitoring system.
Loading
Loading