Skip to content

Way to build nodejs grpc server binary #11480

Way to build nodejs grpc server binary

Way to build nodejs grpc server binary #11480

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Continuous integration
on:
push:
branches: [ main ]
paths-ignore:
- '**/*.md'
pull_request:
branches: [ main ]
schedule:
- cron: '15 10 * * *'
env:
SYS_VAR_CI_INSTALL_TEST: 0
jobs:
testing:
runs-on: ${{ matrix.os }}
timeout-minutes: 30
permissions:
contents: read
pull-requests: write
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
python-version: "3.10"
node-version: 22.x
shard: 1
- os: windows-latest
python-version: "3.12"
node-version: 20.x
shard: 2
- os: ubuntu-latest
python-version: "3.10"
node-version: 22.x
shard: 3
- os: ubuntu-latest
python-version: "3.11"
node-version: 20.x
shard: 4
- os: windows-latest
python-version: "3.9"
node-version: 20.x
shard: 1
- os: ubuntu-latest
python-version: "3.10"
node-version: 20.x
shard: 2
- os: ubuntu-latest
python-version: "3.13"
node-version: 22.x
shard: 3
- os: ubuntu-latest
python-version: "3.10"
node-version: 24.x
shard: 4
- os: ubuntu-latest
python-version: "3.11"
node-version: 20.x
shard: 1
- os: macos-latest
python-version: "3.11"
node-version: 20.x
shard: 1
- os: macos-latest
python-version: "3.12"
node-version: 20.x
shard: 2
- os: macos-latest
python-version: "3.10"
node-version: 20.x
shard: 3
steps:
- uses: actions/checkout@v5
- name: Use Node.js
uses: actions/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install nodejs dependencies
env:
PLAYWRIGHT_BROWSERS_PATH: 0
run: |
npm ci
npx playwright install --with-deps
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip install uv
uv pip install wheel --python ${{ matrix.python-version }} --system
uv pip install -r Browser/dev-requirements.txt --python ${{ matrix.python-version }} --system
uv pip install -r pyproject.toml --python ${{ matrix.python-version }} --system
- name: Build Protos and check with tsc
run: |
inv node-build
python -m Browser.gen_stub
- name: Check types with mypy on Linux
if: matrix.os == 'ubuntu-latest' && matrix.shard == 1 && matrix.python-version != '3.10'
run: |
inv lint-python
- name: Lint atest
if: matrix.shard == 1
run: |
inv lint-robot
- name: Lint node
if: matrix.shard == 1
run: |
inv lint-node
- name: Build test app
run: |
inv create-test-app
- name: Start xvfb on Linux
if: matrix.os == 'ubuntu-latest'
run: |
export DISPLAY=:99.0
Xvfb -ac :99 -screen 0 1280x1024x16 > /dev/null 2>&1 &
- name: Run pytests
if: matrix.shard == 1
run: |
invoke utest
- name: Run Robot Framework tests on linux
if: matrix.os == 'ubuntu-latest'
run: |
xvfb-run --auto-servernum inv atest --shard ${{ matrix.shard }}/4
- name: Run Robot Framework tests on Windows
if: matrix.os == 'windows-latest'
run: |
inv atest --shard ${{ matrix.shard }}/4
- name: Run Robot Framework tests on macOS
if: matrix.os == 'macos-latest'
run: |
inv atest --shard ${{ matrix.shard }}/4
- uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: Test results-${{ matrix.os }}-${{ matrix.shard }}-${{ matrix.python-version }}-${{ matrix.node-version }}
path: atest/output
- name: Github Job Summary
if: ${{ always() }}
run: |
python -m GHAReports --robotlog atest/output/output.xml
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ "ubuntu-latest", "windows-latest" ]
steps:
- uses: actions/checkout@v5
- name: Use Node.js
uses: actions/setup-node@v5
with:
node-version: 22.x
cache: 'npm'
- name: Install nodejs dependencies
env:
PLAYWRIGHT_BROWSERS_PATH: 0
run: |
npm ci
npx playwright install --with-deps
- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: 3.12
cache: 'pip'
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip install uv
uv pip install wheel --python 3.12 --system --verbose
uv pip install -r Browser/dev-requirements.txt --python 3.12 --system
uv pip install -r pyproject.toml --python 3.12 --system
- name: Build Protos and check with tsc
if: matrix.os == 'ubuntu-latest'
run: |
inv node-build
python -m Browser.gen_stub
- name: Build test app
run: |
inv create-test-app
- name: Create Distributable Package
if: matrix.os == 'ubuntu-latest'
run: |
inv docs
inv create-package
- uses: actions/upload-artifact@v4
if: matrix.os == 'ubuntu-latest'
with:
name: rfbrowser-wheel
path: dist/robotframework_browser-*-py3-none-any.whl
- name: Package demoapp
run: |
inv demo-app
- uses: actions/upload-artifact@v4
with:
name: demoapp-${{ matrix.os }}
path: zip_results/demoapp
test-install:
needs: build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest]
python-version: [3.9, 3.13]
node-version: [20.x, 24.x]
exclude:
- python-version: 3.9
node-version: 20.x
- os: windows-latest
python-version: 3.9
- os: windows-latest
node-version: 20.x
steps:
- uses: actions/checkout@v5
- name: Download package for install testing
uses: actions/download-artifact@v5
with:
name: rfbrowser-wheel
- name: Download package for install testing
uses: actions/download-artifact@v5
with:
name: demoapp-${{ matrix.os }}
path: zip_results/demoapp
- name: Unzip demoapp in *nix like
if: matrix.os != 'windows-latest'
run: |
ls -l zip_results/demoapp
unzip -o zip_results/demoapp/demo-app-linux.zip
- name: Unzip demoapp in windows
if: matrix.os == 'windows-latest'
run: |
dir zip_results/demoapp
tar -xf zip_results/demoapp/demo-app-win32.zip
- name: Use Node.js
uses: actions/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install Robot Framework Browser on *nix like
run: |
pip install uv
uv pip install ./robotframework_browser-*-py3-none-any.whl --python ${{ matrix.python-version }} --system
if: matrix.os != 'windows-latest'
- name: Install Robot Framework Browser on windows
run: |
pip install uv
uv pip install (gci *.whl)--python ${{ matrix.python-version }} --system
if: matrix.os == 'windows-latest'
- name: Install node deps and python deps for test running
run: |
rfbrowser init
uv pip install wheel --python ${{ matrix.python-version }} --system
uv pip install -r Browser/dev-requirements.txt --python ${{ matrix.python-version }} --system
- name: Test on Ubuntu - serial mode
if: matrix.os == 'ubuntu-latest'
env:
SYS_VAR_CI_INSTALL_TEST: 1
run: |
rm -rf Browser
export DISPLAY=:99.0
Xvfb -ac :99 -screen 0 1280x1024x16 > /dev/null 2>&1 &
xvfb-run --auto-servernum invoke atest-robot --smoke
- name: Run Robot Framework tests on windows or macOS
if: matrix.os != 'ubuntu-latest'
env:
SYS_VAR_CI_INSTALL_TEST: 1
run: |
Remove-Item -Path .\Browser -Force -Recurse
invoke atest-robot --smoke
- name: Uninstall on Linux or MacOS
if: ${{ matrix.os != 'windows-latest' }}
run: |
rfbrowser clean-node
uv pip uninstall robotframework-browser --python ${{ matrix.python-version }} --system
- uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: ${{ matrix.os }} ${{ matrix.python-version }} ${{ matrix.node-version }} Clean install results
path: atest/output
- name: Github Job Summary
if: ${{ always() }}
run: |
python -m GHAReports --robotlog atest/output/output.xml
build_browser_batteries_wheels:
name: Build wheels on ${{ matrix.os }} for BrowserBatteries tests
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
- os: macos-latest
arch: arm64
steps:
- uses: actions/checkout@v5
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: "22.x"
- name: Setup Python 3.13
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install uv
uv pip install wheel invoke --python 3.13 --system --verbose
python -c "import sys;print(sys.platform)"
python -c "import sysconfig;print(sysconfig.get_platform())"
python -c "import platform;print(platform.machine().lower())"
inv deps
- name: Build Protos and check with tsc
if: matrix.os == 'ubuntu-latest'
run: |
inv node-build
python -m Browser.gen_stub
- name: Create Distributable Browser Package
if: matrix.os == 'ubuntu-latest'
run: |
inv create-package
- uses: actions/upload-artifact@v4
name: Upload rfbrowser-wheel for BrowserBatteries tests
if: matrix.os == 'ubuntu-latest'
with:
name: rfbrowser-wheel-bb-test
path: dist/robotframework_browser-*-py3-none-any.whl
if-no-files-found: error
- name: Build test app
run: |
inv create-test-app
- name: Package demoapp
run: |
inv demo-app
- uses: actions/upload-artifact@v4
with:
name: demoapp--bb-test-${{ matrix.os }}
path: zip_results/demoapp
if-no-files-found: error
- name: Create Distributable BrowserBatteries Package
run: |
inv package-nodejs
- uses: actions/upload-artifact@v4
with:
name: browser-batteries-wheels-bb-test-${{ matrix.os }}
path: browser_batteries/dist/robotframework_browser_batteries-*.whl
if-no-files-found: error
test_browser_batteries_wheels:
needs:
- build_browser_batteries_wheels
name: Test wheels on ${{ matrix.os }} for BrowserBatteries tests
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
- os: macos-latest
arch: arm64
steps:
- uses: actions/checkout@v5
- name: Set up Python 3.13
uses: actions/setup-python@v6
with:
python-version: 3.13
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: "22.x"
- name: Download rfbrowser-wheel for BrowserBatteries tests
uses: actions/download-artifact@v4
with:
name: rfbrowser-wheel-bb-test
path: rfbrowser-wheel
- name: Download BrowserBatteries wheels
uses: actions/download-artifact@v4
with:
name: browser-batteries-wheels-bb-test-${{ matrix.os }}
path: browser-batteries-wheels
- name: Download demoapp wheels
uses: actions/download-artifact@v4
with:
name: demoapp--bb-test-${{ matrix.os }}
path: demoapp
- name: Install Browser and BrowserBatteries on ${{ matrix.os }}
run: |
python -m pip install --upgrade pip
pip install rfbrowser-wheel/robotframework_browser-*-py3-none-any.whl
pip install browser-batteries-wheels/robotframework_browser_batteries-*-py3-none-*.whl
rfbrowser --version
rfbrowser install --with-deps
- name: Install test dependencies
run: |
pip install -r Browser/dev-requirements.txt
- name: Unzip demoapp *nix
run: |
rm -rf Browser
rm -rf node
rm -rf browser_batteries
ls -l demoapp
unzip demoapp/demo-app*.zip -d .
- name: Run tests on ${{ matrix.os }} with packed demoapp
if : matrix.os == 'ubuntu-latest'
run: |
xvfb-run --auto-servernum invoke atest-robot --smoke
- name: Run tests on ${{ matrix.os }} with packed demoapp
if : matrix.os == 'macos-latest'
run: |
inv atest-robot
- uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: Clean_install_results_${{ matrix.os }}
path: atest/output
- name: Github Job Summary
if: ${{ always() }}
run: |
python -m GHAReports --robotlog atest/output/output.xml