diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f7dabfa --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,83 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build-and-test: + name: Build and Test + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + dotnet-version: ['9.0.x'] + fail-fast: false + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ matrix.dotnet-version }} + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration Release --no-restore + + - name: Test with dotnet + run: dotnet test --no-restore --logger trx --results-directory "TestResults-${{ matrix.dotnet-version }}" + + - name: Upload dotnet test results + uses: actions/upload-artifact@v4 + with: + name: dotnet-results--${{ matrix.os }} + path: TestResults--${{ matrix.os }} + if: ${{ always() }} + + lint: + name: Lint/Format Check + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: '9.0.x' + + - name: Restore dependencies + run: dotnet restore + + - name: Check formatting + run: dotnet format --verify-no-changes --verbosity diagnostic + + security: + name: Security Scan + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: '9.0.x' + + - name: Restore dependencies + run: dotnet restore + + - name: Checking for external vulnerabilites + run: | + dotnet list package --vulnerable --include-transitive 2>&1 | tee vuln.log + echo "Analyze dotnet list package..." + ! grep -q -i "has the following vulnerable packages" vuln.log diff --git a/.github/workflows/pr-validation.yml b/.github/workflows/pr-validation.yml new file mode 100644 index 0000000..3d04bff --- /dev/null +++ b/.github/workflows/pr-validation.yml @@ -0,0 +1,36 @@ +name: PR Validation + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + validate: + name: Validate PR + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Setup .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: '9.0.x' + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration Debug --no-restore + + - name: Check for compilation warnings + run: dotnet build --configuration Release --no-restore --warnaserror + + - name: Run tests + run: dotnet test --configuration Release --no-build --verbosity normal + + - name: Check formatting + run: dotnet format style --no-restore --verify-no-changes diff --git a/src/BitcoinKernel.Interop/NativeMethods.cs b/src/BitcoinKernel.Interop/NativeMethods.cs index 20e8601..744d767 100644 --- a/src/BitcoinKernel.Interop/NativeMethods.cs +++ b/src/BitcoinKernel.Interop/NativeMethods.cs @@ -427,7 +427,7 @@ public static extern int ScriptPubkeyVerify( IntPtr script_pubkey, long amount, IntPtr tx_to, - IntPtr[] spent_outputs, + IntPtr[]? spent_outputs, nuint spent_outputs_len, uint input_index, uint flags, diff --git a/tests/BitcoinKernel.Core.Tests/BitcoinKernel.Core.Tests.csproj b/tests/BitcoinKernel.Core.Tests/BitcoinKernel.Core.Tests.csproj index 9a568f4..11925a3 100644 --- a/tests/BitcoinKernel.Core.Tests/BitcoinKernel.Core.Tests.csproj +++ b/tests/BitcoinKernel.Core.Tests/BitcoinKernel.Core.Tests.csproj @@ -11,10 +11,10 @@ - - - - + + + + diff --git a/tests/BitcoinKernel.Tests/BitcoinKernel.Tests.csproj b/tests/BitcoinKernel.Tests/BitcoinKernel.Tests.csproj index aae6995..f48e5a5 100644 --- a/tests/BitcoinKernel.Tests/BitcoinKernel.Tests.csproj +++ b/tests/BitcoinKernel.Tests/BitcoinKernel.Tests.csproj @@ -11,10 +11,10 @@ - - - - + + + +