Improve support for primitive collections and Json Types (#159) #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
push: | |
branches: | |
- '**' | |
paths-ignore: | |
- '**.md' | |
pull_request: | |
branches: | |
- '**' | |
paths-ignore: | |
- '**.md' | |
env: | |
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true | |
DOTNET_CLI_TELEMETRY_OPTOUT: true | |
DOTNET_NOLOGO: true | |
buildConfiguration: 'Debug' | |
skipTests: false | |
deterministicTests: true | |
jobs: | |
BuildAndTest: | |
strategy: | |
fail-fast: false | |
matrix: | |
aceVersion: | |
- 2010 | |
- 2016 | |
aceArchitecture: | |
- x64 | |
- x86 | |
dataAccessProviderType: | |
- ODBC | |
- OLE DB | |
os: | |
- windows-latest | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set additional variables | |
shell: pwsh | |
run: | | |
$os = '${{ matrix.os }}'.Split('-')[0] | |
echo "os=$os" >> $env:GITHUB_ENV | |
$dotnetInstallDirectory = '.\.dotnet_${{ matrix.aceArchitecture }}' | |
echo "dotnetInstallDirectory=$dotnetInstallDirectory" >> $env:GITHUB_ENV | |
$dotnetExecutable = Join-Path $dotnetInstallDirectory 'dotnet.exe' | |
echo "dotnetExecutable=$dotnetExecutable" >> $env:GITHUB_ENV | |
$aceUrls = @{ | |
'2010' = @{ | |
'x64' = 'https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_X64.exe' | |
'x86' = 'https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine.exe' | |
'silent' = '/passive /quiet /norestart REBOOT=ReallySuppress' | |
} | |
'2016' = @{ | |
'x64' = 'https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/AccessDatabaseEngine_X64.exe' | |
'x86' = 'https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/AccessDatabaseEngine.exe' | |
'silent' = '/passive /quiet /norestart REBOOT=ReallySuppress' | |
} | |
} | |
$aceUrl = $aceUrls['${{ matrix.aceVersion }}']['${{ matrix.aceArchitecture }}'] | |
echo "aceUrl=$aceUrl" >> $env:GITHUB_ENV | |
$aceSilentInstallArgument = $aceUrls['${{ matrix.aceVersion }}']['silent'] | |
echo "aceSilentInstallArgument=$aceSilentInstallArgument" >> $env:GITHUB_ENV | |
$defaultConnection = '${{ matrix.dataAccessProviderType }}' -eq 'ODBC' ? 'DBQ=Jet.accdb' : 'Data Source=Jet.accdb;Persist Security Info=False;' | |
echo "defaultConnection=$defaultConnection" >> $env:GITHUB_ENV | |
- name: Output Variables | |
shell: pwsh | |
run: | | |
echo "os: ${{ env.os }}" | |
echo "buildConfiguration: ${{ env.buildConfiguration }}" | |
echo "aceVersion: ${{ matrix.aceVersion }}" | |
echo "aceArchitecture: ${{ matrix.aceArchitecture }}" | |
echo "aceUrl: ${{ env.aceUrl }}" | |
echo "aceSilentInstallArgument: ${{ env.aceSilentInstallArgument }}" | |
echo "dataAccessProviderType: ${{ matrix.dataAccessProviderType }}" | |
echo "defaultConnection: ${{ env.defaultConnection }}" | |
echo "skipTests: ${{ env.skipTests }}" | |
echo "dotnetInstallDirectory: ${{ env.dotnetInstallDirectory }}" | |
echo "dotnetExecutable: ${{ env.dotnetExecutable }}" | |
echo "github.event_name: ${{ github.event_name }}" | |
echo "github.repository: ${{ github.repository }}" | |
- name: .NET Information Before SDK Install | |
shell: pwsh | |
run: try { & '${{ env.dotnetExecutable }}' --info } catch { echo 'No ${{ matrix.aceArchitecture }} .NET SDK installed.' } | |
- name: Install .NET SDK | |
shell: pwsh | |
run: | | |
&([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -JSonFile global.json -Architecture '${{ matrix.aceArchitecture }}' -InstallDir '${{ env.dotnetInstallDirectory }}' -Verbose | |
- name: .NET Information After SDK Install | |
shell: pwsh | |
run: try { & '${{ env.dotnetExecutable }}' --info } catch { echo 'No ${{ matrix.aceArchitecture }} .NET SDK installed.' } | |
- name: ACE Information Before ACE Install | |
shell: pwsh | |
run: | | |
'DAO:' | |
Get-ChildItem 'HKLM:\SOFTWARE\Classes\DAO.DBEngine*' | Select-Object | |
'OLE DB:' | |
foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator()) | |
{ | |
$v = New-Object PSObject | |
for ($i = 0; $i -lt $provider.FieldCount; $i++) | |
{ | |
Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i) | |
} | |
$v | |
} | |
- name: Install Access Database Engine | |
shell: pwsh | |
run: | | |
$setupFileName = 'AccessDatabaseEngine_${{ matrix.aceVersion }}_${{ matrix.aceArchitecture }}.exe' | |
Invoke-WebRequest '${{ env.aceUrl }}' -OutFile $setupFileName | |
& ".\$setupFileName" ${{ env.aceSilentInstallArgument }} | Out-Default | |
- name: ACE Information After ACE Install | |
shell: pwsh | |
run: | | |
'DAO:' | |
Get-ChildItem 'HKLM:\SOFTWARE\Classes\DAO.DBEngine*' | Select-Object | |
'OLE DB:' | |
foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator()) | |
{ | |
$v = New-Object PSObject | |
for ($i = 0; $i -lt $provider.FieldCount; $i++) | |
{ | |
Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i) | |
} | |
$v | |
} | |
- name: Build Solution | |
shell: pwsh | |
run: | | |
& '${{ env.dotnetExecutable }}' build --configuration ${{ env.buildConfiguration }} -p:FixedTestOrder=${{ env.deterministicTests }} | |
- name: 'Run Tests: EFCore.Jet.Data.Tests' | |
shell: pwsh | |
run: | | |
$env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' | |
& '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Data.Tests -c '${{ env.buildConfiguration }}' --no-build --logger trx --verbosity detailed --blame-hang-timeout 3m | |
- name: 'Run Tests: EFCore.Jet.FunctionalTests' | |
shell: pwsh | |
continue-on-error: true | |
run: | | |
$env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' | |
& '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests -c '${{ env.buildConfiguration }}' --no-build --logger trx --verbosity detailed --blame-hang-timeout 3m | |
exit 0 | |
- name: 'Run Tests: EFCore.Jet.Tests' | |
shell: pwsh | |
run: | | |
$env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' | |
& '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Tests -c '${{ env.buildConfiguration }}' --no-build --logger trx --verbosity detailed --blame-hang-timeout 3m | |
NuGet: | |
needs: BuildAndTest | |
if: github.event_name == 'push' && github.repository == 'CirrusRedOrg/EntityFrameworkCore.Jet' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup .NET SDK | |
uses: actions/setup-dotnet@v3 | |
with: | |
global-json-file: global.json | |
- name: .NET Information | |
shell: pwsh | |
run: | | |
dotnet --info | |
- name: NuGet Pack | |
shell: pwsh | |
run: | | |
$officialBuild = '${{ github.ref }}' -match '(?<=^refs/tags/v)\d+\.\d+\.\d+.*$' | |
$officialVersion = $Matches.0 | |
$wipBuild = '${{ github.ref }}' -match '^refs/heads/.*-wip$' | |
$ciBuildOnly = $wipBuild -or ('${{ github.ref }}' -match '^refs/heads/(?:master|.*-servicing)$') | |
$continuousIntegrationTimestamp = Get-Date -Format yyyyMMddHHmmss | |
$buildSha = '${{ github.sha }}'.SubString(0, 7); | |
$pack = $officialBuild -or $ciBuildOnly | |
$pushToAzureArtifacts = $pack | |
$pushToMygetOrg = $pack | |
$pushToNugetOrg = $pack -and $officialBuild | |
echo "pushToAzureArtifacts: $pushToAzureArtifacts" | |
echo "pushToMygetOrg: $pushToMygetOrg" | |
echo "pushToNugetOrg: $pushToNugetOrg" | |
echo "officialBuild: $officialBuild" | |
echo "officialVersion: $officialVersion" | |
echo "wipBuild: $wipBuild" | |
echo "ciBuildOnly: $ciBuildOnly" | |
echo "continuousIntegrationTimestamp: $continuousIntegrationTimestamp" | |
echo "buildSha: $buildSha" | |
echo "pack: $pack" | |
if ($pack) | |
{ | |
$projectFiles = Get-ChildItem src/*/*.csproj -Recurse | % { $_.FullName } | |
$combinations = @('default', @('Release')), @('withPdbs', @('Release', 'Debug')) #, @('embeddedPdbs', @('Release', 'Debug')) | |
foreach ($combination in $combinations) | |
{ | |
$type = $combination[0] | |
$configurations = $combination[1] | |
foreach ($configuration in $configurations) | |
{ | |
$arguments = 'pack', '-c', $configuration, '-o', "nupkgs/$configuration/$type", '-p:ContinuousIntegrationBuild=true' | |
if ($officialBuild) | |
{ | |
$finalOfficialVersion = $officialVersion | |
if ($configuration -eq 'Debug') | |
{ | |
$finalOfficialVersion += '-debug' | |
} | |
$arguments += "-p:OfficialVersion=$finalOfficialVersion" | |
} | |
if ($ciBuildOnly) | |
{ | |
$arguments += "-p:ContinuousIntegrationTimestamp=$continuousIntegrationTimestamp" | |
$arguments += "-p:BuildSha=$buildSha" | |
} | |
switch ($type) | |
{ | |
'withPdbs' { $arguments += '-p:PackPdb=true', '-p:IncludeSymbols=false' } | |
'embeddedPdbs' { $arguments += '-p:DebugType=embedded', '-p:IncludeSymbols=false' } | |
} | |
foreach ($projectFile in $projectFiles) | |
{ | |
echo "Type: $type, Configuration: $configuration, Project: $projectFile" | |
echo "Pack command: dotnet $(($arguments + $projectFile) -join ' ')" | |
& dotnet ($arguments + $projectFile) | |
} | |
} | |
} | |
} | |
echo "pushToAzureArtifacts=$pushToAzureArtifacts" >> $env:GITHUB_ENV | |
echo "pushToMygetOrg=$pushToMygetOrg" >> $env:GITHUB_ENV | |
echo "pushToNugetOrg=$pushToNugetOrg" >> $env:GITHUB_ENV | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: nupkgs | |
path: nupkgs | |
# - name: "NuGet Push - AZDO Feed - Debug" | |
# if: ${{ env.pushToAzureArtifacts == 'true' }} | |
# working-directory: nupkgs | |
# shell: pwsh | |
# run: | | |
# # https://learn.microsoft.com/en-us/azure/devops/artifacts/nuget/dotnet-exe?view=azure-devops#publish-packages-from-external-sources | |
# dotnet new nugetconfig --output './azdo-nuget' --force | |
# try | |
# { | |
# nuget sources Add -ConfigFile './azdo-nuget/nuget.config' -Name 'azdo-efcore-jet-debug' -Source 'https://bubibubi.pkgs.visualstudio.com/EntityFrameworkCore.Jet/_packaging/public/nuget/v3/index.json' -UserName '${{ vars.AZUREDEVOPS_BUBIBUBI_ALLPACKAGES_PUSHNEW_USERNAME }}' -Password '${{ secrets.AZUREDEVOPS_BUBIBUBI_ALLPACKAGES_PUSHNEW_PASSWORD }}' -StorePasswordInClearText | |
# | |
# nuget push './Release/withPdbs/**/*.nupkg' -ConfigFile './azdo-nuget/nuget.config' -ApiKey 'foo' -Source 'https://bubibubi.pkgs.visualstudio.com/EntityFrameworkCore.Jet/_packaging/public/nuget/v3/index.json' | |
# } | |
# finally | |
# { | |
# Remove-Item ./azdo-nuget -Recurse -Force | |
# } | |
# - name: "NuGet Push - AZDO Feed - Release" | |
# if: ${{ env.pushToAzureArtifacts == 'true' }} | |
# working-directory: nupkgs | |
# shell: pwsh | |
# run: | | |
# # https://learn.microsoft.com/en-us/azure/devops/artifacts/nuget/dotnet-exe?view=azure-devops#publish-packages-from-external-sources | |
# dotnet new nugetconfig --output './azdo-nuget' --force | |
# try | |
# { | |
# nuget sources Add -ConfigFile './azdo-nuget/nuget.config' -Name 'azdo-efcore-jet-public' -Source 'https://bubibubi.pkgs.visualstudio.com/EntityFrameworkCore.Jet/_packaging/public/nuget/v3/index.json' -UserName '${{ vars.AZUREDEVOPS_POMELO_ALLPACKAGES_PUSHNEW_USERNAME }}' -Password '${{ secrets.AZUREDEVOPS_POMELO_ALLPACKAGES_PUSHNEW_PASSWORD }}' -StorePasswordInClearText | |
# | |
# nuget push './Release/withPdbs/**/*.nupkg' -ConfigFile './azdo-nuget/nuget.config' -ApiKey 'foo' -Source 'https://bubibubi.pkgs.visualstudio.com/EntityFrameworkCore.Jet/_packaging/public/nuget/v3/index.json' | |
# } | |
# finally | |
# { | |
# Remove-Item ./azdo-nuget -Recurse -Force | |
# } | |
- name: "NuGet Push - myget.org - Debug" | |
if: ${{ env.pushToMygetOrg == 'true' }} | |
working-directory: nupkgs | |
shell: pwsh | |
run: dotnet nuget push './Debug/withPdbs/**/*.nupkg' --api-key '${{ secrets.MYGETORG_CIRRUSRED_ALLPACKAGES_DEBUG_PUSHNEW }}' --source 'https://www.myget.org/F/cirrusred-debug/api/v3/index.json' | |
- name: "NuGet Push - myget.org - Release" | |
if: ${{ env.pushToMygetOrg == 'true' }} | |
working-directory: nupkgs | |
shell: pwsh | |
run: dotnet nuget push './Release/default/**/*.nupkg' --api-key '${{ secrets.MYGETORG_CIRRUSRED_ALLPACKAGES_PUSHNEW }}' --source 'https://www.myget.org/F/cirrusred/api/v3/index.json' | |
- name: "NuGet Push - nuget.org - Release" | |
if: ${{ env.pushToNugetOrg == 'true' }} | |
working-directory: nupkgs | |
shell: pwsh | |
run: dotnet nuget push './Release/default/**/*.nupkg' --api-key '${{ secrets.NUGETORG_EFCOREJET_ALLPACKAGES_PUSHNEW }}' --source 'https://api.nuget.org/v3/index.json' |