Skip to content

Commit

Permalink
Windows ssh tests activated
Browse files Browse the repository at this point in the history
  • Loading branch information
Johannes Otepka committed Nov 8, 2023
1 parent 385ef29 commit 47f59c6
Showing 1 changed file with 64 additions and 6 deletions.
70 changes: 64 additions & 6 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ env:
LANG: C.UTF-8
IPP_DISABLE_JS: "1"
JUPYTER_PLATFORM_DIRS: "1"
GITHUB_RUNNER: "1" # this will disable the ssh test on windows
GITHUB_RUNNER: "1" # this will disable the ssh test on windows

jobs:
test:
Expand All @@ -45,6 +45,7 @@ jobs:
env:
IPP_ENABLE_CURVE: "1"
- python: "3.8"
cluster_type: ssh
runs_on: windows-2019
- python: "3.9"
runs_on: macos-11
Expand Down Expand Up @@ -83,8 +84,8 @@ jobs:
f.write(f"{key}={value}\n")
EOF
- name: Set up docker-compose for ssh launcher
if: ${{ matrix.cluster_type == 'ssh' }}
- name: Set up docker-compose for ssh linux launcher
if: ${{ matrix.cluster_type == 'ssh' && !contains(matrix.runs_on, 'windows') }}
run: |
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
Expand All @@ -96,8 +97,61 @@ jobs:
docker cp ssh_sshd_1:/home/ciuser/.ssh/id_rsa ~/.ssh/id_rsa
cat ~/.ssh/id_rsa
#check ssh connection and accept host key
ssh -o "StrictHostKeyChecking no" ciuser@127.0.0.1 -p 2222 -v ls /
#check ssh connection and accept host key (with an arbitrary linux command)
ssh -o "StrictHostKeyChecking no" ciuser@127.0.0.1 -p 2222 -v echo "ssh connection to container succeeded"
- name: Set up docker-compose for ssh windows launcher
if: ${{ matrix.cluster_type == 'ssh' && contains(matrix.runs_on, 'windows') }}
env:
SSH_HOST: ciuser@127.0.0.1
SSH_PORT: 2222
CODE_ROOT: c:\src\ipyparallel
run: |
cd ci/ssh
# determine host ip and place it as 'static' env variables in corresponding docker compose file (win_Dockerfile_template -> win_Dockerfile)
$env:docker_host_ip=(Get-NetIPConfiguration -InterfaceAlias "Ethernet*").IPv4Address.IPAddress.Trim()
$content = Get-Content "win_Dockerfile_template"
$content | ForEach-Object {
$_ -replace '\${docker_host_ip}', $env:docker_host_ip -replace '\${docker_host_name}', $env:computername
} | Set-Content "win_Dockerfile"
docker-compose -f win_docker-compose.yaml up -d --build
# retrieve id_rsa file for public key authentication
mkdir $env:USERPROFILE/.ssh/
docker run ipyparallel-sshd powershell.exe -Command "type C:\Users\ciuser\.ssh\id_rsa" | out-file -encoding ascii $env:USERPROFILE/.ssh/id_rsa
# install newer version of openssh (removes "GetConsoleMode on STD_INPUT_HANDLE failed with 6" error in pytest)
choco install openssh --pre
mv C:\Windows\System32\OpenSSH C:\Windows\System32\_OpenSSH
#check ssh connection and accept host key (with arbitrary windows command)
ssh -o "StrictHostKeyChecking no" $env:SSH_HOST -p $env:SSH_PORT -v echo "ssh connection to container succeeded"
# copy ipyparallel code to docker container (use zip, scp and unzip)
ssh $env:SSH_HOST -p $env:SSH_PORT mkdir $env:CODE_ROOT
# zip ipyparallel files (excluding files probably not needed)
cd ../..
$exclude = @("__pycache__","node_modules")
$files = Get-ChildItem -Path "." -Exclude $exclude
Compress-Archive -Path $files -DestinationPath ipyparallel.zip -CompressionLevel Fastest
# copy file into docker (we need to do it over ssh since docker copy or mount doesn't work in Hyper-V)
scp -P $env:SSH_PORT ipyparallel.zip ${env:SSH_HOST}:${env:CODE_ROOT}
# deflate ipyparallel files
ssh $env:SSH_HOST -p $env:SSH_PORT powershell.exe -Command "Expand-Archive -Path $env:CODE_ROOT\ipyparallel.zip -DestinationPath $env:CODE_ROOT"
# pip install ipyparallel files
#ssh $env:SSH_HOST -p $env:SSH_PORT "cd $env:CODE_ROOT && pip install -e ."
ssh $env:SSH_HOST -p $env:SSH_PORT "pip install -e file://c:/src/ipyparallel#egg=ipyparallel[test]"
# we need to disable the windows firewall for github runners otherwise the ipyparallel engines cannot connect to the controller.
# obviously, a more precautious adaption of the firewall would be desirable. since an adaption of the firewall is NOT necessary
# for a local standard windows environment, no further improvements were made.
echo "Disable Firewall:"
Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled False
echo "Check if container can ping the docker host (requires adapted hosts file and firewall disabled)"
docker run ipyparallel-sshd ping -n 1 $env:computername
- name: Set up slurm
if: ${{ matrix.cluster_type == 'slurm' }}
Expand Down Expand Up @@ -137,7 +191,11 @@ jobs:
if: ${{ ! startsWith(matrix.python, '3.11') }}
run: |
pip install distributed joblib
pip install --only-binary :all: matplotlib || echo "no matplotlib"
# pip install --only-binary :all: matplotlib || echo "no matplotlib"#
# the || syntax doesn't work under windows powershell, but since the command (currently) works for all
# python version (3.8-3.10), the "||" branch can be simply removed. Otherwise we would need a splitted
# step for Windows and Linux (as for the docker-compose command)
pip install --only-binary :all: matplotlib
- name: Show environment
run: pip freeze
Expand Down

0 comments on commit 47f59c6

Please sign in to comment.