Skip to content

Commit

Permalink
Add a windows ci build using GitHub Actions. (tediousjs#1529)
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurschreiber authored and AdamJohnSwan committed Jun 7, 2023
1 parent d5db329 commit 8b6aade
Show file tree
Hide file tree
Showing 5 changed files with 216 additions and 9 deletions.
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

0 comments on commit 8b6aade

Please sign in to comment.