diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13abdea..a28e5e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,25 +25,25 @@ jobs: runs-on: windows-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - name: Setup .NET 8 SDK - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 with: dotnet-version: '8.0.x' - name: Setup MSBuild - uses: microsoft/setup-msbuild@v2 + uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2 - name: Setup NuGet - uses: nuget/setup-nuget@v2 + uses: nuget/setup-nuget@d105a947828025cd7a980103c35ba2bfae586d0f # v2 - name: Build all projects shell: pwsh - run: ./pipeline-scripts/build.ps1 + run: ./build/build.ps1 - name: Upload build artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: build-output path: | @@ -60,31 +60,31 @@ jobs: needs: build steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - name: Setup .NET 8 SDK - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 with: dotnet-version: '8.0.x' - name: Setup MSBuild - uses: microsoft/setup-msbuild@v2 + uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2 - name: Download build artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: build-output - name: Install dotnet-coverage shell: pwsh - run: dotnet tool install --global dotnet-coverage + run: dotnet tool install --global dotnet-coverage --version 18.5.2 - name: Run tests with coverage shell: pwsh - run: ./pipeline-scripts/run-tests.ps1 + run: ./build/run-tests.ps1 - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 if: always() with: name: test-results @@ -96,7 +96,7 @@ jobs: shell: pwsh env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./pipeline-scripts/post-coverage-comment.ps1 + run: ./build/post-coverage-comment.ps1 - name: Publish test results to job summary if: always() @@ -152,19 +152,19 @@ jobs: needs: build steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: '3.x' - name: Run Semgrep security scan shell: pwsh - run: ./pipeline-scripts/run-semgrep.ps1 + run: ./build/run-semgrep.ps1 - name: Upload Semgrep results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 if: always() with: name: semgrep-results @@ -184,7 +184,7 @@ jobs: needs.security-scan.result == 'success' steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: fetch-depth: 0 @@ -209,35 +209,35 @@ jobs: - name: Setup .NET 8 SDK if: steps.changes.outputs.skip != 'true' - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 with: dotnet-version: '8.0.x' - name: Setup MSBuild if: steps.changes.outputs.skip != 'true' - uses: microsoft/setup-msbuild@v2 + uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2 - name: Setup NuGet if: steps.changes.outputs.skip != 'true' - uses: nuget/setup-nuget@v2 + uses: nuget/setup-nuget@d105a947828025cd7a980103c35ba2bfae586d0f # v2 - name: Setup Java (required by SonarScanner) if: steps.changes.outputs.skip != 'true' - uses: actions/setup-java@v4 + uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 with: distribution: 'temurin' java-version: '17' - name: Download test results if: steps.changes.outputs.skip != 'true' - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: test-results path: test-results - name: Download Semgrep results if: steps.changes.outputs.skip != 'true' - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: semgrep-results path: semgrep-results @@ -249,7 +249,7 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_PROJECT_KEY: ${{ secrets.SONAR_PROJECT_KEY }} SONAR_ORGANIZATION: ${{ secrets.SONAR_ORGANIZATION }} - run: ./pipeline-scripts/upload-to-sonarcloud.ps1 + run: ./build/upload-to-sonarcloud.ps1 # ========================================================================== # Job 5: Quality Gate Check @@ -261,20 +261,20 @@ jobs: if: always() steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - name: Download test results - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: test-results path: test-results - name: Download Semgrep results - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: semgrep-results path: semgrep-results - name: Check quality gates shell: pwsh - run: ./pipeline-scripts/check-quality-gates.ps1 + run: ./build/check-quality-gates.ps1 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..df75cf3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,46 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Overview + +SDLC reference implementation for Puma Security. Demonstrates CI/CD pipelines (GitHub Actions on `windows-latest`) across three .NET project types with automated testing, code coverage, Semgrep security scanning, and SonarCloud quality analysis. + +## Build & Test Commands + +The SDK-style projects (.NET 8 and .NET Framework SDK) can be built and tested locally with `dotnet`. The traditional .NET Framework project requires MSBuild/Visual Studio (Windows only). + +```shell +# Build SDK-style projects +dotnet build src/PumaSecurity.SDLC.Web.Net/PumaSecurity.SDLC.Web.Net.csproj +dotnet build src/PumaSecurity.SDLC.Web.NetFrameworkSdk/PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj + +# Run .NET 8 tests +dotnet test tests/PumaSecurity.SDLC.Web.Net.Tests/PumaSecurity.SDLC.Web.Net.Tests.csproj + +# Run .NET Framework SDK tests (Windows only, requires net472 targeting pack) +dotnet test tests/PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests/PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.csproj +``` + +The `build/` directory contains PowerShell scripts used by CI, designed for Windows runners. + +## Architecture + +Three parallel project types demonstrate different .NET build configurations: + +| Project | Target | Build Tool | Style | +|---------|--------|------------|-------| +| `PumaSecurity.SDLC.Web.NetFramework` | .NET Framework 4.7.2 | MSBuild | Traditional (non-SDK) csproj, `packages.config` | +| `PumaSecurity.SDLC.Web.NetFrameworkSdk` | .NET Framework 4.7.2 | `dotnet build` | SDK-style csproj, `PackageReference` | +| `PumaSecurity.SDLC.Web.Net` | .NET 8.0 | `dotnet build` | SDK-style csproj, nullable enabled | + +Each source project in `src/` has a corresponding MSTest test project in `tests/`. Test framework is MSTest with `JUnitXml.TestLogger` for CI report generation. + +## CI Pipeline (`.github/workflows/ci.yml`) + +Five jobs: Build → Test & Security Scan (parallel) → SonarCloud Analysis → Quality Gate Check. Quality gates enforce: all tests pass, ≥70% code coverage, zero critical Semgrep findings. + +## Intentional Vulnerabilities + +`src/PumaSecurity.SDLC.Web.Net/UserService.cs` contains deliberate security flaws (SQL injection, hardcoded credentials, MD5, command injection) for testing Semgrep detection. Do not "fix" these unless asked. + diff --git a/PumaSecurity.SDLC.Web.sln b/PumaSecurity.SDLC.Web.sln index 62c557e..372a912 100644 --- a/PumaSecurity.SDLC.Web.sln +++ b/PumaSecurity.SDLC.Web.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36511.14 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFramework", "PumaSecurity.SDLC.Web.NetFramework\PumaSecurity.SDLC.Web.NetFramework.csproj", "{FF517134-C558-40D5-ADD8-90A14A73F120}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFramework", "src\PumaSecurity.SDLC.Web.NetFramework\PumaSecurity.SDLC.Web.NetFramework.csproj", "{FF517134-C558-40D5-ADD8-90A14A73F120}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}" ProjectSection(SolutionItems) = preProject @@ -11,15 +11,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .github\workflows\ci.yml = .github\workflows\ci.yml EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFramework.Tests", "PumaSecurity.SDLC.Web.NetFramework.Tests\PumaSecurity.SDLC.Web.NetFramework.Tests.csproj", "{E1FEDDC1-9397-4813-8E84-8732D26E0591}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFramework.Tests", "tests\PumaSecurity.SDLC.Web.NetFramework.Tests\PumaSecurity.SDLC.Web.NetFramework.Tests.csproj", "{E1FEDDC1-9397-4813-8E84-8732D26E0591}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFrameworkSdk", "PumaSecurity.SDLC.Web.NetFrameworkSdk\PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj", "{867E86E5-8256-416D-85D6-C69DAD2604DB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFrameworkSdk", "src\PumaSecurity.SDLC.Web.NetFrameworkSdk\PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj", "{867E86E5-8256-416D-85D6-C69DAD2604DB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests", "PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.csproj", "{A6EA189E-6118-4AB9-BBF3-DCA5E789F4A5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests", "tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.csproj", "{A6EA189E-6118-4AB9-BBF3-DCA5E789F4A5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.Net", "PumaSecurity.SDLC.Web.Net\PumaSecurity.SDLC.Web.Net.csproj", "{A8F5267D-7DC5-4AC9-8590-DEE23249AC17}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.Net", "src\PumaSecurity.SDLC.Web.Net\PumaSecurity.SDLC.Web.Net.csproj", "{A8F5267D-7DC5-4AC9-8590-DEE23249AC17}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.Net.Tests", "PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj", "{C6B401D7-8D11-4C7A-9C7A-C43DF7589404}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PumaSecurity.SDLC.Web.Net.Tests", "tests\PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj", "{C6B401D7-8D11-4C7A-9C7A-C43DF7589404}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/README.md b/README.md index da4ac93..29de4e4 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ sdlc-reference-implementation/ ├── .github/workflows/ci.yml # CI/CD pipeline configuration ├── PumaSecurity.SDLC.Web.sln # Solution file │ -├── pipeline-scripts/ # All pipeline automation scripts +├── build/ # All pipeline automation scripts │ ├── build.ps1 # Build all projects │ ├── run-tests.ps1 # Execute tests with coverage │ ├── run-semgrep.ps1 # Semgrep security scanning @@ -85,14 +85,15 @@ sdlc-reference-implementation/ │ ├── post-coverage-comment.ps1 # Post coverage to PR comments │ └── coverage.runsettings # Coverage configuration │ -├── PumaSecurity.SDLC.Web.NetFramework/ # Traditional .NET Framework MVC app -├── PumaSecurity.SDLC.Web.NetFramework.Tests/ # Tests for traditional project +├── src/ +│ ├── PumaSecurity.SDLC.Web.NetFramework/ # Traditional .NET Framework MVC app +│ ├── PumaSecurity.SDLC.Web.NetFrameworkSdk/ # SDK-style .NET Framework class library +│ └── PumaSecurity.SDLC.Web.Net/ # Modern .NET 8 class library │ -├── PumaSecurity.SDLC.Web.NetFrameworkSdk/ # SDK-style .NET Framework class library -├── PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests/ # Tests for SDK-style Framework -│ -├── PumaSecurity.SDLC.Web.Net/ # Modern .NET 8 class library -├── PumaSecurity.SDLC.Web.Net.Tests/ # Tests for modern .NET +├── tests/ +│ ├── PumaSecurity.SDLC.Web.NetFramework.Tests/ # Tests for traditional project +│ ├── PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests/ # Tests for SDK-style Framework +│ └── PumaSecurity.SDLC.Web.Net.Tests/ # Tests for modern .NET │ ├── test-results/ # Generated test & coverage output └── semgrep-results/ # Generated Semgrep scan output @@ -102,22 +103,22 @@ sdlc-reference-implementation/ ### Build All Projects ```powershell -.\pipeline-scripts\build.ps1 +.\build\build.ps1 ``` ### Run All Tests with Coverage ```powershell -.\pipeline-scripts\run-tests.ps1 +.\build\run-tests.ps1 ``` ### Run Security Scan ```powershell -.\pipeline-scripts\run-semgrep.ps1 +.\build\run-semgrep.ps1 ``` ### Show Coverage Report ```powershell -.\pipeline-scripts\show-coverage.ps1 +.\build\show-coverage.ps1 ``` ## Pipeline Scripts @@ -188,7 +189,7 @@ Semgrep OSS scans the codebase for security vulnerabilities: - `semgrep-results/semgrep.sarif` — SARIF format for SonarCloud import (post-processed for compatibility) ### Intentional Test Vulnerabilities -`PumaSecurity.SDLC.Web.Net/UserService.cs` contains intentional vulnerabilities for testing Semgrep detection: +`src/PumaSecurity.SDLC.Web.Net/UserService.cs` contains intentional vulnerabilities for testing Semgrep detection: - SQL injection (string concatenation in SQL command) - Hardcoded credentials - Weak cryptography (MD5) @@ -241,25 +242,25 @@ python -m pip install semgrep ### Build Individual Projects ```powershell # Traditional .NET Framework MVC -msbuild PumaSecurity.SDLC.Web.NetFramework\PumaSecurity.SDLC.Web.NetFramework.csproj /p:Configuration=Release +msbuild src\PumaSecurity.SDLC.Web.NetFramework\PumaSecurity.SDLC.Web.NetFramework.csproj /p:Configuration=Release # SDK-style .NET Framework -dotnet build PumaSecurity.SDLC.Web.NetFrameworkSdk\PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj --configuration Release +dotnet build src\PumaSecurity.SDLC.Web.NetFrameworkSdk\PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj --configuration Release # Modern .NET 8 -dotnet build PumaSecurity.SDLC.Web.Net\PumaSecurity.SDLC.Web.Net.csproj --configuration Release +dotnet build src\PumaSecurity.SDLC.Web.Net\PumaSecurity.SDLC.Web.Net.csproj --configuration Release ``` ### Run Individual Test Projects ```powershell # Traditional Framework tests (VSTest) -vstest.console.exe PumaSecurity.SDLC.Web.NetFramework.Tests\bin\Release\net472\PumaSecurity.SDLC.Web.NetFramework.Tests.dll +vstest.console.exe tests\PumaSecurity.SDLC.Web.NetFramework.Tests\bin\Release\net472\PumaSecurity.SDLC.Web.NetFramework.Tests.dll # SDK-style Framework tests (VSTest) -vstest.console.exe PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\bin\Release\net472\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.dll +vstest.console.exe tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\bin\Release\net472\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.dll # Modern .NET 8 tests (dotnet test) -dotnet test PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj --configuration Release +dotnet test tests\PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj --configuration Release ``` ## Troubleshooting diff --git a/pipeline-scripts/build.ps1 b/build/build.ps1 similarity index 72% rename from pipeline-scripts/build.ps1 rename to build/build.ps1 index ff39737..3b7206e 100644 --- a/pipeline-scripts/build.ps1 +++ b/build/build.ps1 @@ -38,16 +38,29 @@ if (-not (Test-Path $vswhere)) { if (Test-Path $msbuildPath) { Write-Host "Found MSBuild at: $msbuildPath" -ForegroundColor Green - # Find NuGet for package restore + # Find NuGet for package restore (pinned version + SHA256 verification) $nugetPath = ".\nuget.exe" + $nugetVersion = "7.3.0" + $nugetExpectedHash = "39b6309e76c832e4de2ac7f86da9a8afaa12bc5b4307ea335e9d69e2d6d1a94a" if (-not (Test-Path $nugetPath)) { - Write-Host "Downloading NuGet.exe..." -ForegroundColor Yellow - $nugetUrl = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" + Write-Host "Downloading NuGet.exe v$nugetVersion..." -ForegroundColor Yellow + $nugetUrl = "https://dist.nuget.org/win-x86-commandline/v$nugetVersion/nuget.exe" try { $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest -Uri $nugetUrl -OutFile $nugetPath -UseBasicParsing $ProgressPreference = 'Continue' - Write-Host "NuGet.exe downloaded" -ForegroundColor Green + + # Verify SHA256 hash to prevent tampering + $actualHash = (Get-FileHash -Path $nugetPath -Algorithm SHA256).Hash.ToLower() + if ($actualHash -ne $nugetExpectedHash) { + Write-Host "ERROR: NuGet.exe hash mismatch!" -ForegroundColor Red + Write-Host " Expected: $nugetExpectedHash" -ForegroundColor Red + Write-Host " Actual: $actualHash" -ForegroundColor Red + Remove-Item $nugetPath -Force + $buildErrors += "NuGet hash verification failed" + } else { + Write-Host "NuGet.exe v$nugetVersion downloaded and verified (SHA256)" -ForegroundColor Green + } } catch { Write-Host "ERROR: Failed to download NuGet.exe" -ForegroundColor Red $buildErrors += "NuGet download failed" @@ -64,7 +77,7 @@ if (-not (Test-Path $vswhere)) { # Build the project Write-Host "Building NetFramework MVC project..." -ForegroundColor Yellow - & $msbuildPath PumaSecurity.SDLC.Web.NetFramework\PumaSecurity.SDLC.Web.NetFramework.csproj /p:Configuration=$Configuration /t:Rebuild /v:minimal /nologo + & $msbuildPath src\PumaSecurity.SDLC.Web.NetFramework\PumaSecurity.SDLC.Web.NetFramework.csproj /p:Configuration=$Configuration /t:Rebuild /v:minimal /nologo if ($LASTEXITCODE -eq 0) { Write-Host "[OK] NetFramework MVC build successful" -ForegroundColor Green @@ -72,7 +85,7 @@ if (-not (Test-Path $vswhere)) { # Build the test project Write-Host "" Write-Host "Building NetFramework.Tests..." -ForegroundColor Yellow - & $msbuildPath PumaSecurity.SDLC.Web.NetFramework.Tests\PumaSecurity.SDLC.Web.NetFramework.Tests.csproj /p:Configuration=$Configuration /t:Rebuild /v:minimal /nologo + & $msbuildPath tests\PumaSecurity.SDLC.Web.NetFramework.Tests\PumaSecurity.SDLC.Web.NetFramework.Tests.csproj /p:Configuration=$Configuration /t:Rebuild /v:minimal /nologo if ($LASTEXITCODE -eq 0) { Write-Host "[OK] NetFramework.Tests build successful" -ForegroundColor Green @@ -114,7 +127,7 @@ if (-not $dotnetPath) { Write-Host "Found dotnet CLI: $($dotnetPath.Path)" -ForegroundColor Green Write-Host "Building NetFrameworkSdk library..." -ForegroundColor Yellow - & dotnet build PumaSecurity.SDLC.Web.NetFrameworkSdk\PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj --configuration $Configuration --nologo + & dotnet build src\PumaSecurity.SDLC.Web.NetFrameworkSdk\PumaSecurity.SDLC.Web.NetFrameworkSdk.csproj --configuration $Configuration --nologo if ($LASTEXITCODE -eq 0) { Write-Host "[OK] NetFrameworkSdk library build successful" -ForegroundColor Green @@ -125,7 +138,7 @@ if (-not $dotnetPath) { Write-Host "" Write-Host "Building NetFrameworkSdk.Tests..." -ForegroundColor Yellow - & dotnet build PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.csproj --configuration $Configuration --nologo + & dotnet build tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.csproj --configuration $Configuration --nologo if ($LASTEXITCODE -eq 0) { Write-Host "[OK] NetFrameworkSdk.Tests build successful" -ForegroundColor Green @@ -149,7 +162,7 @@ if (-not $dotnetPath) { $buildErrors += "dotnet CLI not found for .NET 8" } else { Write-Host "Building .NET 8 library..." -ForegroundColor Yellow - & dotnet build PumaSecurity.SDLC.Web.Net\PumaSecurity.SDLC.Web.Net.csproj --configuration $Configuration --nologo + & dotnet build src\PumaSecurity.SDLC.Web.Net\PumaSecurity.SDLC.Web.Net.csproj --configuration $Configuration --nologo if ($LASTEXITCODE -eq 0) { Write-Host "[OK] .NET 8 library build successful" -ForegroundColor Green @@ -160,7 +173,7 @@ if (-not $dotnetPath) { Write-Host "" Write-Host "Building .NET 8 Tests..." -ForegroundColor Yellow - & dotnet build PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj --configuration $Configuration --nologo + & dotnet build tests\PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj --configuration $Configuration --nologo if ($LASTEXITCODE -eq 0) { Write-Host "[OK] .NET 8 Tests build successful" -ForegroundColor Green @@ -180,13 +193,13 @@ if ($buildErrors.Count -eq 0) { Write-Host "" Write-Host "Build Artifacts:" -ForegroundColor Yellow Write-Host " Libraries:" -ForegroundColor Cyan - Write-Host " - NetFramework: PumaSecurity.SDLC.Web.NetFramework\bin\$Configuration\" -ForegroundColor Gray - Write-Host " - NetFrameworkSdk: PumaSecurity.SDLC.Web.NetFrameworkSdk\bin\$Configuration\net472\" -ForegroundColor Gray - Write-Host " - Net: PumaSecurity.SDLC.Web.Net\bin\$Configuration\net8.0\" -ForegroundColor Gray + Write-Host " - NetFramework: src\PumaSecurity.SDLC.Web.NetFramework\bin\$Configuration\" -ForegroundColor Gray + Write-Host " - NetFrameworkSdk: src\PumaSecurity.SDLC.Web.NetFrameworkSdk\bin\$Configuration\net472\" -ForegroundColor Gray + Write-Host " - Net: src\PumaSecurity.SDLC.Web.Net\bin\$Configuration\net8.0\" -ForegroundColor Gray Write-Host " Test Projects:" -ForegroundColor Cyan - Write-Host " - NetFramework.Tests: PumaSecurity.SDLC.Web.NetFramework.Tests\bin\$Configuration\net472\" -ForegroundColor Gray - Write-Host " - NetFrameworkSdk.Tests: PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\bin\$Configuration\net472\" -ForegroundColor Gray - Write-Host " - Net.Tests: PumaSecurity.SDLC.Web.Net.Tests\bin\$Configuration\net8.0\" -ForegroundColor Gray + Write-Host " - NetFramework.Tests: tests\PumaSecurity.SDLC.Web.NetFramework.Tests\bin\$Configuration\net472\" -ForegroundColor Gray + Write-Host " - NetFrameworkSdk.Tests: tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\bin\$Configuration\net472\" -ForegroundColor Gray + Write-Host " - Net.Tests: tests\PumaSecurity.SDLC.Web.Net.Tests\bin\$Configuration\net8.0\" -ForegroundColor Gray exit 0 } else { Write-Host "[ERROR] Build completed with errors:" -ForegroundColor Red diff --git a/pipeline-scripts/check-quality-gates.ps1 b/build/check-quality-gates.ps1 similarity index 100% rename from pipeline-scripts/check-quality-gates.ps1 rename to build/check-quality-gates.ps1 diff --git a/pipeline-scripts/coverage.runsettings b/build/coverage.runsettings similarity index 100% rename from pipeline-scripts/coverage.runsettings rename to build/coverage.runsettings diff --git a/pipeline-scripts/parse-test-results.ps1 b/build/parse-test-results.ps1 similarity index 100% rename from pipeline-scripts/parse-test-results.ps1 rename to build/parse-test-results.ps1 diff --git a/pipeline-scripts/post-coverage-comment.ps1 b/build/post-coverage-comment.ps1 similarity index 100% rename from pipeline-scripts/post-coverage-comment.ps1 rename to build/post-coverage-comment.ps1 diff --git a/pipeline-scripts/run-semgrep.ps1 b/build/run-semgrep.ps1 similarity index 99% rename from pipeline-scripts/run-semgrep.ps1 rename to build/run-semgrep.ps1 index 1ca6ae7..4d33943 100644 --- a/pipeline-scripts/run-semgrep.ps1 +++ b/build/run-semgrep.ps1 @@ -70,7 +70,7 @@ if (-not $pythonCmd) { if (-not $SkipInstall) { Write-Host "" Write-Host "Installing/upgrading Semgrep..." -ForegroundColor Yellow - & $pythonCmd -m pip install --upgrade semgrep + & $pythonCmd -m pip install semgrep==1.156.0 if ($LASTEXITCODE -ne 0) { Write-Host "WARNING: Failed to install/upgrade Semgrep via pip" -ForegroundColor Yellow Write-Host "Attempting to continue with existing installation..." -ForegroundColor Yellow diff --git a/pipeline-scripts/run-sonar-analysis.ps1 b/build/run-sonar-analysis.ps1 similarity index 98% rename from pipeline-scripts/run-sonar-analysis.ps1 rename to build/run-sonar-analysis.ps1 index fcacd25..f39d18d 100644 --- a/pipeline-scripts/run-sonar-analysis.ps1 +++ b/build/run-sonar-analysis.ps1 @@ -33,7 +33,7 @@ $scannerInstalled = dotnet tool list --global | Select-String "dotnet-sonarscann if (-not $scannerInstalled) { Write-Host "Installing dotnet-sonarscanner..." -ForegroundColor Yellow - dotnet tool install --global dotnet-sonarscanner + dotnet tool install --global dotnet-sonarscanner --version 11.2.0 if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: Failed to install dotnet-sonarscanner" -ForegroundColor Red diff --git a/pipeline-scripts/run-tests.ps1 b/build/run-tests.ps1 similarity index 96% rename from pipeline-scripts/run-tests.ps1 rename to build/run-tests.ps1 index 546467a..a113863 100644 --- a/pipeline-scripts/run-tests.ps1 +++ b/build/run-tests.ps1 @@ -21,17 +21,17 @@ if (-not (Test-Path $ResultsDir)) { $testProjects = @( @{ Name = "NetFramework.Tests" - Assembly = "PumaSecurity.SDLC.Web.NetFramework.Tests\bin\$Configuration\net472\PumaSecurity.SDLC.Web.NetFramework.Tests.dll" + Assembly = "tests\PumaSecurity.SDLC.Web.NetFramework.Tests\bin\$Configuration\net472\PumaSecurity.SDLC.Web.NetFramework.Tests.dll" Type = "VSTest" }, @{ Name = "NetFrameworkSdk.Tests" - Assembly = "PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\bin\$Configuration\net472\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.dll" + Assembly = "tests\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests\bin\$Configuration\net472\PumaSecurity.SDLC.Web.NetFrameworkSdk.Tests.dll" Type = "VSTest" }, @{ Name = "Net.Tests" - Project = "PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj" + Project = "tests\PumaSecurity.SDLC.Web.Net.Tests\PumaSecurity.SDLC.Web.Net.Tests.csproj" Type = "DotNetTest" } ) diff --git a/pipeline-scripts/show-coverage.ps1 b/build/show-coverage.ps1 similarity index 96% rename from pipeline-scripts/show-coverage.ps1 rename to build/show-coverage.ps1 index 510e007..ce9de00 100644 --- a/pipeline-scripts/show-coverage.ps1 +++ b/build/show-coverage.ps1 @@ -16,8 +16,8 @@ if (-not (Test-Path $TestResultsPath)) { Write-Host "Test results directory not found: $TestResultsPath" -ForegroundColor Yellow Write-Host "" Write-Host "Please run tests first:" -ForegroundColor Gray - Write-Host " .\build.ps1" -ForegroundColor Cyan - Write-Host " .\run-tests.ps1" -ForegroundColor Cyan + Write-Host " .\build\build.ps1" -ForegroundColor Cyan + Write-Host " .\build\run-tests.ps1" -ForegroundColor Cyan exit 0 } @@ -39,7 +39,7 @@ if ($allCoverageFiles.Count -eq 0) { Write-Host " - .coverage (Visual Studio binary format)" -ForegroundColor Gray Write-Host "" Write-Host "Make sure you ran tests with coverage collection:" -ForegroundColor Gray - Write-Host " .\run-tests.ps1" -ForegroundColor Cyan + Write-Host " .\build\run-tests.ps1" -ForegroundColor Cyan Write-Host "" Write-Host "Check that dotnet CLI is available and coverlet.collector is installed" -ForegroundColor Gray exit 0 diff --git a/pipeline-scripts/upload-to-sonarcloud.ps1 b/build/upload-to-sonarcloud.ps1 similarity index 99% rename from pipeline-scripts/upload-to-sonarcloud.ps1 rename to build/upload-to-sonarcloud.ps1 index 7e7380b..7a9bc4d 100644 --- a/pipeline-scripts/upload-to-sonarcloud.ps1 +++ b/build/upload-to-sonarcloud.ps1 @@ -47,7 +47,7 @@ $scannerInstalled = dotnet tool list --global | Select-String "dotnet-sonarscann if (-not $scannerInstalled) { Write-Host "Installing dotnet-sonarscanner..." -ForegroundColor Yellow - dotnet tool install --global dotnet-sonarscanner + dotnet tool install --global dotnet-sonarscanner --version 11.2.0 if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: Failed to install dotnet-sonarscanner" -ForegroundColor Red diff --git a/PumaSecurity.SDLC.Web.Net/Calculator.cs b/src/PumaSecurity.SDLC.Web.Net/Calculator.cs similarity index 100% rename from PumaSecurity.SDLC.Web.Net/Calculator.cs rename to src/PumaSecurity.SDLC.Web.Net/Calculator.cs diff --git a/PumaSecurity.SDLC.Web.Net/PumaSecurity.SDLC.Web.Net.csproj b/src/PumaSecurity.SDLC.Web.Net/PumaSecurity.SDLC.Web.Net.csproj similarity index 100% rename from PumaSecurity.SDLC.Web.Net/PumaSecurity.SDLC.Web.Net.csproj rename to src/PumaSecurity.SDLC.Web.Net/PumaSecurity.SDLC.Web.Net.csproj diff --git a/PumaSecurity.SDLC.Web.Net/UserService.cs b/src/PumaSecurity.SDLC.Web.Net/UserService.cs similarity index 100% rename from PumaSecurity.SDLC.Web.Net/UserService.cs rename to src/PumaSecurity.SDLC.Web.Net/UserService.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/App_Start/BundleConfig.cs b/src/PumaSecurity.SDLC.Web.NetFramework/App_Start/BundleConfig.cs similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/App_Start/BundleConfig.cs rename to src/PumaSecurity.SDLC.Web.NetFramework/App_Start/BundleConfig.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/App_Start/FilterConfig.cs b/src/PumaSecurity.SDLC.Web.NetFramework/App_Start/FilterConfig.cs similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/App_Start/FilterConfig.cs rename to src/PumaSecurity.SDLC.Web.NetFramework/App_Start/FilterConfig.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/App_Start/RouteConfig.cs b/src/PumaSecurity.SDLC.Web.NetFramework/App_Start/RouteConfig.cs similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/App_Start/RouteConfig.cs rename to src/PumaSecurity.SDLC.Web.NetFramework/App_Start/RouteConfig.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/Site.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/Site.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/Site.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/Site.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-grid.rtl.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-reboot.rtl.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap-utilities.rtl.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css diff --git a/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css.map b/src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css.map similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css.map rename to src/PumaSecurity.SDLC.Web.NetFramework/Content/bootstrap.rtl.min.css.map diff --git a/PumaSecurity.SDLC.Web.NetFramework/Controllers/HomeController.cs b/src/PumaSecurity.SDLC.Web.NetFramework/Controllers/HomeController.cs similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Controllers/HomeController.cs rename to src/PumaSecurity.SDLC.Web.NetFramework/Controllers/HomeController.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/Global.asax b/src/PumaSecurity.SDLC.Web.NetFramework/Global.asax similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Global.asax rename to src/PumaSecurity.SDLC.Web.NetFramework/Global.asax diff --git a/PumaSecurity.SDLC.Web.NetFramework/Global.asax.cs b/src/PumaSecurity.SDLC.Web.NetFramework/Global.asax.cs similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Global.asax.cs rename to src/PumaSecurity.SDLC.Web.NetFramework/Global.asax.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/Properties/AssemblyInfo.cs b/src/PumaSecurity.SDLC.Web.NetFramework/Properties/AssemblyInfo.cs similarity index 100% rename from PumaSecurity.SDLC.Web.NetFramework/Properties/AssemblyInfo.cs rename to src/PumaSecurity.SDLC.Web.NetFramework/Properties/AssemblyInfo.cs diff --git a/PumaSecurity.SDLC.Web.NetFramework/PumaSecurity.SDLC.Web.NetFramework.csproj b/src/PumaSecurity.SDLC.Web.NetFramework/PumaSecurity.SDLC.Web.NetFramework.csproj similarity index 85% rename from PumaSecurity.SDLC.Web.NetFramework/PumaSecurity.SDLC.Web.NetFramework.csproj rename to src/PumaSecurity.SDLC.Web.NetFramework/PumaSecurity.SDLC.Web.NetFramework.csproj index b28f831..5034b22 100644 --- a/PumaSecurity.SDLC.Web.NetFramework/PumaSecurity.SDLC.Web.NetFramework.csproj +++ b/src/PumaSecurity.SDLC.Web.NetFramework/PumaSecurity.SDLC.Web.NetFramework.csproj @@ -1,6 +1,6 @@  - + Debug @@ -66,7 +66,7 @@ True - ..\packages\Microsoft.Web.Infrastructure.2.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + ..\..\packages\Microsoft.Web.Infrastructure.2.0.0\lib\net40\Microsoft.Web.Infrastructure.dll @@ -74,46 +74,46 @@ True - ..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.Helpers.dll + ..\..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.Helpers.dll True - ..\packages\Microsoft.AspNet.Mvc.5.2.9\lib\net45\System.Web.Mvc.dll + ..\..\packages\Microsoft.AspNet.Mvc.5.2.9\lib\net45\System.Web.Mvc.dll - ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll + ..\..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll True - ..\packages\Microsoft.AspNet.Razor.3.2.9\lib\net45\System.Web.Razor.dll + ..\..\packages\Microsoft.AspNet.Razor.3.2.9\lib\net45\System.Web.Razor.dll True - ..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.dll + ..\..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.dll True - ..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.Deployment.dll + ..\..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.Deployment.dll True - ..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.Razor.dll + ..\..\packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.Razor.dll - ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll True - ..\packages\WebGrease.1.6.0\lib\WebGrease.dll + ..\..\packages\WebGrease.1.6.0\lib\WebGrease.dll True - ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll + ..\..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll - ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + ..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll @@ -241,7 +241,7 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - +