Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a windows ci build using GitHub Actions. #1529

Merged
merged 16 commits into from
Mar 26, 2023
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
171 changes: 166 additions & 5 deletions .github/workflows/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ jobs:

- name: Generate TLS Certificate
run: |
openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' -keyout ./test/fixtures/localhost.key -out ./test/fixtures/localhost.crt
openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' -keyout ./test/fixtures/mssql.key -out ./test/fixtures/mssql.crt
- name: Start containers
run: |
Expand All @@ -104,7 +104,171 @@ jobs:
"encrypt": true
}
}
}' | jq --arg certificate "$(cat ./test/fixtures/localhost.crt)" '.config.options.cryptoCredentialsDetails.ca |= $certificate' > ~/.tedious/test-connection.json
}' | jq --arg certificate "$(cat ./test/fixtures/mssql.crt)" '.config.options.cryptoCredentialsDetails.ca |= $certificate' > ~/.tedious/test-connection.json
- name: Upgrade npm
run: npm install -g npm
if: ${{ matrix.node-version == '6.x' }}

- name: Determine npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- uses: actions/cache@v3
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- run: npm ci

- name: run unit tests
run: npx nyc --reporter=lcov npm run test

- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: run integration tests (TDS 7.4)
env:
TEDIOUS_TDS_VERSION: 7_4
run: npx nyc --reporter=lcov npm run test-integration

- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: run integration tests (TDS 7.3B)
env:
TEDIOUS_TDS_VERSION: 7_3_B
run: npx nyc --reporter=lcov npm run test-integration

- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: run integration tests (TDS 7.3A)
env:
TEDIOUS_TDS_VERSION: 7_3_A
run: npx nyc --reporter=lcov npm run test-integration

- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: run integration tests (TDS 7.2)
env:
TEDIOUS_TDS_VERSION: 7_2
run: npx nyc --reporter=lcov npm run test-integration

- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: run integration tests (TDS 7.1)
env:
TEDIOUS_TDS_VERSION: 7_1
run: npx nyc --reporter=lcov npm run test-integration

- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}

test-windows:
name: SQL Server Windows / Node.js ${{ matrix.node-version }}

runs-on: windows-2022

strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
fail-fast: false

steps:
- name: Install a SQL Server 2022
shell: pwsh
run: |
Push-Location C:\temp
Invoke-WebRequest -Uri https://download.microsoft.com/download/3/8/d/38de7036-2433-4207-8eae-06e247e17b25/SQLServer2022-DEV-x64-ENU.exe -OutFile sqlsetup.exe
Invoke-WebRequest -Uri https://download.microsoft.com/download/3/8/d/38de7036-2433-4207-8eae-06e247e17b25/SQLServer2022-DEV-x64-ENU.box -OutFile sqlsetup.box
Start-Process -Wait -FilePath ./sqlsetup.exe -ArgumentList /qs, /x:setup
.\setup\setup.exe /q /ACTION=Install /INSTANCENAME=MSSQLSERVER /FEATURES=SQLEngine /UPDATEENABLED=0 /SQLSVCACCOUNT='NT SERVICE\MSSQLSERVER' /SQLSYSADMINACCOUNTS='BUILTIN\ADMINISTRATORS' /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS /SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS /USESQLRECOMMENDEDMEMORYLIMITS
Set-ItemProperty -path "HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLSERVER\" -Name LoginMode -Value 2
Restart-Service MSSQLSERVER
sqlcmd -S localhost -q "ALTER LOGIN [sa] WITH PASSWORD=N'yourStrong(!)Password'"
sqlcmd -S localhost -q "ALTER LOGIN [sa] ENABLE"
Pop-Location
- uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}

- name: Install dbatools
shell: powershell
run: Install-Module dbatools -Force

- name: Set up TLS Key and Certificate
shell: powershell
run: |
Import-Module dbatools
$certificate = New-SelfSignedCertificate `
-Type SSLServerAuthentication `
-Subject "CN=$env:COMPUTERNAME" -FriendlyName 'SQL Server RSA2048 G1' `
-DnsName "$env:COMPUTERNAME",'localhost.' `
-KeyAlgorithm 'RSA' -KeyLength 2048 -Hash 'SHA256' `
-TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1' `
-NotAfter (Get-Date).AddMonths(36) `
-KeyExportPolicy NonExportable -KeySpec KeyExchange `
-Provider 'Microsoft RSA SChannel Cryptographic Provider' `
-CertStoreLocation Cert:\LocalMachine\My `
$sqlinstance = Find-DbaInstance -ComputerName localhost
$sqlinstance | Set-DbaNetworkCertificate -Thumbprint ($certificate.Thumbprint).ToUpper()
Restart-Service MSSQLSERVER
# Convert UA certificate raw data to Base64
$output = @(
'-----BEGIN CERTIFICATE-----'
[System.Convert]::ToBase64String($certificate.RawData, 1)
'-----END CERTIFICATE-----'
)
# Output PEM file to the path
$output | Out-File -FilePath test\fixtures\mssql.crt -Encoding ascii
- name: Set up CI configuration
run: |
mkdir ~/.tedious
echo '{
"config": {
"server": "localhost",
"authentication": {
"type": "default",
"options": {
"userName": "sa",
"password": "yourStrong(!)Password"
}
},
"options": {
"port": 1433,
"database": "master",
"trustServerCertificate": true
}
}
}' | jq --arg certificate "$(cat ./test/fixtures/mssql.crt)" '.config.options.cryptoCredentialsDetails.ca |= $certificate' > ~/.tedious/test-connection.json
- name: Upgrade npm
run: npm install -g npm
Expand Down Expand Up @@ -194,14 +358,12 @@ jobs:
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- uses: actions/cache@v3
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- run: npm ci

- run: mkdir ~/.tedious
Expand All @@ -224,7 +386,6 @@ jobs:
}
}
}' > ~/.tedious/test-connection.json
- name: run integration tests
run: npx nyc --reporter=lcov npm run test-integration

Expand Down
4 changes: 2 additions & 2 deletions test/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ FROM mcr.microsoft.com/mssql/server:2022-latest

USER mssql
COPY --chown=mssql:root ./fixtures/mssql.conf /var/opt/mssql/mssql.conf
COPY --chown=mssql:root ./fixtures/localhost.crt /var/opt/mssql/localhost.crt
COPY --chown=mssql:root ./fixtures/localhost.key /var/opt/mssql/localhost.key
COPY --chown=mssql:root ./fixtures/mssql.crt /var/opt/mssql/mssql.crt
COPY --chown=mssql:root ./fixtures/mssql.key /var/opt/mssql/mssql.key
18 changes: 18 additions & 0 deletions test/fixtures/localhost.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
-----BEGIN CERTIFICATE-----
MIIC8DCCAdigAwIBAgIUVmzr5E5xTlETG/Ik6Gyh9aAp/nIwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTIyMDcwNjEwMTI1M1oXDTIyMDgw
NTEwMTI1M1owFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAlpKOv0plC+6mHi6r39O0+GeQSmoIA+Vf1aM/pZLMH4To
jlAv4P+yOSevD7QdBFl/p+i5VkKhvX6wHhdrFGgeJ98IISv1DFFg9SAPcSVR61xG
Sq5hGmJwOWQ03C+5YvVUlxiUgeiJGhD7WwNBX30Xx5Zu7cnH/cQOzYBj8bsqazTU
U+nO10UqiEqsHr0Ei7rd77n+ItzzRsF1Nd2Ao0v94iOdWjkFYg3BKPf0NvjEbNMp
WAkODKQFRtQhkCPUYdjGqmcVrhdQpRWpK7X1SepnhEJRtDVwjYHiLw1EkfLy9e6/
uaTWFnNpUPMJh8WoyQOAZlJfP2vcME252Mbfcd43qQIDAQABozowODAUBgNVHREE
DTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MA0GCSqGSIb3DQEBCwUAA4IBAQBjON3QEg7XegSItZuObHD4SCL+Baelhr1V5l9u
TMciYBMeKk78n5yK52YEkC3CtoyFk7oX4899XRkkqTtVnnIyb209k0g1IWNp+x1w
FlugXnEvTjFvxqk5pGuhCLInENRxAd+sdXgRngFm1dTff6wqCzKv0Z4tirsxlAq+
i8Jn8nx8IukY1y6yP8PEjQp7xYJJ02zt1VN3/aG6MIk4A72fuN5uLqiBYHo5bgHk
i4yJD/ojrkF/2LX2FEcGT//vbP4ywbVj5AGu6sStlyFORGJ2zMeNfzaz+YmrlCCx
3z6SbLyN1CpD55HFD4xslUWR7YgT8J8UDHotTTLeQ3vVOGQ+
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions test/fixtures/localhost.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCWko6/SmUL7qYe
Lqvf07T4Z5BKaggD5V/Voz+lkswfhOiOUC/g/7I5J68PtB0EWX+n6LlWQqG9frAe
F2sUaB4n3wghK/UMUWD1IA9xJVHrXEZKrmEaYnA5ZDTcL7li9VSXGJSB6IkaEPtb
A0FffRfHlm7tycf9xA7NgGPxuyprNNRT6c7XRSqISqwevQSLut3vuf4i3PNGwXU1
3YCjS/3iI51aOQViDcEo9/Q2+MRs0ylYCQ4MpAVG1CGQI9Rh2MaqZxWuF1ClFakr
tfVJ6meEQlG0NXCNgeIvDUSR8vL17r+5pNYWc2lQ8wmHxajJA4BmUl8/a9wwTbnY
xt9x3jepAgMBAAECggEAefRga+08pIp5v657hUF6rUtsYek5brZkhavAjEG21LyY
g1PNQ8a2Ona64tQ2QGSg8YWcP5KeX9XxnZ3IG/IsooyRkBSDWKO9DS0XdMQOcrv9
LtXITk92p/VSnxiEZfNgvTSqbAHEsfkZLOEZHNc74Gsmk7BALHiUqLuZt5upwsP8
P1/4XwoFb+dj+f0DBrjsZ5MutrXhXy9TxykDvt3cqthv8fT2rz5467BysmUp6tUu
UA90hNbhNhwwkrg1X/0dXJqcOGjKjKmtNWY1TBELBx4x2JarZnmtAX6XL3eAEB/j
vVoT0Tq0k9Lnvq/bFcM8WP5vPxoFvXwD4E6YfUKi0QKBgQDEfv56hXEUckCeQGY2
o2GFMsPoRLIIBgtKHgRcFrTrrPBDSLP1H4oIm9WPAsKaCb5blkjdOTEJdn/KDIjR
QIuTT5LIFa7hfw5XzZce0dwptqt4ria61cd6a8FaZIl/mQc2UNKjRYOGXZ24nb9p
8nzj1P0nb6siVlYrT2rQykIspQKBgQDEK2uWr7eZtLroUPQST5icm3ROi842387j
6SyKFaRcOF5hzCnMWUXMyX16KigcQZYZFBUKZDptHImmZYMemZNRX5WxspnB4IGu
2RS9gTZnx7WLj4PSh0wK3qiIoD/ikbqfXJxP9X8OwO17ngr2mU2tfWfy3KhLWnjh
ABhYin5btQKBgEk7b0poe0l8f1q7c5y/bXQABIWHPLbC0ehQoZ1UlR8UuALLkM41
b/NfaMtA4xgXs4tcylEwpHb7ZAsAeulJ3fsL+A98DU5bVRQiOkUxP5WIUAXNGgAd
9pdIm6o9uAUHGmoC204gdTFZqJOKrzEkP6mF0sek1aoZdUn08kFYcCtFAoGAU9OO
HQ0ncrolKIL3WR/EQh+3upzJWO+YdBG+457N5k58HmRk9Bqt1g2/3cVH8JMiNcM8
Hn2n7dpFA+La/ed4aUxkJlQAmjV6lSHUWApwGjbf4CxKk1sXZomxEPkRc5r8WX70
mMJ6Me7FTI7Ddo8Z/2nYUpJyJAkcIGGvBZ7g0gUCgYBCaUzNyY3n0Z+c1f2L+5Go
A6z7MdbhcOPbRiIg+m2C6FOV600CoKiquriBskIogN8pK02fWisCIVAETYnJxynq
r7KhTR2KBsrPgQ6qBITd7blWg4bRLENEp8tAuq9lP1Y7Ijcwt37C9/N58YOsXVLj
jts03igkRbNUWYXs0+CVSw==
-----END PRIVATE KEY-----
4 changes: 2 additions & 2 deletions test/fixtures/mssql.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[network]
tlscert = /var/opt/mssql/localhost.crt
tlskey = /var/opt/mssql/localhost.key
tlscert = /var/opt/mssql/mssql.crt
tlskey = /var/opt/mssql/mssql.key