205 строки
8.8 KiB
YAML
205 строки
8.8 KiB
YAML
# This workflow uses actions that are not certified by GitHub.
|
|
# They are provided by a third-party and are governed by
|
|
# separate terms of service, privacy policy, and support
|
|
# documentation.
|
|
#
|
|
# See https://github.com/r-lib/actions/tree/master/examples#readme for
|
|
# additional example workflows available for the R community.
|
|
|
|
name: R 4.2 - Python 3.10
|
|
|
|
on:
|
|
push:
|
|
branches: [ master ]
|
|
pull_request:
|
|
branches: [ master ]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
SQLServer2022:
|
|
runs-on: windows-2022
|
|
|
|
env:
|
|
# Define CI to skip some test case.
|
|
CI: True
|
|
r-version: "4.2.0"
|
|
python-version: "3.10.2"
|
|
sql-platform: "box"
|
|
|
|
|
|
defaults:
|
|
run:
|
|
shell: cmd
|
|
|
|
steps:
|
|
# Set password in Github env but don't display output.
|
|
# Note for github action you need to use double %, when testing in a local VM
|
|
# %i would be the correct format.
|
|
- name: Generate password
|
|
run: |
|
|
setlocal enabledelayedexpansion
|
|
set password=%random%%random%%random%qaZ~@
|
|
for /f "delims=" %%i in ('echo !password!') do echo dbPassword=%%i >> "%GITHUB_ENV%"
|
|
|
|
# /SAPWD=%dbPassword% /SECURITYMODE=SQL /TCPENABLED=1 allows connecting using localhost without windows account.
|
|
# /FEATURES=SQLEngine,ADVANCEDANALYTICS are the machine learning services options.
|
|
- name: Install SQL Server 2022
|
|
run: |
|
|
set CurrentDir=%cd%
|
|
choco install sql-server-2022 -y -params "'/SAPWD=%dbPassword% /SECURITYMODE=SQL /TCPENABLED=1 /INDICATEPROGRESS /ACTION=Install /FEATURES=SQLEngine,ADVANCEDANALYTICS /INSTANCENAME=MSSQLSERVER /IACCEPTSQLSERVERLICENSETERMS'"
|
|
shell: cmd
|
|
|
|
- name: Install sqlcmd
|
|
run: choco install sqlcmd
|
|
shell: cmd
|
|
|
|
# Saves the chocolately logs which will likely hold the errors needed to debug a failed installation of SQL Server 2019.
|
|
- name: Save Logs as artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Chocolatey Logs
|
|
path: C:\ProgramData\chocolatey\logs\chocolatey2022.log
|
|
retention-days: 20
|
|
|
|
- name: Check Connectivity to SQL Database
|
|
run: |
|
|
sqlcmd -S localhost -U SA -P %dbPassword% -d Master -l 5 -Q "SELECT @@VERSION"
|
|
shell: cmd
|
|
|
|
- name: Checkout Branch
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Move AirlineTestDB.bak to correct file location for backup command
|
|
run: copy "AirlineTestDB.bak" "C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup\AirlineTestDB.bak"
|
|
|
|
- name: Restore AirlineTestDB
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "USE [master]; RESTORE DATABASE [AirlineTestDB] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup\AirlineTestDB.bak' WITH FILE = 1, MOVE N'AirlineTestDB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AirlineTestDB_Primary.mdf', MOVE N'AirlineTestDB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AirlineTestDB_Primary.ldf', NOUNLOAD, STATS = 5;"
|
|
|
|
- name: Create Logins for Test DBs
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "
|
|
CREATE LOGIN AirlineUser WITH PASSWORD = '%dbPassword%', CHECK_POLICY=OFF, CHECK_EXPIRATION = OFF, DEFAULT_DATABASE=AirlineTestDB;
|
|
CREATE LOGIN AirlineUserdbowner WITH PASSWORD = '%dbPassword%', CHECK_POLICY=OFF, CHECK_EXPIRATION = OFF, DEFAULT_DATABASE=AirlineTestDB;"
|
|
|
|
- name: Alter AirlineUser
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "
|
|
USE AirlineTestDB;
|
|
ALTER USER [AirlineUser] WITH LOGIN=[AirlineUser]"
|
|
|
|
- name: Alter AirlineUserdbowner
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "
|
|
USE AirlineTestDB;
|
|
ALTER USER [AirlineUserdbowner] WITH LOGIN=[AirlineUserdbowner]"
|
|
|
|
- name: Alter Authorization
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "
|
|
USE AirlineTestDB;
|
|
ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [AirlineUserdbowner]"
|
|
|
|
# https://learn.microsoft.com/sql/machine-learning/install/sql-machine-learning-services-windows-install-sql-2022?view=sql-server-ver16#setup-r-support
|
|
- name: Install R for MLS
|
|
run: |
|
|
curl -L -o R-4.2.0-win.exe https://cloud.r-project.org/bin/windows/base/old/4.2.0/R-4.2.0-win.exe
|
|
R-4.2.0-win.exe /VERYSILENT /DIR=C:\MLS\R
|
|
|
|
- name: Install CompatibilityAPI and RevoScaleR after installing their dependencies (iterators, foreach, R6, and jsonlite).
|
|
run: |
|
|
C:\MLS\R\bin\Rscript.exe -e "install.packages(c('iterators', 'foreach', 'R6', 'jsonlite'), repos='https://cloud.r-project.org/', lib='C:\\MLS\\R\\library')"
|
|
C:\MLS\R\bin\Rscript.exe -e "install.packages('https://aka.ms/sqlml/r4.2/windows/CompatibilityAPI_1.1.0.zip', repos=NULL, lib='C:\\MLS\\R\\library')"
|
|
C:\MLS\R\bin\Rscript.exe -e "install.packages('https://aka.ms/sqlml/r4.2/windows/RevoScaleR_10.0.1.zip', repos=NULL, lib='C:\\MLS\\R\\library')"
|
|
|
|
- name: Configure the R runtime installed for MLS with SQL Server
|
|
run: C:\MLS\R\library\RevoScaleR\rxLibs\x64\RegisterRext.exe /configure /rhome:"C:\MLS\R" /instance:"MSSQLSERVER"
|
|
|
|
- name: Set up Python ${{ env.python-version }}
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ env.python-version }}
|
|
|
|
- name: Install revoscalepy and dependencies
|
|
working-directory: ${{ env.Python3_ROOT_DIR }}
|
|
run: |
|
|
python -m pip install -t "${{ env.Python3_ROOT_DIR }}\Lib\site-packages" dill numpy==1.22.0 pandas patsy python-dateutil
|
|
python -m pip install -t "${{ env.Python3_ROOT_DIR }}\Lib\site-packages" https://aka.ms/sqlml/python3.10/windows/revoscalepy-10.0.1-py3-none-any.whl
|
|
|
|
- name: Grant READ/EXECUTE access to installed libraries
|
|
run: |
|
|
icacls "${{ env.Python3_ROOT_DIR }}\Lib\site-packages" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T
|
|
icacls "${{ env.Python3_ROOT_DIR }}\Lib\site-packages" /grant *S-1-15-2-1:(OI)(CI)RX /T
|
|
|
|
- name: Configure the Python runtime installed for MLS with SQL Server
|
|
working-directory: ${{ env.Python3_ROOT_DIR }}\Lib\site-packages\revoscalepy\rxLibs
|
|
run: .\RegisterRext.exe /configure /pythonhome:"${{ env.Python3_ROOT_DIR }}" /instance:"MSSQLSERVER"
|
|
|
|
- name: Enable External Scripts
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -Q "EXEC sp_configure 'external scripts enabled', 1;"
|
|
|
|
- name: Reconfigure
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -Q "RECONFIGURE WITH OVERRIDE;"
|
|
|
|
- name: Restart the Service
|
|
run: |
|
|
sqlcmd -S localhost -U SA -P %dbPassword% -Q "SHUTDOWN WITH NOWAIT"
|
|
timeout /t 5 /nobreak
|
|
net start "MSSQLSERVER"
|
|
|
|
- name: Execute sp_execute_external_script for R
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "
|
|
EXEC sp_execute_external_script @language =N'R',
|
|
@script=N'
|
|
OutputDataSet <- InputDataSet;
|
|
',
|
|
@input_data_1 =N'SELECT 1 AS hello'
|
|
WITH RESULT SETS (([hello] int not null));"
|
|
|
|
- name: Execute sp_execute_external_script for Python
|
|
run: sqlcmd -S localhost -U SA -P %dbPassword% -l 5 -Q "
|
|
EXEC sp_execute_external_script @language =N'Python',
|
|
@script=N'OutputDataSet = InputDataSet;',
|
|
@input_data_1 =N'SELECT 1 AS hello' WITH RESULT SETS (([hello] int not null));"
|
|
|
|
- name: Set up R ${{ env.r-version }} Runtime
|
|
uses: r-lib/actions/setup-r@v2
|
|
with:
|
|
r-version: ${{ env.r-version }}
|
|
|
|
- name: Install R Package Dependencies
|
|
uses: r-lib/actions/setup-r-dependencies@v2
|
|
with:
|
|
cache-version: 2
|
|
working-directory: ./R
|
|
extra-packages:
|
|
#Retrieves most recent odbc pkg from cran to avoid errors seen in older versions.
|
|
#Current version needs R >=3.6 and is currently failing
|
|
cran::odbc
|
|
cran::xml2
|
|
rcmdcheck
|
|
|
|
- uses: r-lib/actions/check-r-package@v2
|
|
with:
|
|
working-directory: ./R
|
|
env:
|
|
PASSWORD_AIRLINE_USER: "${{ env.dbPassword }}"
|
|
PASSWORD_AIRLINE_USER_DBOWNER: "${{ env.dbPassword }}"
|
|
|
|
- name: Install Python dependencies
|
|
working-directory: ./Python
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install flake8 pytest
|
|
pip install -r requirements.txt
|
|
|
|
- name: Build Python Package
|
|
working-directory: ./Python
|
|
run: ./buildandinstall.cmd
|
|
|
|
- name: Run pytest
|
|
working-directory: ./Python/tests
|
|
run: |
|
|
pytest
|
|
env:
|
|
USER: "AirlineUserdbowner"
|
|
PASSWORD: "${{ env.dbPassword }}"
|
|
PASSWORD_AIRLINE_USER: "${{ env.dbPassword }}"
|
|
continue-on-error: true
|