Skip to content

Test ssh

Test ssh #109

Workflow file for this run

name: SSH-Test
on:
workflow_dispatch:
concurrency:
group: >-
${{ github.workflow }}-
${{ github.ref_type }}-
${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
env:
# UTF-8 content may be interpreted as ascii and causes errors without this.
LANG: C.UTF-8
IPP_DISABLE_JS: "1"
JUPYTER_PLATFORM_DIRS: "1"
jobs:
test:
runs-on: ${{ matrix.runs_on || 'ubuntu-20.04' }}
timeout-minutes: 50
strategy:
# Keep running even if one variation of the job fail
fail-fast: false
matrix:
include:
- python: "3.9"
cluster_type: ssh
- python: "3.8"
cluster_type: ssh
runs_on: windows-2019
steps:
- uses: actions/checkout@v3
- name: Cache conda environment
uses: actions/cache@v3
with:
path: |
~/conda
key: conda
- name: Cache node_modules
uses: actions/cache@v3
with:
path: |
node_modules
key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Set environment variables
if: ${{ matrix.env }}
env:
MATRIX_ENV: ${{ toJSON(matrix.env) }}
run: |
python3 <<EOF
import json
import os
matrix_env = json.loads(os.environ["MATRIX_ENV"])
with open(os.environ["GITHUB_ENV"], "a") as f:
for key, value in matrix_env.items():
f.write(f"{key}={value}\n")
EOF
- name: Docker infos
run: |
docker version
docker images
- 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
cd ci/ssh
docker-compose -f linux_docker-compose.yaml up -d --build
# retrieve id_rsa file for public key authentication
mkdir ~/.ssh/
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 /
# just to see the ip-address of runner vm
ifconfig
- 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
$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
ssh -o "StrictHostKeyChecking no" $env:SSH_HOST -p $env:SSH_PORT -v dir c:\
# 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]"
# just to see the ip-address of runner vm
ipconfig
echo "hostname:"
hostname
echo "nslookup $env:computername"
nslookup $env:computername
echo "hostname - python code:"
python -c "import socket;print('hostname:',socket.gethostname());print('gethostbyname_ex:',socket.gethostbyname_ex(socket.gethostname()))"
echo "in docker container: hostname - python code:"
docker run ipyparallel-sshd python -c "import socket;print('hostname:','$env:computername');print('gethostbyname_ex:',socket.gethostbyname_ex('$env:computername'))"
#echo "in docker container: nslookup $env:computername"
#docker run ipyparallel-sshd nslookup $env:computername
echo "in docker container: ping $env:computername"
docker run ipyparallel-sshd ping $env:computername
#echo "print hosts file:"
#type c:\Windows\System32\Drivers\etc\hosts
#echo "in docker container: print hosts file:"
#docker run ipyparallel-sshd cmd.exe /C type c:\Windows\System32\Drivers\etc\hosts
- name: Set up slurm
if: ${{ matrix.cluster_type == 'slurm' }}
run: |
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
cd ci/slurm
docker-compose up -d --build
- name: Install Python (conda) ${{ matrix.python }}
if: ${{ matrix.cluster_type == 'mpi' }}
run: |
export MAMBA_ROOT_PREFIX=$HOME/conda
test -d $MAMBA_ROOT_PREFIX || mkdir $MAMBA_ROOT_PREFIX
wget -qO- https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
eval "$(./bin/micromamba shell hook -s posix)"
micromamba activate
micromamba install -y -c conda-forge mpich mpi4py python=${{ matrix.python }}
echo "PATH=$MAMBA_ROOT_PREFIX/bin:$PATH" >> $GITHUB_ENV
- name: Install Python ${{ matrix.python }}
if: ${{ matrix.cluster_type != 'mpi' }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Install ipyparallel itself
run: |
pip install --upgrade pip
pip install --no-deps .
- name: Install Python dependencies
run: |
pip install --pre --upgrade ipyparallel[test]
- name: Install extra Python packages
if: ${{ ! startsWith(matrix.python, '3.11') }}
run: |
pip install distributed joblib
pip install --only-binary :all: matplotlib || echo "no matplotlib"
- name: Show environment
run: pip freeze
- name: Run tests in container ${{ matrix.container }}
if: ${{ matrix.container }}
run: echo "EXEC=docker exec -i ${{ matrix.container }}" >> $GITHUB_ENV
- name: Run ${{ matrix.cluster_type }} shellcmd tests
if: ${{ matrix.cluster_type }}
run: |
pytest -v --maxfail=2 --cov=ipyparallel ipyparallel/tests/test_shellcmd.py
- name: Run ${{ matrix.cluster_type }} tests
if: ${{ matrix.cluster_type }}
run: |
pytest -v --maxfail=2 --cov=ipyparallel ipyparallel/tests/test_${{ matrix.cluster_type }}.py
- name: Output windows test_ssh.py::test_get_output log (on success)
if: success() && contains(matrix.runs_on, 'windows')
run: |
echo "-------------- test_get_output.log --------------------"
if (Test-Path -Path $env:USERPROFILE\test_get_output.log) {
type $env:USERPROFILE\test_get_output.log
}
- name: Output linux test_ssh.py::test_get_output log (on success)
if: success() && !contains(matrix.runs_on, 'windows')
run: |
echo "-------------- test_get_output.log --------------------"
if test -f ~/test_get_output.log; then
cat ~/test_get_output.log
fi
#- name: Submit codecov report
# uses: codecov/codecov-action@v3