name: ci on: push: branches: - main pull_request: jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, ubuntu-latest, windows-latest] python-version: ['3.9'] PYTEST_QT_API: [pyqt5, pyside2] steps: - uses: actions/checkout@v2 with: submodules: true - uses: conda-incubator/setup-miniconda@v2 with: auto-update-conda: true python-version: ${{ matrix.python-version }} - name: Install system dependencies shell: bash -l {0} run: | if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then sudo apt-get install -y coreutils sudo apt-get install -y xvfb herbstluftwm elif [ "${{ matrix.os }}" = "macos-latest" ]; then brew install coreutils brew install --cask xquartz fi - name: Set up Python shell: bash -l {0} run: | conda install -q -y python=${{ matrix.python-version }} which python python --version pip --version - name: Install dependencies shell: bash -l {0} run: | if [ "${{ matrix.PYTEST_QT_API }}" = "pyside2" ]; then conda install -q -y pyside2 -c conda-forge else conda install -q -y pyqt=5 fi if [ "${{ matrix.os }}" != "windows-latest" ]; then conda install -q -y help2man fi pip install pytest 'pytest-qt<4' - name: Install main shell: bash -l {0} run: | pip install . - name: Lint with flake8 shell: bash -l {0} if: matrix.os != 'windows-latest' run: | pip install hacking==4.1.0 flake8 . - name: Black shell: bash -l {0} if: matrix.os != 'windows-latest' run: | pip install black==22.1.0 black --line-length 79 --check --diff labelme/ - name: Test with pytest shell: bash -l {0} if: matrix.os != 'windows-latest' && !(matrix.os == 'macos-latest' && matrix.PYTEST_QT_API == 'pyside2') env: PYTEST_QT_API: ${{ matrix.PYTEST_QT_API }} run: | # open virtual display if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then export DISPLAY=:99.0 /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX +render -noreset (herbstluftwm )& else (sudo Xvfb :99 -ac -screen 0 1024x768x8 )& fi # run test MPLBACKEND='agg' pytest tests/ - name: Run examples shell: bash -l {0} if: matrix.os != 'windows-latest' env: MPLBACKEND: agg run: | labelme --help labelme --version (cd examples/primitives && labelme_json_to_dataset primitives.json && rm -rf primitives_json) (cd examples/tutorial && rm -rf apc2016_obj3_json && labelme_json_to_dataset apc2016_obj3.json && python load_label_png.py && git checkout -- .) (cd examples/semantic_segmentation && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .) (cd examples/instance_segmentation && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .) (cd examples/video_annotation && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .) pip install lxml # for bbox_detection/labelme2voc.py (cd examples/bbox_detection && rm -rf data_dataset_voc && ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt && git checkout -- .) pip install cython && pip install pycocotools # for instance_segmentation/labelme2coco.py (cd examples/instance_segmentation && rm -rf data_dataset_coco && ./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt && git checkout -- .) - name: Run pyinstaller shell: bash -l {0} if: matrix.PYTEST_QT_API == 'pyqt5' run: | # Build the standalone executable pip install PyQt5 -I --use-feature=2020-resolver # https://stackoverflow.com/a/68784578 pip install pyinstaller pyinstaller labelme.spec dist/labelme --version