Skip to content

Commit

Permalink
ci,test: add ci and an UI based test using solara
Browse files Browse the repository at this point in the history
  • Loading branch information
maartenbreddels committed Oct 9, 2023
1 parent 3e09c5c commit 822eed9
Show file tree
Hide file tree
Showing 6 changed files with 217 additions and 0 deletions.
18 changes: 18 additions & 0 deletions .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[bumpversion]
current_version = 1.0.0
commit = True
tag = True
parse = (?P<major>\d+)(\.(?P<minor>\d+))(\.(?P<patch>\d+))((?P<release>.)(?P<build>\d+))?
serialize =
{major}.{minor}.{patch}{release}{build}
{major}.{minor}.{patch}

[bumpversion:part:release]
optional_value = g
first_value = g
values =
a
b
g

[bumpversion:file:ipypopout/_version.py]
131 changes: 131 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: Main

on:
push:
pull_request:
workflow_dispatch:
schedule:
# Run at 2:00 a.m. every weekday (Monday to Friday)
- cron: "0 2 * * 1-5"

jobs:
build:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2

- name: Install Python
uses: actions/setup-python@v2
with:
python-version: "3.x"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install twine wheel jupyter-packaging "jupyterlab<4"
- name: Build
run: |
python setup.py sdist bdist_wheel
- name: Upload builds
uses: actions/upload-artifact@v3
with:
name: ipypopout-dist-${{ github.run_number }}
path: |
./dist
test:
needs: [build]
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python-version: [3.6, 3.7, 3.8, 3.9, "3.10", "3.11"]
steps:
- uses: actions/checkout@v2

- uses: actions/download-artifact@v3
with:
name: ipypopout-dist-${{ github.run_number }}
# because we only upload 1 file, it's not put in a subdirectory
path: dist

- name: Install Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}

- name: Install
run: pip install dist/*.whl

- name: Import
# do the import in a subdirectory, as after installation, files in de current directory are also imported
run: |
(mkdir test-install; cd test-install; python -c "from ipypopout import PopoutButton")
ui-test:
needs: [build]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2

- uses: actions/download-artifact@v3
with:
# because we only upload 1 file, it's not put in a subdirectory
path: dist
name: ipypopout-dist-${{ github.run_number }}

- name: Install Python
uses: actions/setup-python@v2
with:
python-version: 3.8

- name: Install ipypopout and test deps
run: |
wheel=(dist/*.whl)
pip install ${wheel}[test] "jupyter_server<2"
- name: Install playwright browsers
run: playwright install chromium

- name: Run ui-tests
env:
# do not run solara (yet)
SOLARA_TEST_RUNNERS: "jupyter_lab,jupyter_notebook,voila"
run: pytest tests/ui/ --video=retain-on-failure --solara-update-snapshots-ci -s

- name: Upload Test artifacts
if: always()
uses: actions/upload-artifact@v2
with:
name: ipypopout-test-results
path: test-results

release:
if: startsWith(github.event.ref, 'refs/tags/v')
needs: [test]
runs-on: ubuntu-20.04
steps:
- uses: actions/download-artifact@v3
with:
# because we only upload 1 file, it's not put in a subdirectory
path: dist
name: ipypopout-dist-${{ github.run_number }}

- name: Install Python
uses: actions/setup-python@v2
with:
python-version: 3.8

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install twine wheel
- name: Publish the Python package
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: twine upload --skip-existing dist/*

26 changes: 26 additions & 0 deletions release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

# Fully automated

$ ./release.sh patch


## Making an alpha release


$ ./release.sh patch --new-version 1.0.0


# semi automated
To make a new release
```
# update ipypopout/__init__.py
$ git add -u && git commit -m 'Release v1.0.0' && git tag v1.0.0 && git push upstream master v1.0.0
```


If a problem happens, and you want to keep the history clean
```
# do fix
$ git rebase -i HEAD~3
$ git tag v1.0.0 -f && git push upstream master v1.0.0 -f
```
6 changes: 6 additions & 0 deletions release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash
set -e -o pipefail
# usage: ./release minor -n
version=$(bump2version --dry-run --list $* | grep new_version | sed -r s,"^.*=",,)
echo Version tag v$version
bumpversion $* --verbose && git push upstream master v$version
5 changes: 5 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ def get_data_files(target, src):
'ipyvuetify>=1.7.0,<2',
'voila>=0.2.10'
],
extras_require={
"test": [
"solara[pytest]",
]
},
data_files=get_data_files(os.path.join(*share_voila_target), os.path.join(template[0])),
cmdclass={
'develop': DevelopCmd,
Expand Down
31 changes: 31 additions & 0 deletions tests/ui/popout_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import playwright.sync_api
from IPython.display import display
import ipypopout
import queue

def test_popout(
ipywidgets_runner, page_session: playwright.sync_api.Page, context_session: playwright.sync_api.BrowserContext,assert_solara_snapshot
):
def kernel_code():
import ipyvuetify as v
import ipypopout

container = v.Container(
children=[],
)

button = ipypopout.PopoutButton(
target=container,
)
text = v.Html(tag="div", children=["Test ipypopout"])
container.children = [button, text]
display(container)

ipywidgets_runner(kernel_code)
with context_session.expect_page() as new_page_info:
page_session.locator("_vue=v-btn[icon]").click()
new_page = new_page_info.value
new_page.locator("text=Test ipypopout").wait_for()
# the button should not be on the page
new_page.locator("_vue=v-btn").wait_for(state="detached")
new_page.close()

0 comments on commit 822eed9

Please sign in to comment.