Skip to content

Terminate workflow processes after completing tests #387

Terminate workflow processes after completing tests

Terminate workflow processes after completing tests #387

Workflow file for this run

name: App Tests
on:
push:
# branches:
# - main
# - rel_*
pull_request:
defaults:
run:
# -l: use login shell (required when using Conda)
shell: bash -l {0}
env:
PYTEST_ADDOPTS: --color=yes
jobs:
component_e2e_testing:
name: E2E testing (${{ matrix.os }})
runs-on: ${{ matrix.os-version }}
strategy:
fail-fast: false
matrix:
os:
- linux
- win64
# - macos
include:
- os: linux
os-version: ubuntu-latest
- os: win64
os-version: windows-latest
steps:
- uses: actions/checkout@v4
- uses: conda-incubator/setup-miniconda@v3
with:
environment-file: environment.yml
activate-environment: watertap-ui-env
miniforge-version: latest
- name: Add theme to .env file
working-directory: ./electron/ui
run: |
echo REACT_APP_THEME=watertap >> .env
- name: Install Electron JS dependencies
run: |
npm --prefix electron clean-install
- name: Install frontend JS dependencies
run: |
npm --prefix electron/ui clean-install
- name: get idaes extensions
run: idaes get-extensions
- name: Install watertap-ui Python package
run: |
pip install --progress-bar off .
- name: Display installed environment
run: |
conda env export --no-builds
- name: run backend server
run: uvicorn --app-dir backend/app main:app --reload --host 127.0.0.1 --port 8001 & sleep 30
- name: run frontend
run: npm --prefix electron/ui start & sleep 30
- name: run component tests
run: npm --prefix electron/ui run test
- name: Cypress e2e tests
working-directory: electron/ui
timeout-minutes: 45
run: npx cypress run
- name: stop linux frontend service
if: runner.os == 'Linux'
run: fuser -k 3000/tcp
- name: stop linux backend service
if: runner.os == 'Linux'
run: fuser -k 8001/tcp
- name: stop windows services
if: runner.os == 'Windows'
run: |
$ports = @(3000, 8001)
foreach ($port in $ports){
$netTCPConnections = Get-NetTCPConnection -LocalPort $port -ErrorAction SilentlyContinue
if ($netTCPConnections) {
foreach ($netTCPConnection in $netTCPConnections) {
$processId = $netTCPConnection.OwningProcess
Write-Host "Found ID $processId"
$process = Get-Process -Id $processId -ErrorAction SilentlyContinue
if ($process) {
Write-Host "Found valid process $process"
if ($process.Name -notcontains "Idle") {
try {
Write-Host "Attempting to kill ID $processId with name $process.Name."
Stop-Process -Id $process.Id -Force
Write-Host "Process with ID $processId on port $port killed."
} catch {
Write-Host "Failed to kill process with ID $processId - $_"
}
} else {
Write-Host "The process using port $port is the idle process and cannot be terminated."
}
} else {
Write-Host "No process found using port $port."
}
}
} else {
Write-Host "No TCP connection found on port $port."
}
}
shell: pwsh
- name: Upload artifact for screenshots & videos
uses: actions/upload-artifact@v4
if: always()
with:
name: cypress_results-${{ matrix.os }}
path: |
electron/ui/cypress/screenshots/
electron/ui/cypress/videos/
pytest:
name: pytest (${{ matrix.os }})
runs-on: ${{ matrix.os-version }}
strategy:
fail-fast: false
matrix:
os:
- linux
- win64
# - macos
include:
- os: linux
os-version: ubuntu-latest
- os: win64
os-version: windows-latest
steps:
- uses: actions/checkout@v4
- uses: conda-incubator/setup-miniconda@v3
with:
environment-file: environment.yml
activate-environment: watertap-ui-env
miniforge-version: latest
- name: Install watertap-ui Python package
run: |
pip install --progress-bar off .
- name: Install httpx
run: |
pip install httpx
- name: get idaes extensions
run: idaes get-extensions
- name: Run pytest
working-directory: backend
run: |
pytest tests -v