mirror of
https://github.com/NexusOne23/noid-privacy.git
synced 2026-02-07 12:11:53 +01:00
v2.2.0 - Complete Security Hardening Framework (632 Settings)
This commit is contained in:
commit
ba364813ed
195 changed files with 43788 additions and 0 deletions
226
.github/workflows/ci.yml
vendored
Normal file
226
.github/workflows/ci.yml
vendored
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
name: CI - PowerShell Quality Checks
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
checks: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
psscriptanalyzer:
|
||||
name: PSScriptAnalyzer
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Run PSScriptAnalyzer
|
||||
shell: pwsh
|
||||
run: |
|
||||
Write-Host "Installing PSScriptAnalyzer..."
|
||||
Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser -SkipPublisherCheck -ErrorAction Stop
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Running PSScriptAnalyzer (Errors only)..."
|
||||
$results = Invoke-ScriptAnalyzer -Path . -Recurse -Severity Error
|
||||
|
||||
if ($results) {
|
||||
Write-Host ""
|
||||
Write-Host "=== PSScriptAnalyzer Errors Found ===" -ForegroundColor Red
|
||||
$results | Format-Table -AutoSize
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Error Count: $($results.Count)" -ForegroundColor Red
|
||||
Write-Host "Failing CI due to errors" -ForegroundColor Red
|
||||
exit 1
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Host "No errors found! (Warnings are ignored)" -ForegroundColor Green
|
||||
}
|
||||
|
||||
test-powershell-51:
|
||||
name: Test on PowerShell 5.1
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Test PowerShell Scripts (5.1)
|
||||
shell: powershell
|
||||
run: |
|
||||
Write-Host "PowerShell Version: $($PSVersionTable.PSVersion)" -ForegroundColor Cyan
|
||||
Write-Host "Testing script syntax..."
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$failed = $false
|
||||
Get-ChildItem -Path . -Filter "*.ps1" -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
|
||||
Write-Host "Checking: $($_.Name)"
|
||||
try {
|
||||
$errors = $null
|
||||
$tokens = [System.Management.Automation.PSParser]::Tokenize((Get-Content $_.FullName -Raw), [ref]$errors)
|
||||
if ($errors.Count -gt 0) {
|
||||
Write-Host " [ERROR] $($errors[0].Message)" -ForegroundColor Red
|
||||
$failed = $true
|
||||
} else {
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
}
|
||||
} catch {
|
||||
Write-Host " [ERROR] $_" -ForegroundColor Red
|
||||
$failed = $true
|
||||
}
|
||||
}
|
||||
|
||||
if ($failed) {
|
||||
Write-Host ""
|
||||
Write-Host "Syntax check FAILED" -ForegroundColor Red
|
||||
exit 1
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Host "All scripts have valid syntax!" -ForegroundColor Green
|
||||
}
|
||||
|
||||
test-powershell-7:
|
||||
name: Test on PowerShell 7.4
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Test PowerShell Scripts (7.4)
|
||||
shell: pwsh
|
||||
run: |
|
||||
Write-Host "PowerShell Version: $($PSVersionTable.PSVersion)" -ForegroundColor Cyan
|
||||
Write-Host "Testing script syntax..."
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$failed = $false
|
||||
Get-ChildItem -Path . -Filter "*.ps1" -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
|
||||
Write-Host "Checking: $($_.Name)"
|
||||
try {
|
||||
$errors = $null
|
||||
$tokens = $null
|
||||
$ast = [System.Management.Automation.Language.Parser]::ParseFile($_.FullName, [ref]$tokens, [ref]$errors)
|
||||
if ($errors.Count -gt 0) {
|
||||
Write-Host " [ERROR] $($errors[0].Message)" -ForegroundColor Red
|
||||
$failed = $true
|
||||
} else {
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
}
|
||||
} catch {
|
||||
Write-Host " [ERROR] $_" -ForegroundColor Red
|
||||
$failed = $true
|
||||
}
|
||||
}
|
||||
|
||||
if ($failed) {
|
||||
Write-Host ""
|
||||
Write-Host "Syntax check FAILED" -ForegroundColor Red
|
||||
exit 1
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Host "All scripts have valid syntax!" -ForegroundColor Green
|
||||
}
|
||||
|
||||
validate-structure:
|
||||
name: Validate Project Structure
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Check Required Files
|
||||
shell: pwsh
|
||||
run: |
|
||||
Write-Host "Checking project structure..." -ForegroundColor Cyan
|
||||
|
||||
$required = @(
|
||||
"README.md",
|
||||
"LICENSE",
|
||||
"CHANGELOG.md",
|
||||
"NoIDPrivacy-Interactive.ps1",
|
||||
"Core/Framework.ps1",
|
||||
"Modules",
|
||||
"Tools"
|
||||
)
|
||||
|
||||
$missing = @()
|
||||
foreach ($item in $required) {
|
||||
if (Test-Path $item) {
|
||||
Write-Host "[OK] $item" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "[MISSING] $item" -ForegroundColor Red
|
||||
$missing += $item
|
||||
}
|
||||
}
|
||||
|
||||
if ($missing.Count -gt 0) {
|
||||
Write-Host ""
|
||||
Write-Host "Missing required files/folders!" -ForegroundColor Red
|
||||
exit 1
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Host "All required files present!" -ForegroundColor Green
|
||||
}
|
||||
|
||||
- name: Check Module Structure
|
||||
shell: pwsh
|
||||
run: |
|
||||
Write-Host "`nValidating module structure..." -ForegroundColor Cyan
|
||||
|
||||
$modules = @(
|
||||
"SecurityBaseline",
|
||||
"ASR",
|
||||
"DNS",
|
||||
"Privacy",
|
||||
"AntiAI",
|
||||
"EdgeHardening",
|
||||
"AdvancedSecurity"
|
||||
)
|
||||
|
||||
$failed = $false
|
||||
foreach ($module in $modules) {
|
||||
$modulePath = "Modules/$module"
|
||||
if (Test-Path $modulePath) {
|
||||
Write-Host "[OK] Module: $module" -ForegroundColor Green
|
||||
|
||||
# Check for required module files
|
||||
$moduleFile = "$modulePath/$module.psm1"
|
||||
$manifestFile = "$modulePath/$module.psd1"
|
||||
|
||||
if (Test-Path $moduleFile) {
|
||||
Write-Host " [OK] $module.psm1" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " [MISSING] $module.psm1" -ForegroundColor Red
|
||||
$failed = $true
|
||||
}
|
||||
|
||||
if (Test-Path $manifestFile) {
|
||||
Write-Host " [OK] $module.psd1" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " [MISSING] $module.psd1" -ForegroundColor Red
|
||||
$failed = $true
|
||||
}
|
||||
} else {
|
||||
Write-Host "[MISSING] Module: $module" -ForegroundColor Red
|
||||
$failed = $true
|
||||
}
|
||||
}
|
||||
|
||||
if ($failed) {
|
||||
Write-Host ""
|
||||
Write-Host "Module structure validation FAILED!" -ForegroundColor Red
|
||||
exit 1
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Host "All modules are correctly structured!" -ForegroundColor Green
|
||||
}
|
||||
71
.github/workflows/pester-tests.yml
vendored
Normal file
71
.github/workflows/pester-tests.yml
vendored
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
name: Pester Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Pester
|
||||
shell: pwsh
|
||||
run: |
|
||||
Install-Module -Name Pester -Force -SkipPublisherCheck -Scope CurrentUser
|
||||
Import-Module Pester
|
||||
|
||||
- name: Run Unit Tests
|
||||
shell: pwsh
|
||||
run: |
|
||||
$config = New-PesterConfiguration
|
||||
$config.Run.Path = "Tests/Unit"
|
||||
$config.Run.PassThru = $true
|
||||
$config.Output.Verbosity = 'Detailed'
|
||||
$config.TestResult.Enabled = $true
|
||||
$config.TestResult.OutputPath = "TestResults-Unit.xml"
|
||||
$config.TestResult.OutputFormat = 'NUnitXml'
|
||||
|
||||
$results = Invoke-Pester -Configuration $config
|
||||
|
||||
if ($results.FailedCount -gt 0) {
|
||||
Write-Error "Unit tests failed: $($results.FailedCount) failures"
|
||||
exit 1
|
||||
}
|
||||
|
||||
- name: Run Integration Tests (DryRun only)
|
||||
shell: pwsh
|
||||
run: |
|
||||
$config = New-PesterConfiguration
|
||||
$config.Run.Path = "Tests/Integration"
|
||||
$config.Run.PassThru = $true
|
||||
$config.Output.Verbosity = 'Detailed'
|
||||
$config.TestResult.Enabled = $true
|
||||
$config.TestResult.OutputPath = "TestResults-Integration.xml"
|
||||
$config.TestResult.OutputFormat = 'NUnitXml'
|
||||
|
||||
$results = Invoke-Pester -Configuration $config
|
||||
|
||||
if ($results.FailedCount -gt 0) {
|
||||
Write-Error "Integration tests failed: $($results.FailedCount) failures"
|
||||
exit 1
|
||||
}
|
||||
|
||||
- name: Upload Test Results
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: test-results
|
||||
path: TestResults-*.xml
|
||||
|
||||
- name: Publish Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action/windows@v2
|
||||
if: always()
|
||||
with:
|
||||
files: TestResults-*.xml
|
||||
Loading…
Add table
Add a link
Reference in a new issue