Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ updates:
directory: "/"
schedule:
interval: "weekly"
target-branch: main
commit-message:
prefix: "ci: "
141 changes: 103 additions & 38 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,34 @@ on:
- '**'
pull_request:
branches:
- 'master'
- 'main'
- 'develop'
paths-ignore:
- '**.md'
tags-ignore:
- '**'
pull_request_target:
branches:
- 'main'
- 'develop'
paths-ignore:
- '**.md'
tags-ignore:
- '**'

env:
COREHOST_TRACE: false
DOTNET_CLI_TELEMETRY_OPTOUT: 1 # Disable sending usage data to Microsoft
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 # prevent the caching of the packages on the build machine
DOTNET_NOLOGO: true # removes logo and telemetry message from first run of dotnet cli
NUGET_XMLDOC_MODE: skip # prevent the download of the XML documentation for the packages
COVERAGE_PATH: SignNow.Net.Test/bin/Debug
# Do not generate summary otherwise it leads to duplicate errors in build log
DOTNET_BUILD_ARGS: /consoleloggerparameters:NoSummary /property:GenerateFullPaths=true

defaults:
run:
shell: pwsh

# Workflow
jobs:
Expand All @@ -31,49 +53,39 @@ jobs:
matrix:
include:
# Ubuntu
- { name: 'Linux .NET 8', os: ubuntu-22.04, framework: 'net8.0' }
- { name: 'Linux .NET 8', os: ubuntu-22.04, framework: 'net8.0', net-sdk: '8.0.x', target: 'netstandard2.1' }
# macOs - disabled due to the same behavior as in Ubuntu
# - { name: 'macOS .NET 8', os: macos-13, framework: 'net8.0' }
# Windows
- { name: 'Windows .NET 7', os: windows-latest, framework: 'net7.0' }
- { name: 'Windows .NET 8', os: windows-latest, framework: 'net8.0' }
- { name: 'Windows .NET 4.6', os: windows-latest, framework: 'net462' }

env:
COREHOST_TRACE: false
DOTNET_CLI_TELEMETRY_OPTOUT: 1 # Disable sending usage data to Microsoft
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 # prevent the caching of the packages on the build machine
DOTNET_NOLOGO: true # removes logo and telemetry message from first run of dotnet cli
NUGET_XMLDOC_MODE: skip # prevent the download of the XML documentation for the packages
COVERAGE_PATH: SignNow.Net.Test/bin/Debug
# Do not generate summary otherwise it leads to duplicate errors in build log
DOTNET_BUILD_ARGS: /consoleloggerparameters:NoSummary /property:GenerateFullPaths=true

defaults:
run:
shell: pwsh
- { name: 'Windows .NET 7', os: windows-latest, framework: 'net7.0', net-sdk: '7.0.x', target: 'netstandard2.0' }
- { name: 'Windows .NET 8', os: windows-latest, framework: 'net8.0', net-sdk: '8.0.x', target: 'netstandard2.1' }
- { name: 'Windows .NET 4.6', os: windows-latest, framework: 'net462', net-sdk: '8.0.x', target: 'net462' }

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
# For pull_request_target (dependabot), checkout the PR head SHA
ref: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.sha || github.ref }}

- name: Setup .NET SDK Version for Target Framework
- name: Get SDK Version
id: props
run: |
If ("${{ matrix.framework }}" -eq "net7.0") {
Write-Output "DOTNET_SDK_VERSION=7.0.x" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
Write-Output "TARGET_FRAMEWORK=netstandard20" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
} ElseIf ("${{ matrix.framework }}" -eq "net8.0") {
Write-Output "DOTNET_SDK_VERSION=8.0.x" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
Write-Output "TARGET_FRAMEWORK=netstandard21" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
} Else {
Write-Output "TARGET_FRAMEWORK=462" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
}
$Props = [xml](Get-Content ./SignNow.props)
$Version = $Props.Project.PropertyGroup.Version
Write-Output "version=${Version}" >> $Env:GITHUB_OUTPUT
Write-Host "✓ Found SignNow.NET SDK project version: $Version"

- name: Setup JDK 17 (SonarQube requirement)
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_SDK_VERSION }}
dotnet-version: ${{ matrix.net-sdk }}

- name: Setup Nuget Cache
uses: actions/cache@v4
Expand All @@ -83,41 +95,94 @@ jobs:
key: ${{ runner.os }}-nuget-${{ matrix.framework }}-${{ hashFiles('**/*.csproj') }}
restore-keys: ${{ runner.os }}-nuget-

- name: Install SonarQube Scanner
run: dotnet tool install --global dotnet-sonarscanner

- name: Restore Nuget packages
run: dotnet restore -v:n

- name: Configure signNow API
run: echo '${{ secrets.TEST_CREDITS_JSON }}' >> ${{ github.workspace }}/api-eval.signnow.com.json

- name: Build and Pack Solution
- name: Get SonarQube Project Key
id: sonar
run: |
dotnet build SignNow.Net --configuration Debug ${{ env.DOTNET_BUILD_ARGS }}
dotnet pack --configuration Release --output ./SignNow.Net/bin/Publish SignNow.Net
$SonarConfigPath = "${{ github.workspace }}/SonarQube.Analysis.xml"
if (Test-Path $SonarConfigPath) {
[xml]$SonarConfig = Get-Content $SonarConfigPath
$ProjectKey = $SonarConfig.SonarQubeAnalysisProperties.Property | Where-Object { $_.Name -eq "sonar.projectKey" } | Select-Object -ExpandProperty '#text'
if (-not [string]::IsNullOrWhiteSpace($ProjectKey)) {
Write-Host "✓ Found SonarQube project key: $ProjectKey"
Write-Output "project-key=${ProjectKey}" >> $Env:GITHUB_OUTPUT
Write-Output "has-project-key=true" >> $Env:GITHUB_OUTPUT
} else {
Write-Warning "SonarQube project key is empty in configuration file"
}
} else {
Write-Warning "SonarQube configuration file not found: $SonarConfigPath"
}

- name: Run Tests on ${{ matrix.framework }} with Coverage
- name: SonarQube begin
if: steps.sonar.outputs.has-project-key == 'true'
run: |
dotnet-sonarscanner begin `
/key:${{ steps.sonar.outputs.project-key }} `
/s:${{ github.workspace }}/SonarQube.Analysis.xml `
/v:"${{ steps.props.outputs.version }}" `
/d:sonar.projectBaseDir="${{ github.workspace }}" `
/d:sonar.token="${{ secrets.SONAR_SECRET }}" `
/d:sonar.host.url="${{ secrets.SONAR_HOST_URL }}" `
/d:sonar.scanner.skipJreProvisioning=true

- name: Run Tests on ${{ matrix.framework }} for TargetFramework ${{ matrix.target }} with Coverage
run: |
dotnet test SignNow.Net.Test `
--configuration Debug --framework ${{ matrix.framework }} `
# Build the main library with framework targeting for SonarQube
dotnet build SignNow.Net --configuration Debug --no-incremental `
/p:TargetFramework=${{ matrix.target }} `
${{ env.DOTNET_BUILD_ARGS }}

# Build the test project for the specific framework
dotnet build SignNow.Net.Test --configuration Debug --no-incremental `
--framework ${{ matrix.framework }} `
${{ env.DOTNET_BUILD_ARGS }}

dotnet test SignNow.Net.Test --configuration Debug --no-build `
--framework ${{ matrix.framework }} `
--logger:trx --results-directory ./SignNow.Net.Test/TestResults `
/p:CollectCoverage=true

- name: Save Code Coverage Results
uses: actions/upload-artifact@v4
with:
name: CoverageReports-${{ runner.os }}-${{ matrix.framework }}.zip
path: SignNow.Net.Test/bin/Debug/**/coverage*
path: ${{ env.COVERAGE_PATH }}/**/coverage*

- name: SonarQube end
if: steps.sonar.outputs.has-project-key == 'true'
continue-on-error: true
run: dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_SECRET }}"

- name: Test Release Notes parser
if: (runner.os == 'macOS' || runner.os == 'Linux')
shell: bash
run: |
.github/release-notes.sh CHANGELOG.md

- name: Check entire Solution Compilation and Packaging
run: |
# Build entire solution normally to ensure all projects are compiled
dotnet build SignNow.Net.sln --configuration Debug --no-restore ${{ env.DOTNET_BUILD_ARGS }}
dotnet pack --configuration Release --output ./SignNow.Net/bin/Publish SignNow.Net

- name: Upload Code Coverage Report (Codecov.io)
if: env.CODECOV_TOKEN != ''
continue-on-error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
uses: codecov/codecov-action@v5
with:
name: ${{ runner.os }}-codecov-${{ matrix.framework }}
flags: ${{ runner.os }},${{ env.TARGET_FRAMEWORK }}
flags: ${{ runner.os }},${{ matrix.target }}
token: ${{ secrets.CODECOV_TOKEN }}
files: ${{ env.COVERAGE_PATH }}/${{ matrix.framework }}/coverage.${{ matrix.framework }}.opencover.xml
fail_ci_if_error: false
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@

# ignore local files with API credentials
*.signnow.com.json

# source for API code generation
endpoint.json

*/bin/
*/obj/
31 changes: 26 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,33 @@ The format is based on [Keep a Changelog](http://keepachangelog.com)
and this project adheres to [Semantic Versioning](http://semver.org).

## [Unreleased] - TBD

## [1.4.0] - 2026-01-13
### Added
- Event Subscriptions & Webhooks:
- Get Event Subscriptions List: Enhanced filtering and sorting for retrieving event subscriptions with flexible query
options
- Get Event Subscription by ID: Retrieve detailed information about specific event subscriptions
- Delete Event Subscription: Remove event subscriptions programmatically
- Get Callbacks History: Comprehensive webhook callback event history with advanced filtering and sorting capabilities
- Document Template Operations:
- Template Routing Management: Create, retrieve, and update routing configurations for document templates
- Bulk Invite from Template: Send signing invitations to multiple recipients using templates
- Document Group Templates: List, create, and update document group templates
- Document & Folder Operations
- Get Document Fields: Retrieve all fields from documents with values, types, and metadata
- Get Folder by ID: Fetch detailed folder information including contained documents
- User Management
- Update User Initials: Upload and update user's initial signature using base64-encoded images
- Verify User Email: Send and verify user email addresses with verification tokens

### Changed
- Upgraded .NET Core runtime to .NET 7.0 for Tests and Examples projects
- Drop support for .NET Core 2.1 and 3.1 (dropper netstandard 1.x)
- Updated netstandard min version to 2.0
- Removed InheritDoc tool from the project
- Upgraded NET Framework min supported version to 4.6.2
- Upgraded to .NET 7.0/8.0 for tests and examples
- Minimum .NET Framework version upgraded to 4.6.2
- Dropped support for .NET Core 2.1 and 3.1
- Minimum netstandard version updated to 2.0
- Removed InheritDoc tool
- Update the 'UpdateEventSubscriptionAsync' method to use the latest implementation of SignNow API event-subscriptions endpoint


## [1.3.0] - 2024-12-18
Expand Down
Binary file added SignNow.Net.Examples/Assets/Images/test_initial.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading