Add briefcase app bundles to release assets

Description
closes #1074
This PR adds non-frozen apps bundled with briefcase, for all three platforms, to our github release action.  It was a joint effort with @GenevieveBuckley, with lots of fantastic discussion from everyone in in #1074.
In order to demonstrate the PR, I am temporarily commenting a few lines in our make_release.yml that must be uncommented before merging.  I'll also be tagging releases in my personal fork, so you can see the actual build artifacts and how they get added to the release notes.
Note: this PR also includes changes from #1287, since they were required to get mac working... but if that proposal is rejected, I can undo it here and figure out another way.
Please test!
At this point the thing we need the most is for people to test these bundles.  The artifacts will show up in releases in my fork for now.  Since these commits will not be tagged in the napari repo (and the github action requires a tagged commit), they will not build in this repository yet.
Download links: (updated 6/3)
Mac Bundle
Windows Bundle
Linux Bundle
Current status:
Mac: should be working without the open ... trick in the terminal anymore (though you will, as usual, need to go into security and say "open anyway").  The critical thing there was making sure that the _qt_resources.py is built and bundled with the app before code signing... and a check for that has been added to the github action.  Also, as @GenevieveBuckley pointed out in https://github.com/GenevieveBuckley, we will likely also need to notarize the app for it to run on Catalina.  (But I haven't tested anything on with catalina yet...).
Windows: should be fully working now, and I've patched the app to open with the non-windowed python.exe: which means a somewhat ugly cmd window will open up in addition to the napari app, but that is the compromise at the moment to have the built in ipython console also work.  Note it's very slow to start up the first time.  (actually, having that blank command window there is kinda nice in light of that because it shows you at least something is happening 😂)
Linux: Building fine (note, requires a ubuntu-16.04 VM on github to build), but the AppImage is not yet running, due to an upstream bug in the ctypes implementation in the briefcase Linux support package (so currently numpy will not work).  I think I have a fix for that, and I submitted a PR at https://github.com/beeware/Python-Linux-support/pull/1.
Installing plugins
As a reminder, to test out installing plugins, run (in the built in console)
import subprocess, sys
subprocess.run([sys.executable, '-m', 'pip', 'install', 'napari-dv']) # or any other package

Type of change

[ ] Bug-fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

How has this been tested?

[ ] example: the test suite for my feature covers cases x, y, and z
[ ] example: all tests pass with my change

Final checklist:

[ ] My PR is the minimum possible work for the desired functionality
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works

I'm also going to suggest two things (because I'm sure someone will end up bundling apps locally while they test something-or-other in the future):

We update the .gitignore to add all the bundle folder names: "macOS", "windows", "linux", "iOS", "android" (not that we're likely to support mobile platforms, sadly)
We add pytesst.ini or similar to only run tests in the source code (because otherwise pytest crashes on test collection if a bundle directory also exists)
pytest.ini[pytest]
testpaths = napari/

I tried out your app bundles
Windows

Plugins aren't working for me in the Windows bundle. I'm running Windows 10.

The plugin napari-dv does get installed to C:\Users\Genevieve\AppData\Local\Programs\napari\python\Lib\site-packages, but it never appears in the list of installed plugins from the GUI menu, and it never actually works when I try opening the toxo.dv file.
I tried closing & restarting the napari app in case it might recognize new plugins on startup, but that didn't help.

Second, as you've said, it's super slow

It's extremely slow when you try and start the actual installer (a window flashes up then disappears, then nothing for multiple seconds, then finally the installer starts)
It's also slow when starting the napari app the first time. It is a lot better when you open it anytime after the first time though!

Mac

Working well now, will be even better once we get code-signing in.
I was able to right-click -> Open, then open the app using the gatekeeper thing in preferences. Installing & using new plugins works well. I'm running Mac Catalina.

Linux

Your cytpes fix just got merged, so hopefully this is available for us to use soon.

looks like the new linux support package is live, and it fixes the ctypes/numpy issue.  Now there's a new one... which is that it can't build the icons.  This is easy enough to fix by just bundling the resources, but just for the sake of debugging... the bundle does include the pyside2-rcc binary at $APPDIR/use/app_packages/bin ... but the app is not finding it when it runs.
fwiw, the AppRun script does not add it to the PATH:
#!/bin/bash
export APPDIR=$(dirname "$0")
# echo "APPDIR IS $APPDIR"
export PYTHONPATH=$APPDIR/usr/app:$APPDIR/usr/app_packages
# echo "PYTHONPATH IS $PYTHONPATH"
# echo "PATH IS $PATH"
$APPDIR/usr/bin/python3 -s -m napari

but even when I extract the AppImage and try to run pyside2-rcc directly I get:
(base) talley@home-ubuntu:~$ '/home/talley/squashfs-root/usr/app_packages/bin/pyside2-rcc'
bash: /home/talley/squashfs-root/usr/app_packages/bin/pyside2-rcc: /opt/hostedtoolcache/Python/3.8.3/x64/bin/python: bad interpreter: No such file or directory

even if we solve all that, I wonder whether it's going to let us write anything to the AppImage... since they are read-only?  so prebuilding icons is probably best for linux

Plugins aren't working for me in the Windows bundle. I'm running Windows 10.

looks like the site-packages folder to which plugins are getting installed is not on sys.path.  We'll need to add it ourselves.  If you append the path (in the bundle) napari/python/Lib/site-packages to sys.path and then rerun napari.plugins.plugin_manager.discover(), plugins work

Plugins aren't working for me in the Windows bundle. I'm running Windows 10.

looks like the site-packages folder to which plugins are getting installed is not on sys.path. We'll need to add it ourselves. If you append the path (in the bundle) napari/python/Lib/site-packages to sys.path and then rerun napari.plugins.plugin_manager.discover(), plugins work

The plugin manager doesn't seem to discover anything new when I do that.
My C:\Users\Genevieve\AppData\Local\Programs\napari\python\Lib\site-packages contains:

directory named mrc
directory named mrc-0.1.5.dist.info
directory named napari_dv-0.2.4.dist.info`
file named napari_dv.py

Here's what happens when I try to re-discover plugins in napari:
Jupyter QtConsole 4.7.4
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

import sys

sys.path
Out[2]:
['C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\python\\python38.zip',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\python',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\\\app',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\\\app_packages',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\\\app_packages\\IPython\\extensions']

sys.path.append('C:\\Users\\Geneviece\\AppData\\Local\\Programs\\napari\\python\\Lib\\site-packages')

import napari

napari.plugins.plugin_manager.discover()
Out[5]: (0, [])

sys.path
Out[6]:
['C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\python\\python38.zip',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\python',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\\\app',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\\\app_packages',
 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\\\app_packages\\IPython\\extensions',
 'C:\\Users\\Geneviece\\AppData\\Local\\Programs\\napari\\python\\Lib\\site-packages']

I didn't see what happened before Out[2] and Out[5] ... but you also checked the plugin list to make sure it wasn't installed and tried to open a file?  For me, adding the site packages folder to sys.path (and possibly needing to re-run discover) repeatedly fixed it.  if you add the path before you import napari, you may still see (0, []) for the output of discover().  If you're certain it's not workint though, it'd be super helpful if you can figure out what might be going on in your install

I didn't see what happened between Out[2] and Out[5] ... but you also checked the plugin list to make sure it wasn't installed and tried to open a file? For me, adding the site packages folder to sys.path (and possibly needing to re-run discover) repeatedly fixed it. if you add the path before you import napari, you may still see (0, []) for the output of discover(). If you're certain it's not workint though, it'd be super helpful if you can figure out what might be going on in your install

Yes that's right, I looked at the list of installed plugins from the GUI menu before and after trying to rediscover the plugin.

i think the windows link above is updated with a version that should add the folder to the path for you, if you want to try it out.

Sadly no, there's still a problem with Windows. It hits this error before even opening the main viewer.
Here's the traceback @tlambert03
(base) C:\Users\Genevieve\AppData\Local\Programs\napari\app>C:\Users\Genevieve\AppData\Local\Programs\napari\python\python.exe -m napari
Traceback (most recent call last):
  File "C:\Users\Genevieve\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\Genevieve\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Genevieve\anaconda3\lib\site-packages\PyQt5\pyrcc_main.py", line 21, in <module>
    from PyQt5.QtCore import PYQT_VERSION_STR, QDir, QFile
ImportError: DLL load failed: The specified procedure could not be found.
Traceback (most recent call last):
  File "runpy.py", line 185, in _run_module_as_main
  File "runpy.py", line 144, in _get_module_details
  File "runpy.py", line 111, in _get_module_details
  File "C:\Users\Genevieve\AppData\Local\Programs\napari\\app\napari\__init__.py", line 46, in <module>
    from .viewer import Viewer
  File "C:\Users\Genevieve\AppData\Local\Programs\napari\\app\napari\viewer.py", line 8, in <module>
    from ._qt.qt_update_ui import QtUpdateUI
  File "C:\Users\Genevieve\AppData\Local\Programs\napari\\app\napari\_qt\__init__.py", line 5, in <module>
    import_resources()
  File "C:\Users\Genevieve\AppData\Local\Programs\napari\\app\napari\resources\__init__.py", line 119, in import_resources
    respath = build_pyqt_resources(fspath(target_file), overwrite=overwrite)
  File "C:\Users\Genevieve\AppData\Local\Programs\napari\\app\napari\resources\build_icons.py", line 211, in build_pyqt_resources
    check_call([_find_rcc_or_raise(), '-o', out_path, qrc_path])
  File "subprocess.py", line 364, in check_call
subprocess.CalledProcessError: Command '['C:\\Users\\Genevieve\\anaconda3\\Library\\bin\\pyrcc5.BAT', '-o', 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\app\\napari\\resources\\_qt_resources_0.0.0rc3_pyside2_5.14.2.py', 'C:\\Users\\Genevieve\\AppData\\Local\\Programs\\napari\\app\\napari\\resources\\res.qrc']' returned non-zero exit status 1.

Re: pre-building icons/resources
I was wondering if part of the reason napari can take so long to start up the first time is due to all of this resource building that happens dynamically. Could it be worth instead pre-building stuff before bundling for all platforms (Mac, Windows, Linux)? Maybe that would improve the user experience, at least in terms of first impressions.

Can you ping me when you want the new bundles checked again?

actually just finished getting them all working again, with some slight updates... if you have time, wanna try any of these? https://github.com/tlambert03/napari/actions/runs/124286104

actually just finished getting them all working again, with some slight updates... if you have time, wanna try any of these? https://github.com/tlambert03/napari/actions/runs/124286104

Unfortunately it's not working well for me :(
On both Mac and Windows, using subprocess to install the "napari-dv" plugin runs ok & puts the plugin files in the app site packages. But the plugin never appears in the list of installed plugins, and I can't open the toxo.dv file. I didn't try Linux.

Ok thanks!  I hadn’t had a chance to try them myself yet, so not totally surprised to hear that.  Will check the paths later today

Unfortunately it's not working well for me :(
On both Mac and Windows, using subprocess to install the "napari-dv" plugin runs ok & puts the plugin files in the app site packages. But the plugin never appears in the list of installed plugins, and I can't open the toxo.dv file. I didn't try Linux.

well, now I'm confused... I just tried the bundles on all three platforms.  It worked well for me! (including plugins) on both mac and windows (for the first time)... It also launched on (linux 🎉)... and could technically install plugins, but because the linux AppImage format is read-only, pip fell back to the user install folder.  That can be a separate conversation (whether we want to just use that behavior, or choose a different target directory that we install to and add to sys.path on linux... which would probably be my preference).  but we're very close.
here are the most recent bundles if anyone wants to try them:
Download links: (updated 6/4)
Mac Bundle
Windows Bundle
Linux Bundle
when install plugins, use the built-in console and run
import subprocess, sys
subprocess.check_output([sys.executable, '-m', 'pip', 'install', 'napari-dv'])

@GenevieveBuckley, if you do give those a try and they fail for you, maybe we can share screens to debug together sometime?

@GenevieveBuckley, if you do give those a try and they fail for you, maybe we can share screens to debug together sometime?

Sure, we could even do that straight after the meeting now if you like

Update from our conversation: my issue was because I was failing to run discover plugins. When that happens, newly installed plugins do get registered properly.
The discover plugins step needs to be added to the end of the GUI install plugins process (a new super cool feature @tlambert03 added)

newest bundles with "install package" dialog in Plugins Menu:
Mac Bundle
Windows Bundle
Linux Bundle

Ok, now I can't uninstall plugins properly with the GUI.
Installing napari-dv and then attempting to uninstall it produces
WARNING: Skipping napari-dv as it is not installed.

The error shown in the terminal is
Traceback (most recent call last):
  File "C:\Users\Genevieve\AppData\Local\Programs\napari\\app\napari\plugins\__init__.py", line 16, in prune
    meta.pop("version")
KeyError: 'version'

Thanks, need to fix that new function and add some tests!

Bundles are ready for testing again.
Mac Bundle
Windows Bundle
Linux Bundle
Everything should be working on all platforms now including linux and including plugin installation.  At this point, it mostly just needs to be tested (and the code can be cleaned up and approaches discussed). but I think the desired behavior is now in place.
To install plugins within the bundle, use the Plugins > Install/Uninstall Packages dialog within the app as shown in the gif below.  (I'm pulling out that widget into another PR to work on it in parallel)

Tested the latest bundles on Windows and Mac, here's what happened

Windows - plugin install/uninstall not working correctly
Mac - requires napari restart after plugin installation, then things work

Windows 10

Downloaded, unzipped & installed the napari app
Opened napari
Plugins > List installed plugins shows the built-in plugin engine plus napari-svg
Install napari-dv using Plugins > Install/Uninstall plugins. Installation appears successful.
Plugins > List installed plugins does not show the new napari-dv plugin. Can't open toxo.dv. The napari-dv files are added to C:\Users\Genevieve\AppData\Local\Programs\napari\python\Lib\site-packages.
Restart napari. Still no napari-dv in the list of installed plugins, still can't open toxo.dv.
Try uninstalling napari-dv using Plugins > Install/Uninstall plugins.  Receive "WARNING: Skipping napari-dv as it is not installed.". The files still exist at C:\Users\Genevieve\AppData\Local\Programs\napari\python\Lib\site-packages. Stalemate?

Mac Catalina

Downloaded, unzipped & installed the napari app
Navigate gatekeeper to open napari
Plugins > List installed plugins shows the built-in plugin engine plus napari-svg
Install napari-dv using Plugins > Install/Uninstall plugins. Installation appears successful.
Plugins > List installed plugins does not show the new napari-dv plugin. Can't open toxo.dv.
Restart napari. Now napari-dv does show up in the list of installed plugins, and I can open the toxo.dv file.
Uninstall napari-dv using Plugins > Install/Uninstall plugins.
The napari-dv plugin is removed from the list of installed plugins, no restart required. As expected, I can no longer open toxo.dv.

thanks as always @GenevieveBuckley!  I learned two useful lessons from this:

In a windows briefcase bundle, turns out sys.path is set at runtime using a _pth file , so using PYTHONPATH env-var in a sys.executable subprocess will not work.  (for more detail, see the issue I prematurely opened and then answered in https://github.com/beeware/briefcase/issues/418).  I add a step to bundle.py to add the site-packages folder to that _pth file.
On mac, the site-packages folder does not exist at first, and is created when the first plugin is installed (at which point python will automatically add it to sys.path... hence the need for reboot).  So I just create the empty folder in bundle.py so it will always be on sys.path in the bundle with no extra code in napari.

updated bundles:
Mac Bundle
Windows Bundle
Linux Bundle

With the latest bundle on Windows:

Plugins on Windows work, but you do need to restart after installing a new plugin (the discovery isn't happening automatically for new plugins)
Small user experience note - when installing a new plugin there's often a second or two delay between clicking install and seeing any indication that it's doing things. Would it be easy to print a line that shows up immediately when you click install/uninstall? Even if all it says is something kinda meaningless like "Beginning to install your plugin..." that would take away the worry that napari is laggy or unresponsive.

Latest bundle on Mac is working well! You need to go through gatekeeper to launch napari, and then everything works just like it should.

Plugins on Windows work, but you do need to restart after installing a new plugin (the discovery isn't happening automatically for new plugins)

man!  I could have sworn it was working... but I can repeat what you see.  Will fix!

Small user experience note - when installing a new plugin there's often a second or two delay

That installer was really just a placeholder... I've been working on a better plugin install window that discovers available packages and lets you install/uninstall/update, etc...  will push a PR soon, but looks like this:

Oh that is gorgeous, love it

this is now at a place where I'm probably done with it unless requests are made.  it's working on all platforms, with plugins, and a basic built in plugin installer (to be replaced by #1357).  Not sure exactly how we want to "review" this one... but it's ready.
updated bundles:
Mac Bundle
Windows Bundle
Linux Bundle

Does anyone know about the process to get a Software Publishing Certificate (I assume this is the right thing), so I don't have to install sketchy software? 😉

Running this app might put your PC at risk.

They're not wrong!!! 😂

Hi, downloaded https://github.com/tlambert03/napari/suites/821133320/artifacts/9061283 and ran on MacOS 10.14.6.
First thing I tried was installing ome-zarr plugin.
Plugins > Install Packages > Entered ome-zarr and clicked install....
Here's the full
log...
Collecting ome-zarr

  Downloading ome_zarr-0.0.8-py3-none-any.whl (7.6 kB)

Requirement already satisfied: requests in ./app_packages (from ome-zarr) (2.24.0)

Requirement already satisfied: vispy in ./app_packages (from ome-zarr) (0.6.4)

Collecting zarr

  Using cached zarr-2.4.0.tar.gz (3.3 MB)

Requirement already satisfied: numpy in ./app_packages (from ome-zarr) (1.18.5)

Collecting s3fs

  Using cached s3fs-0.4.2-py3-none-any.whl (19 kB)

Requirement already satisfied: toolz in ./app_packages (from ome-zarr) (0.10.0)

Requirement already satisfied: dask in ./app_packages (from ome-zarr) (2.19.0)

Requirement already satisfied: chardet<4,>=3.0.2 in ./app_packages (from requests->ome-zarr) (3.0.4)

Requirement already satisfied: idna<3,>=2.5 in ./app_packages (from requests->ome-zarr) (2.9)

Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in ./app_packages (from requests->ome-zarr) (1.25.9)

Requirement already satisfied: certifi>=2017.4.17 in ./app_packages (from requests->ome-zarr) (2020.6.20)

Requirement already satisfied: freetype-py in ./app_packages (from vispy->ome-zarr) (2.1.0.post1)

Collecting asciitree

  Using cached asciitree-0.3.3.tar.gz (4.0 kB)

Collecting fasteners

  Using cached fasteners-0.15-py2.py3-none-any.whl (23 kB)

Collecting numcodecs>=0.6.4

  Using cached numcodecs-0.6.4.tar.gz (3.8 MB)

Collecting botocore>=1.12.91

  Downloading botocore-1.17.20-py2.py3-none-any.whl (6.3 MB)

Collecting fsspec>=0.6.0

  Downloading fsspec-0.7.4-py3-none-any.whl (75 kB)

Requirement already satisfied: pyyaml in ./app_packages (from dask->ome-zarr) (5.3.1)

Requirement already satisfied: six in ./app_packages (from fasteners->zarr->ome-zarr) (1.15.0)

Collecting monotonic>=0.1

  Using cached monotonic-1.5-py2.py3-none-any.whl (5.3 kB)

Collecting docutils<0.16,>=0.10

  Using cached docutils-0.15.2-py3-none-any.whl (547 kB)

Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in ./app_packages (from botocore>=1.12.91->s3fs->ome-zarr) (2.8.1)

Collecting jmespath<1.0.0,>=0.7.1

  Downloading jmespath-0.10.0-py2.py3-none-any.whl (24 kB)

Using legacy setup.py install for zarr, since package 'wheel' is not installed.

Using legacy setup.py install for asciitree, since package 'wheel' is not installed.
Using legacy setup.py install for numcodecs, since package 'wheel' is not installed.

Installing collected packages: asciitree, monotonic, fasteners, numcodecs, zarr, docutils, jmespath, botocore, fsspec, s3fs, ome-zarr

    Running setup.py install for asciitree: started

    Running setup.py install for asciitree: finished with status 'done'

    Running setup.py install for numcodecs: started

    Running setup.py install for numcodecs: finished with status 'error'

    ERROR: Command errored out with exit status 1:
     command: /Applications/napari.app/Contents/Resources/Support/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py'"'"'; __file__='"'"'/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/tmp/pip-record-bowaqr9_/install-record.txt --single-version-externally-managed --compile --install-headers /Applications/napari.app/Contents/Resources/Support/include/python3.8/numcodecs
         cwd: /private/tmp/pip-install-fbp0bmi4/numcodecs/
    Complete output (102 lines):
    [numcodecs] setting up Blosc extension
    [numcodecs] compiling Blosc extension without SSE2 support
    [numcodecs] compiling Blosc extension without AVX2 support
    [numcodecs] setting up Zstandard extension
    [numcodecs] setting up LZ4 extension
    [numcodecs] setting up compat extension
    [numcodecs] setting up vlen extension
    WARNING: The wheel package is not available.
    running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.8-x86_64-3.8
    creating build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/lzma.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/astype.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/gzip.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/bz2.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/version.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/compat.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/checksum32.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/quantize.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/registry.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/pickles.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/fixedscaleoffset.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/__init__.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/zlib.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/delta.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/msgpacks.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/packbits.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/categorize.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/json.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    copying ./numcodecs/abc.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs
    creating build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_categorize.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_registry.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_vlen_utf8.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_gzip.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_delta.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_lzma.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_bz2.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/__init__.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_pickles.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_quantize.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_lz4.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_msgpacks.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_astype.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_packbits.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/common.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_fixedscaleoffset.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_compat.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_zlib.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_json.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_vlen_array.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_zstd.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_vlen_bytes.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_checksum32.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    copying ./numcodecs/tests/test_blosc.py -> build/lib.macosx-10.8-x86_64-3.8/numcodecs/tests
    running build_ext
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py", line 362, in <module>
        run_setup(with_extensions)
      File "/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py", line 310, in run_setup
        setup(
      File "/Applications/napari.app/Contents/Resources/app_packages/setuptools/__init__.py", line 161, in setup
        return distutils.core.setup(**attrs)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/dist.py", line 966, in run_commands
        self.run_command(cmd)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/Applications/napari.app/Contents/Resources/app_packages/setuptools/command/install.py", line 61, in run
        return orig.install.run(self)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/command/install.py", line 545, in run
        self.run_command('build')
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/command/build.py", line 135, in run
        self.run_command(cmd_name)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py", line 279, in run
        build_ext.run(self)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/command/build_ext.py", line 310, in run
        customize_compiler(self.compiler)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/distutils/sysconfig.py", line 187, in customize_compiler
        _osx_support.customize_compiler(_config_vars)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/_osx_support.py", line 429, in customize_compiler
        _find_appropriate_compiler(_config_vars)
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/_osx_support.py", line 167, in _find_appropriate_compiler
        if not _find_executable(cc):
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/_osx_support.py", line 36, in _find_executable
        path = os.environ['PATH']
      File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/os.py", line 675, in __getitem__
        raise KeyError(key) from None
    KeyError: 'PATH'
    ----------------------------------------
ERROR: Command errored out with exit status 1: /Applications/napari.app/Contents/Resources/Support/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py'"'"'; __file__='"'"'/private/tmp/pip-install-fbp0bmi4/numcodecs/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/tmp/pip-record-bowaqr9_/install-record.txt --single-version-externally-managed --compile --install-headers /Applications/napari.app/Contents/Resources/Support/include/python3.8/numcodecs Check the logs for full command output.

Don't know if that's user error or something else?

I also tried File > Open folder and chose a .zarr/ folder, but that gave me an error from builtin plugins:
PluginCallError: Error in plugin 'builtins', hook 'napari_get_reader': No module named 'zarr'

More stacktrace
```
...
/Applications/napari.app/Contents/Resources/app/napari/utils/io.py in read_zarr_dataset(path='/Users/wmoore/Desktop/ZARR/data/52.zarr/0')
    261         # load zarr array
--> 262         image = da.from_zarr(path)
        image = undefined
        global da.from_zarr =
        path = '/Users/wmoore/Desktop/ZARR/data/52.zarr/0'
    263         shape = image.shape
/Applications/napari.app/Contents/Resources/app_packages/dask/array/core.py in from_zarr(url='/Users/wmoore/Desktop/ZARR/data/52.zarr/0', component=None, storage_options=None, chunks=None, name=None, **kwargs={})
2856     """
-> 2857     import zarr
zarr = undefined
2858
ModuleNotFoundError: No module named 'zarr'
The above exception was the direct cause of the following exception:
PluginCallError                           Traceback (most recent call last)
PluginCallError: Error in plugin 'builtins', hook 'napari_get_reader': No module named 'zarr'
</details>

Cool thanks for trying @will-moore
I’ll try to see what’s happening with your plugin.  And we can add more builtins packages (like zarr) to the default bundle to fix our builtin

Hi @tlambert03, I tried this out on Linux (Ubuntu 18.04), and everything works perfectly.
I tried loading various images until I hit one that didn't work (.nii) , installed vtk through the Install/Uninstall Package(s) GUI, and then loading .nii images worked.
Looking forward to being able to use napari to distribute all our projects.

Awesome, thanks for trying!

First thing I tried was installing ome-zarr plugin.
Plugins > Install Packages > Entered ome-zarr and clicked install....

@will-moore, I'm unfortunately unable to recreate that... which is particularly frustrating given that this is supposed to be a repeatable bundled environment.  One interesting thing here is that the actual exception is coming from the briefcase support file (the package we use to bundle the app).   Would you be able to do me a favor and test something?  Since this is still just python inside the bundle, we can edit stuff under the hood.  Can you change line ~30-38 in /Applications/napari.app/Contents/Resources/Support/lib/python3.8/_osx_support.py to add a print statement:
def _find_executable(executable, path=None):
    """Tries to find 'executable' in the directories listed in 'path'.

    A string listing directories separated by 'os.pathsep'; defaults to
    os.environ['PATH'].  Returns the complete filename or None if not found.
    """
    print(executable, path)

then to make sure you see the output in the console, run the bundle directly in the terminal with
$ /Applications/napari.app/Contents/MacOS/napari

try to install numcodecs again with the built in installer, and see what the executable is that it's trying to use?
Also, then try using the built in installer to install the "wheel" package before trying again?

@tlambert03 the windows installer (napari-0.0.1rc12.msi) doesn't work for me on Windows 10.
After it starts (whether or not I have Microsoft Defender disabled), it disappears for a long time, and eventually this shows up:

Is there any info I can provide you to figure this out?

Bummer. Probably, but I don't know windows well to say how we get to any meaningful error message when an msi install stalls

Have you run this locally or just in Github actions? Hopefully if I can build Windows on my machine, my machine could install it too.
@GenevieveBuckley in your testing, you were using the Windows installer, right?

Worked well on another Windows machine 👍
But 👎 for me I guess...

Yeah, I’ve tested it locally on 2 different PCs :/

@GenevieveBuckley in your testing, you were using the Windows installer, right?

Yes, I've been trying out the Windows installer locally on an old Windows 7 laptop. I'm not sure if I've specifically tried the release candidate you mention napari-0.0.1rc12.msi, but if you feel it might help I could do that.

Hi @tlambert03 .
Running from the Terminal and simply trying to repeat my install of ome-zarr as above, I see this in the terminal (didn't even see the print statement yet)
e$ /Applications/napari.app/Contents/MacOS/napari
Traceback (most recent call last):
  File "/Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py", line 208, in discover
    with temp_path_additions(path):
  File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "/Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py", line 1085, in temp_path_additions
    path = [os.fspath(p) for p in path] if path else []
TypeError: 'int' object is not iterable

Printing out the path at that point gives 1.

Using pdb to get a stack trace from that point gave me
 this...
```
$ /Applications/napari.app/Contents/MacOS/napari
temp_path_additions 1
> /Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py(1086)temp_path_additions()
-> if isinstance(path, (str, Path)):
(Pdb) w
  /Applications/napari.app/Contents/Resources/Support/lib/python3.8/runpy.py(194)_run_module_as_main()
-> return _run_code(code, main_globals, None,
  /Applications/napari.app/Contents/Resources/Support/lib/python3.8/runpy.py(87)_run_code()
-> exec(code, run_globals)
  /Applications/napari.app/Contents/Resources/app/napari/__main__.py(176)()
-> sys.exit(main())
  /Applications/napari.app/Contents/Resources/app/napari/__main__.py(166)main()
-> view_path(
  /Applications/napari.app/Contents/Resources/Support/lib/python3.8/contextlib.py(120)__exit__()
-> next(self.gen)
  /Applications/napari.app/Contents/Resources/app/napari/_qt/event_loop.py(72)gui_qt()
-> app.exec_()
  /Applications/napari.app/Contents/Resources/app/napari/_qt/qt_main_window.py(351)_show_pip_install_dialog()
-> dialog.exec_()
  /Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py(209)discover()
-> with temp_path_additions(path):
  /Applications/napari.app/Contents/Resources/Support/lib/python3.8/contextlib.py(113)__enter__()
-> return next(self.gen)
> /Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py(1086)temp_path_additions()
-> if isinstance(path, (str, Path)):
(Pdb) c
Traceback (most recent call last):
  File "/Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py", line 209, in discover
    with temp_path_additions(path):
  File "/Applications/napari.app/Contents/Resources/Support/lib/python3.8/contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "/Applications/napari.app/Contents/Resources/app_packages/napari_plugin_engine/manager.py", line 1086, in temp_path_additions
    if isinstance(path, (str, Path)):
TypeError: 'int' object is not iterable
```

I accidentally found that I got the exact same error if I clicked 'install' without entering any package name. The UI showed ERROR: You must give at least one requirement to install (see "pip help install") but gave the stack trace above.
Hope that's useful??
Let me know if you want me to try anything else?

@will-moore, do you have something funny going on with your global PATH environment variable?

Don't think there's anything strange in there?
$ echo $PATH
/Users/wmoore/opt/miniconda3/bin:/Users/wmoore/opt/miniconda3/condabin:/Applications/gradle-6.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

But I guess it's possible some other dev config is screwing things up

nope, nothing strange in there.  But this is all helpful anyway.  thanks!

@tlambert03 install works for me on Windows. Something was blocking my installs. Great work!

ething was blocking my installs. Great work!

oh wait... even on the one that was broken at first?  Like, false alarm?

Yeah, false alarm. I realized it when an official MS install failed in a similar manner.
A restart fixed it for both.

The testing result in all environments:
Mac:

overall works as expected on my Catalina machine
copy to applications seems a little slow (maybe because most files are small?)
regarding the notarizing of app, technically you can get around by gzip the dmg and gunzip the dmg before installation to trick macOS to bypass the origin check, worked on my Catalina machine
able to install the plugin with subprocess run of pip, however, I needed to restart the application for the plugin to show up in the plugin list

Windows:

overall works as expected on my windows 10 machine
windows napari pops a second terminal-alike window with some warning messages, if this is not intended I can upload screenshots of it, if this is known then please ignore
recommend to add configuration to allow change of installation location
recommend to add the option to opt in/out of desktop icon and startup menu item
able to install the plugin with subprocess run of pip, however, I needed to restart the application for the plugin to show up in the plugin list

Ubuntu:
WIP

thanks @ziyangczi!  I'm surprised that you needed to restart to see the newly installed plugin.  thought that was fixed on the recent bundles... but I'm certain it's easily fixable.  just a little path wrangling.

copy to applications seems a little slow (maybe because most files are small?)

tell me about it.  not sure how to fix that.

regarding the notarizing of app, technically you can get around by gzip the dmg and gunzip the dmg before installation to trick macOS to bypass the origin check, worked on my Catalina machine

great!  Can you propose a modification to the bundle process here that achieves that?

windows napari pops a second terminal-alike window with some warning messages, if this is not intended I can upload screenshots of it, if this is known then please ignore

yeah that's an intentional workaround to have the builtin ipython console work.  not pretty, but better than having no terminal to work with.  see https://github.com/napari/napari/issues/1074#issuecomment-633303878 for background.

recommend to add configuration to allow change of installation location. recommend to add the option to opt in/out of desktop icon and startup menu item

yeah those would be nice.  I assume that's in the WIX config... have you worked with that before?

copy to applications seems a little slow (maybe because most files are small?)

tell me about it. not sure how to fix that.

when I dragged the napari to application folder (after open the dmg) it takes longer than I expected, I am assuming this is a side effect of files being small python code? it is not too big a deal since this is one time and whether it takes 10 sec or 1 min doesn't matter that much

regarding the notarizing of app, technically you can get around by gzip the dmg and gunzip the dmg before installation to trick macOS to bypass the origin check, worked on my Catalina machine

great! Can you propose a modification to the bundle process here that achieves that?

It is more of during installation, so after the user downloaded and unzipped the installation file, we may want to include instruction for them to first gzip and then gunzip the file, which I believe tricks macOS to think this installation file is created locally instead of being downloaded from chrome/github, hence trusting and allow installation and use of it.

recommend to add configuration to allow change of installation location. recommend to add the option to opt in/out of desktop icon and startup menu item

yeah those would be nice. I assume that's in the WIX config... have you worked with that before?
I am afraid not, I have not bundled things before. I was just a bit surprised to see the installation just happens after I clicked next and just went on without asking for anything. I have to defer to someone else more experienced in this 🙇

Update on ubuntu testing, I am not able to open the appimage on my ubuntu 20.04 remote desktop test machine:
I cannot open it directly, nothing happens when I double click it through UI, and an error occur when I try to run it from commandline
ubuntu@ip-10-168-101-46:~/Downloads$ ./napari-0.1.dev1-x86_64.AppImage
Traceback (most recent call last):
  File "/tmp/.mount_naparipPVKvO/usr/lib/python3.8/runpy.py", line 185, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/tmp/.mount_naparipPVKvO/usr/lib/python3.8/runpy.py", line 144, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/tmp/.mount_naparipPVKvO/usr/lib/python3.8/runpy.py", line 111, in _get_module_details
    __import__(pkg_name)
  File "/tmp/.mount_naparipPVKvO/usr/app/napari/__init__.py", line 46, in <module>
    from vispy import app
  File "/tmp/.mount_naparipPVKvO/usr/app_packages/vispy/__init__.py", line 30, in <module>
    from .util import config, set_log_level, keys, sys_info  # noqa
  File "/tmp/.mount_naparipPVKvO/usr/app_packages/vispy/util/__init__.py", line 9, in <module>
    from .logs import logger, set_log_level, use_log_level  # noqa
  File "/tmp/.mount_naparipPVKvO/usr/app_packages/vispy/util/logs.py", line 14, in <module>
    import numpy as np
  File "/tmp/.mount_naparipPVKvO/usr/app_packages/numpy/__init__.py", line 142, in <module>
    from . import core
  File "/tmp/.mount_naparipPVKvO/usr/app_packages/numpy/core/__init__.py", line 102, in <module>
    from . import _dtype_ctypes
  File "/tmp/.mount_naparipPVKvO/usr/app_packages/numpy/core/_dtype_ctypes.py", line 25, in <module>
    import _ctypes
ImportError: libffi.so.6: cannot open shared object file: No such file or directory

when I dragged the napari to application folder (after open the dmg) it takes longer than I expected

lol... sorry, when I said "tell me about it" ... I mean "man, tell me about it!  I agree!".  but yeah, ultimately it's a one-time thing, so not too worried about it.

we may want to include instruction for them to first gzip and then gunzip the file

oh I see... how is that better than the standard method of going into preferences and saying it's ok to open the program?

Update on ubuntu testing, I am not able to open the appimage on my ubuntu 20.04 remote desktop test machine:

oh no... looks like the ctypes fixes maybe aren't working for 20.04, or maybe 20.04 has changed libffi version..  See https://github.com/beeware/briefcase/issues/407, https://github.com/beeware/Python-Linux-support/pull/1 for some background

we may want to include instruction for them to first gzip and then gunzip the file

oh I see... how is that better than the standard method of going into preferences and saying it's ok to open the program?

It may not be an option for some people. I know my machine's security setting is locked up (probably by the company security software) to block out unapproved apps. I don't recall seeing an option to allow installation in preferences

It may not be an option for some people.

ooohhh.  It would show up in Security & Privacy:
in that empty area to the right of "allow apps downloaded from..."

Hmmm, not working for me. If I click on the bundled app, I get this message, which amazingly just keeps increasing in rudeness:

I hit cancel, head over to security settings, and click open anyway. Then I try to open it again, hit open, ... And nothing happens.
If I go to the terminal and try open /Applications/napari.app, I see:
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/napari.app.

Googling this error number turned up nothing of value...
I also tried going directly for the binary inside the bundle, which displays something more useful maybe:
 $ /Applications/napari.app/Contents/MacOS/napari
dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib
  Referenced from: /Applications/napari.app/Contents/Resources/Support/bin/python3
  Reason: image not found
/Applications/napari.app/Contents/MacOS/napari: line 5: 39742 Abort trap: 6           Support/bin/python3 -m napari

I'm on Catalina 10.15.5.
@tlambert03 btw, could you continuously update the links at the top of this issue to make testing easier?

Update: /usr/local/opt/gettext doesn't exist on my machine. That seems to be a place for brew symlinks:
 /usr/local/opt
 $ ls -l gh
lrwxr-xr-x  1 jni  admin    19B  5 Aug 14:12 gh -> ../Cellar/gh/0.11.1

I would hope that we don't require users to have homebrew to run napari! 😬

I would hope that we don't require users to have homebrew to run napari! 😬

Definitely not. That's weird... will look into it

I've been talking with Russell from the Beeware briefcase project, about the problem @jni is having with the app on a Mac without homebrew.
He suggests three things to try:

Re-building the bundled app with the latest version of the Python-Apple-support package in briefcase. They recently fixed an issue with libintl erroneously being added as a dependency there (fix was released on June 25th).
We can try removing homebrew/gettext from our CI that bundles the napari app (this is the same fix they made for the Python-Apple-support package, so we might need to do the same to avoid re-introducing the problem when we bundle)
We can work out how to bundle the libintl library in the napari app, regardless of whether it strictly needs to be there or not. (Apparently the linux builds have tools to search the binaries looking for stray DLL references then resolve and copy them into the app. Maybe we could do something similar for Mac)

Re-building the bundled app with the latest version of the Python-Apple-support package in briefcase. They recently fixed an issue with libintl erroneously being added as a dependency there (fix was released on June 25th).

I just tired to do a new build in a clean environement on my mac with the latest briefcase. I used python 3.7 so there maybe some differences from older versions which were 3.8.
I was hoping this might solve the above mac specific error https://github.com/napari/napari/pull/1289#issuecomment-668968178 but it looks like I can't even run the bundle on my own laptop :-(
Here is a google drive link to the bundle I made napari-0.3.7.dev65-macOS.zip.
I used the following commands done from a checked out version of this PR to create a clean virtual environment, install the necessary pieces and build the app.
python -m venv napari_bundle
source napari_bundle/bin/activate
pip install -r requirements.txt
pip install -e .
pip install pyside2
python -m pip install --upgrade pip
python -m pip install briefcase tomlkit wheel
python -m bundle

I probably could have simplified some of those pip install steps, but that's what I ran, and I got the linked zip file out at the end of this process. I have also verified that typing napari into the console from the venv launches napari successfully.
Unfortunately after the dmg install when I double click on the installed app the first time an icon bounces in the dock and then gives up, no dialog or anything. The application is 869.2MB, so there is definitely stuff there!! Subsequent attempts to open the app don't even yield a bounding icon in the dock, nothing happens.
Anyone have any ideas on what I got wrong?

Maybe @jni can confirm what's happening for him now?

@sofroniewn you can try this in the shell to see what exactly is going wrong for you, as I did above:
/Applications/napari.app/Contents/MacOS/napari

@GenevieveBuckley for me the new bundle works! 😂 🤷 😭 Which was amazing! But the disk image wasn't pretty:

and I couldn't install ome-zarr because the numcodecs compilation step failed.

and I couldn't install ome-zarr because the numcodecs compilation step failed.

Is that a problem with that plugin then, rather than a problem with the napari bundling?

Running
/Applications/napari.app/Contents/MacOS/napari

worked first time, and now app works just fine, so build seemed to be fine, not sure if running that command fixed the bouncing icon problem. Icon also worked fine for me on dmg. This is looking very good

@GenevieveBuckley

Is that a problem with that plugin then, rather than a problem with the napari bundling?

Yes it is! But it's a problem we will run into I'm sure! And something we might have some control over e.g. by preferring conda-forge installs if they are available. Conda defaults is also worth considering because a lot of the DL libraries are much better optimised there.

Quick reminder: there is no conda in the bundle.  For that we'd probably have to move away from briefcase and back to the idea I was pursuing in https://github.com/tlambert03/conda-bundler
Alternatively, we can identify a handful of packages to pre-install in the bundle to meet "most" needs.

Alternatively, we can identify a handful of packages to pre-install in the bundle to meet "most" needs.

This seems less risky to me! In fact if you can add numcodecs here that would solve a lot of issues already! 😂
Anywho, this looks so close, I can't explain how excited I am. =D

I am also +1 on adding numcodecs

I can see a Windows bundle in the newest release candidate, but no Mac app bundle? Is this right? https://github.com/napari/napari/releases/tag/v0.3.7rc0

I can look into this

@tlambert03 I am planning to update the platform to use ubuntu-latest from ubuntu-16.04, any objection?

no objection... but you may run into issues with briefcase (unless they've since solved them).  See: https://briefcase.readthedocs.io/en/latest/reference/platforms/linux/appimage.html
you could also try the docker build described on that page


For conda, install pip and wheel from conda so that they are compatible

This ensures the pip and wheel versions can work together; installing
wheel via pip can end up with pip/wheel combination that does not
work.
(Will merge asap, since currently the wheel cache on conda is broken because of incompatible wheel/pip versions.)

Ok, the reason for the failure was in my own environment, so it's not as urgent. (~/.local overrides the pip in the conda environments...). Nevertheless, no reason to install wheel from pip since it's also available in conda.

Seems fine to me, once the appveyor failure is investigated.

The appveyor failure seems to be a pip bug --- it tries to do something with path names > 260 chars without using long path prefix:
WindowsError: [Error 3] The system cannot find the path specified: 'c:\\\\users\\\\appveyor\\\\appdata\\\\local\\\\temp\\\\1\\\\pip-teiq9q-uninstall\\\\users\\\\appveyor\\\\appdata\\\\local\\\\temp\\\\1\\\\pytest-0\\\\test_find_benchmarks0\\\\env\\\\f30407b4f44fec871bacf62ec5e2a74b\\\\lib\\\\site-packages\\\\pip\\\\_vendor\\\\requests\\\\packages\\\\urllib3\\\\packages\\\\ssl_match_hostname\\\\_implementation.py'

Replaced with a different approach --- try to install wheel from conda, and if it fails, disable the wheel cache.

Closing, needs work but not going to do that in near future.


I have a probelm MQTT Plugin is not working

Hi, there
I tried few days ago this plugin with cordova but it is not get working
can you please do example to me for connect and publish
all your efforts are appreciated

I can help you if you need it.


Fix taskbar restarting issue

Bug description
The taskbar icon stays open.
Repro steps
Run Notification sample program, set the notify icon active. Open Display settings, and change the monitor's scaling (which causes recreating taskbar).
The notify icon stays open even if I close the notify icon.

I sent PR 10 days ago. Waiting for your reply.

I'm just speaking for myself, some people have more time due to Corona, I have a lot less.
Handling work, kid, house, dog, wife etc... this means I'm struggling to find time to handle all the OSS work...
And there are also more urgent matters, for instance I still have issues with the dotnet core 3.0 supportfor this library, there is some weird build / runtime issue, which I REALLY need to fix.
So really thank you for your contribution, I or someone else will test and check the change as soon as possible, but it might take a bit longer. Hope you understand.

@Lakritzator
Thanks for your reply. I'm very sorry to have bothered you so much.
This fix isn't really a big issue. I understand your situation and I am going to wait for it. Thank you for the great library.

I finally managed to take a look at it, great catch.
Was able to reproduce it, and the change fixes it. (makes sense)

@Lakritzator
Thank you for your response.


Automated Package Upgrade

:tada: This PR is included in version 25.3.521 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[BUG] Error: documentStoreServices.insertIntoVectorStore TypeError: fetch failed

Describe the bug
After creating chunks

im trying upsert to db

no matter on db (also tried local chromadb) - same error

Status: 500
Error: documentStoreServices.insertIntoVectorStore - Error: documentStoreServices._insertIntoVectorStoreWorkerThread - TypeError: fetch failed
also tried another splitting (now its 500/100)  - same error
and different embedings model  - same error
Setup

Installation docker,
Flowise Version 2.1.2
OS: macOS,
Browser Opera

@MaciekStrzelbicki How did you solve this? Got the same error following the tutorial here: https://www.youtube.com/watch?v=lJOZiRoZNJw

I'm in the same condition to @ChristianKniep, got the same error after following that tutorial as well.

same here :(

@gino8080 @KALULOLO @ChristianKniep @MaciekStrzelbicki
In the Ollama node configuration, use http://host.docker.internal:11434 instead of http://localhost:11434.
Since Ollama is installed on the host machine and not within Docker, Docker containers cannot connect to the host’s services via localhost. By using host.docker.internal, you enable Docker to communicate with services on the host.


Add ability to split row groups by reading parquet footers

Codecov Report

Merging #232 into master will decrease coverage by 0.11%.
The diff coverage is 86.66%.

@@            Coverage Diff             @@
##           master     #232      +/-   ##
==========================================
- Coverage    86.3%   86.19%   -0.12%
==========================================
  Files          69       69
  Lines        3680     3693      +13
  Branches      560      506      -54
==========================================
+ Hits         3176     3183       +7
- Misses        409      410       +1
- Partials       95      100       +5

Impacted Files
Coverage Δ

petastorm/reader.py
92.52% <ø> (+2.29%)
:arrow_up:

petastorm/reader_impl/reader_v2.py
87.83% <100%> (+2.7%)
:arrow_up:

petastorm/etl/dataset_metadata.py
87.14% <85.71%> (+0.52%)
:arrow_up:

petastorm/pytorch.py
96.15% <0%> (-3.85%)
:arrow_down:

petastorm/workers_pool/tests/test_workers_pool.py
96.75% <0%> (-2.6%)
:arrow_down:

petastorm/reader_impl/worker_loop.py
95.55% <0%> (-2.23%)
:arrow_down:

petastorm/workers_pool/process_pool.py
92.98% <0%> (-1.76%)
:arrow_down:

petastorm/tf_utils.py
79.13% <0%> (-1.74%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f50e8a4...b5fd541. Read the comment docs.

Are you sure setting infer_schema=False does not create unnecessary barrier for a user? Isn't the worst scenario if the metadata is not there is that the user would get a message with instructions on how to fix?

So I think until we fix the performance of these out of the box parquet datasets I am ok with it being a bit of a barrier to use them. We could simply look for the petastorm specific metadata and fall back to automatically infer things however I worry that for a random user they would be turned off by the poor performance we usually have with small rows of scalars. It might be better to have a bit of a barrier to have users understand this is a work in progress and not a highly supported usecase right now.


After config.tsx is changed. config.js is not re-generated

After working for a while, changes to config.tsx no longer regenerates config.js. Tried restarting, stripping down config.tsx, touching config.js, etc. It started working again after I chose Preferences > Edit Oni config (which also help verify that I was editing the right copy of config.tsx.
Can't reproduce anymore.
v0.3.1

Can reproduce again on master (v0.3.2 / 26d015cd074fdc4f02e597725bfef9e433ad3c70).
This time Preferences > Edit Oni config doesn't fix it.

@hboon Can you still reproduce this error on v0.3.4?

@badosu Yes, I can reproduce it in v0.3.4, download from the Releases page.

@hboon Are you sure there are no compilation issues in your config.tsx file?
If backup your current config and start a new one, does the new one not change the configuration?

@badosu Here's what I just tried:

Open config.tsx and config.js in One itself.
Change config.tsx to:

import * as React from "/Applications/Oni.app/Contents/Resources/app/node_modules/react"
import * as Oni from "/Applications/Oni.app/Contents/Resources/app/node_modules/oni-api"

export const activate = (oni: Oni.Plugin.Api) => {
    console.log("config activated57")
}

Switch to the config.js tab (it's not refreshed. I have vim.setting.autoread enabled)
Run: bd
open config.js again and it's still not refreshed

I repeated the above after starting a new Oni window (since most of the config has been removed, this is pretty much a blank slate?) with the same result.
Maybe I missed something obvious?

Are you editing ~/.config/oni/config.tsx?

Yes

I find sometimes that to get the transpilation to work I have to got via the QuickOpen menu to Edit User Config and then make the change in the split and save it.
Indicative of a bug no doubt, but maybe an interim solution?

I just tried that (QuickOpen) and Preferences > Edit Oni Config and while the file is opened, editing it doesn't update config.js.
It's no biggie for now though, I'm not making much changes to my configuration for now. So if no one else is observing this issue, maybe it's just me.

@hboon can you open Help > Developer Tools before you try to save your config.tsx file and see if it generates any error messages when you save?
It should output the following if successful:

When I move to a tab which has config.tsx open, I see this in the console (set to verbose):

I see something similar (if not exactly the same) when I move to tab with config.js open. When I save config.tsx, nothing else gets logged to the console.
When I save config.js instead, console.log() calls in there get called correctly.
I see different messages if I go to a .swift file or .h. Something about "No language server registered". So it seems to be working otherwise.

I can reproduce on 0.3.4 from releases and on master as well

So, is there any workaround till fix is in place?

I figured out the problem at least for me: My ~/.config/oni directory is symlinked to my dotfiles repo. If I remove the symbolic link and copy over my config.tsx it will compile just fine.

FWIW, My ~/.config/ is symlink-ed a folder in my Dropbox.

@hboon My workaround probably won't work for you. The issue still stands that oni fails to compile config.tsx properly when the ~/.config/oni directory (and therefore any of its parent directories) is symlinked.

@Towerism that's good though, a least if it's reproducible, someone can fix it :)

@hboon and @Towerism one option as a workaround is to set an ENV variable in your .bashrc or .zshrc which is $ONI_CONFIG_FILE if the variable is present oni will use that as the path to your config, let me know if that helps at all, will look into getting it to follow symlinks when I get a chance

@Akin909 This worked for me: export ONI_CONFIG_FILE=~/.dotfiles/oni/.config/oni/config.tsx.
@hboon I restarted my X11 session to make sure that the environment variable would be picked up by oni.


Separate master and worker extra file

Separate master and worker extra file into extraNFTablesWorkerFile and extraNFTablesMasterFile

/lgtm
/approve


Alignment with Github Severity Levels

Description
Align prisma severity levels with github advance security so they show up as expected in github.
Closes #8

Types of changes

Bug fix (non-breaking change which fixes an issue)

Checklist

[x] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[x] I have added tests to cover my changes if appropriate.
[x] All new and existing tests passed.

@alexthaii I no longer own this project. Please raise this with your account team.


add support for bitreverse

again, will add tests soon to this PR.

looks great! please add a few tests

okay. tests added

okay. there's one test failure which seems unrelated to me. I will check what's going on

it's definitely related but not obvious to know how my changes affected this test. The problem is that this test (https://github.com/google/souper/blob/master/test/Infer/syn-double-insts/syn-distributive-law-const.opt) fails to infer the RHS after adding support for bitreverse.

LGTM, thanks!

please resolve conflict and then I'll merge

TODO/note to self: Zhengyang noted that test file contains the hardcoded path of the source file. This needs to be fixed.

please don't mix Jenkins changes and bitreverse changes in one PR

besides that and resolving the conflict, this is ready to go, I think?

oops. yes. i had no idea i am messing this PR too with my jenkins testing. i will do a force-push and fix it.
Yes, besides the failing test that needs investigation and resolving the conflict, it's ready. i will let you know when it's completely ready to merge

great, please squash

ok. this is ready to merge now after Zhengyang's fix.

thanks!!


Option for "Do Not Overwrite Target Field Value with Null Value"

It would be great to have a configuration option to tell the rollup process not to delete an existing value in the target field if there is nothing to roll up. Essentially saying "if you have an updated value then update the target field, but otherwise leave it alone."
A sample use case is that we have a field on Contact called "Date of Last Soft Credit". DLRS is set up to roll up the max date of child soft credit records to that field. That works well.
However some Contact records already have a legacy date in that field that we want to keep, even though they don't have corresponding soft credit objects. Currently DLRS deletes that legacy date value when it batch calculates the rollups, since there are no child soft credit records. It would be great to be able to tell it not to do that.
Obviously this wouldn't be the ideal default behavior, but to be able to turn it on would be super useful. I've seen similar settings in tools like formassembly (screenshot below), dataloader.io, etc.

Yes @sd5000 thanks for this suggestion, its been covered before in another enhancement request, so this maybe a dupe, for now though i'll leave it open. Thanks again!

@afawcett where was this feature implemented, because I'm getting populated values nulled by the tool in version 2.11

This would be a helpful feature. I recently had to roll up to a newly created field since this option was not available.

Yes @sd5000 thanks for this suggestion, its been covered before in another enhancement request, so this maybe a dupe, for now though i'll leave it open. Thanks again!

Any update on this item? Thanks!

Yes @sd5000 thanks for this suggestion, its been covered before in another enhancement request, so this maybe a dupe, for now though i'll leave it open. Thanks again!

Any update on this item? Thanks!

Hello, this enhancement request 'Do Not Overwrite Target Field Value with Null Value' is affecting me - wondering if there is any update?

Similar to #161, different need but similar engine changes. Mentioning to link them together.


feat: add score document support in csv

This PR allows user create a CSV file contains three columns, col1 and col2 are content, and col3 indicates the similarity between col1 and col2. Besides, I refactored the build_finetuning_dataset function.

[ ] This PR references an open issue
[x] I have added a line about this change to CHANGELOG

Added some comments, if we really introduce the CSVContext class, we also need to update the documentation.

Ok probably, there is nothing in the documentation about building dataset from CSV, because we only apply it automatically if one provides a file path in the csv.

documentation will be added in a seperate PR: https://github.com/jina-ai/finetuner/issues/688#issuecomment-1476328051


Is the demo working?

When I open https://rawgit.com/trafforddatalab/leaflet.reachability/master/leaflet.reachability_example.html I dont see any layer. I can open the menu on the left, but changing things there does not change anything on the map.
Am I doing it wrong?

Hi Tobias,
Thanks for your interest in the reachability plugin. I've checked the demo and it seems to be working fine.

Have a look at our video tutorials for more info.
Best wishes,
Henry


[Bug] BetterDiscord version 1.9.6 doesn´t work

Before Reporting

[X] I found no existing issues matching my bug
[X] My issue is not caused by a plugin or theme

Describe the Bug
BetterDiscord simbol appears on the bottom right, but when i enter my discord client my plugins are not appearing as loaded, and also when i go to my discord configuration there is only one section that is being display and i cannot interact with it (attached image)

Expected Behavior
BetterDiscord 1.9.6 funcionality
Steps To Reproduce
When trying to launch my Discord client with BetterDiscord installed.
Operating System
Windows
Discord Version
Stable
BetterDiscord Version
v1.9.6
Anything else?
Even if i tried to reinstall, uninstall and install again, the issue is still there.

You should join the support server, there are multiple solutions for this problem in the #known-issues channel.

You appear to be a Spanish LATAM viewer.
The team is already aware of this and a fix is already in the works.
For now, to use BD. Set your language to normal Spanish, and restart your client.
The issue is that BD isn't localized for LATAM Spanish yet. So it doesn't know what to render.

You appear to be a Spanish LATAM user. The team is already aware of this and a fix is already in the works. See 591823f
For now, to use BD. Set your language to normal Spanish, and restart your client.
The issue is that BD isn't localized for LATAM Spanish yet. So it doesn't know what to render.

I did what you told me and BD works again, i hope it gets fix soon, thank you very much.


New app: "Langton's Ant" (cellular automata)

An app to run the Langton's Ant automata on Tidbyt. Supports multiple ants and rule sets.
See: Langton's Ant (Wikipedia)

I have read the CLA Document and I hereby sign the CLA


dockerd rootless: include patch to read /etc/cdi and /var/run/cdi

Description of changes

Include a Docker upstream patch so that the Dockerd rootless daemon is able to read the Container Device Interface (CDI) spec files.
Fixes: https://github.com/NixOS/nixpkgs/issues/339999
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

After including this patch in nixpkgs, I am able to access the Nvidia GPU with rootless Dockerd.
❯ DOCKER_HOST=unix:///run/user/1000/docker.sock docker run --rm --device=nvidia.com/gpu=all -it ubuntu:latest nvidia-smi -L
GPU 0: NVIDIA GeForce RTX 4090 (UUID: GPU-c475e08b-0cc5-f5aa-4326-99699429b449)
GPU 1: NVIDIA GeForce RTX 2080 SUPER (UUID: GPU-5cca1a6f-7cee-b649-40f0-2d3ecb0aa207)

Add a :+1: reaction to pull requests you find important.

I see this is being actively reviewed in https://github.com/moby/moby/pull/48541, I'd like to wait for approval over there.

Yes, right. Closing this one.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/nvidia-docker-container-runtime-doesnt-detect-my-gpu/51336/10


use simple-sha instead of crypto

crypto in browser don't work well
webtorrent uses simple-sha so should you

Will do, thanks for the info. :D
One thing to note is that mutable-webtorrent doesn't work in the browser because there's currently no access to the DHT in browser clients.
As per this issue I want to eventually turn hybrid clients into proxies for the DHT so that a web clients will be able to look up mutable torrents.

It should also use a pure JS version of ed25519

Did this as part over<EMAIL_ADDRESS>Also replaced ed25519-supercop with sodium-universal which has a pure JS/WASM version for browsers. 😁


Dual GPU

Describe the bug
I have a Intel iGPU (for quicksync) and a AMD RX 7900 XT.
Gamescope seems to be running on the Intel iGPU.
glxinfo | grep 'OpenGL renderer' does return the correct AMD gpu.
I run the bazzite-deck image
What did you expect to happen?
That gamescope and games would run on the dGPU
Output of rpm-ostree status
State: idle
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-deck:latest
                   Digest: sha256:26353d54cc504fb318a98bfe3eca6e68addc70603b15b368ed65f45ef535ec5d
                  Version: 39.20240209.0 (2024-02-10T04:36:23Z)
          LayeredPackages: htop intel-gpu-tools
            LocalPackages: lact-0.5.2-0.x86_64 sunshine-0.21.0-1.x86_64
                Initramfs: '"-I /etc/crypttab /etc/modprobe.d/amdgpu.conf /etc/modprobe.d/deck-blacklist.conf"'

  ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-deck:latest
                   Digest: sha256:26353d54cc504fb318a98bfe3eca6e68addc70603b15b368ed65f45ef535ec5d
                  Version: 39.20240209.0 (2024-02-10T04:36:23Z)
          LayeredPackages: intel-gpu-tools
            LocalPackages: lact-0.5.2-0.x86_64 sunshine-0.21.0-1.x86_64
                Initramfs: '"-I /etc/crypttab /etc/modprobe.d/amdgpu.conf /etc/modprobe.d/deck-blacklist.conf"'

Hardware
MINISFORUM AR900i - Intel Core i9 13900HX
AMD RX 7900 XT
Extra information or context
No response

/usr/bin/export-gpu is included in gamescope-session for this purpose.

Sadly this does not seem to work.  Or to be exact, it might work for gamescope. It shows the process on the intel GPU, but no noticeable utilisation, so gamescope could be running on the AMD GPU. Do you know of a way to check on what it is currently running?
However, depending on which game I try to start it will still use the iGPU.
For example Hogwarts Legacy starts on the iGPU, Sackboy launches on AMD. Both are using Proton.

That is odd.
Do you have more information available about those two games, like which Rendering API they use, etc.
The output of vulkaninfo | grep -A 1 deviceType would also be helpful to know what type mesa has assigned your devices.

Sure:
Both games run on Unreal Engine 4 with DirectX 12.
vulkaninfo | grep -A 1 deviceType
WARNING: [Loader Message] Code 0 : loader_scanned_icd_add: Driver /usr/lib64/libvulkan_nouveau.so supports Vulkan 1.3, but only supports loader interface version 4. Interface version 5 or newer required to support this version of Vulkan (Policy #LDP_DRIVER_7)
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Manifest ICD for "/usr/lib64/libvulkan_nouveau.so" contained a 1.1 or greater API version, but vkEnumerateInstanceVersion returned 1.0, treating as a 1.0 ICD
        deviceType        = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName        = AMD Radeon RX 7900 XT (RADV NAVI31)
--
        deviceType        = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
        deviceName        = Intel(R) Graphics (RPL-S)

Alright.
Since the game uses DX12 it probably uses vkd3d, which appears to have fixed this relatively recently (https://github.com/HansKristian-Work/vkd3d-proton/issues/1809).
Could you try with GE-Proton8-32?

I just tried multiple versions of proton, including experimental. It still used the iGPU.

Not sure if that's relevant in your case, but did you try to disabled your laptop screen and only output on the screen connected to your egpu ?

It isn't a Laptop. However, the HDMI is directly connected to the dGPU and this is the only video output.

https://github.com/ublue-os/bazzite/issues/757#issuecomment-1947418541, this is interesting, because i have a different order...
(In my case i have a AMD iGPU and nVidia dGPU)
$ vulkaninfo | grep -A 1 deviceType
	deviceType        = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
	deviceName        = NVIDIA GeForce GTX 1080 Ti
--
	deviceType        = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName        = AMD Radeon Graphics (RADV RAPHAEL_MENDOCINO)


Allows use of custom safe area inset

Motivation
We want to show content below the tab view, which behaved poorly on iPhone X because of the content safe area being added automatically. I added the ability to override this behaviour.
Test plan
Create a BottomTabBar view and add content below it on iPhone X, then change the new safeAreaInset property.

@satya164 - this seems reasonable to me, lmk what you think. we could add the same to material top

this solves #11

Would it be possible to create a new version including this change?

it's released in the latest version


Update Steps

Wipe Data and Block are now Wipe company data and Block access

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 9e2bdb60-b559-ddf3-0eec-be4943fc94fd
Version Independent ID: 5b176c0f-6c35-a187-2ccb-53a23e154978
Content: Step 3 - Wipe and block a former employee's mobile device - Microsoft 365 admin
Content Source: microsoft-365/admin/add-users/remove-former-employee-step-3.md
Service: microsoft-365-business
GitHub Login: @kwekuako
Microsoft Alias: kwekua

@rf-bcit Thank you for your feedback. We have made changes to the document via PR#https://github.com/MicrosoftDocs/microsoft-365-docs/pull/12304
Once the author approves, the changes will be live.
Thanks
Sri


chore: Bump tiled to 0.8.0

Description
Bump flame_tiled to 0.8.0 and release flame_tiled 1.2.0 which apparently I forgot to release two weeks ago.
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the
relevant checkboxes ([x]). This will ensure a smooth and quick review process.

[x] The title of my PR starts with a Conventional Commit prefix (fix:, feat:, docs: etc).
[x] I have read the Contributor Guide and followed the process outlined for submitting PRs.
[x] I have updated/added tests for ALL new/updated/fixed functionality.
[x] I have updated/added relevant documentation in docs and added dartdoc comments with ///.
[x] I have updated/added relevant examples in examples.

Breaking Change
Does your PR require Flame users to manually update their apps to accommodate your change?

[ ] Yes, this is a breaking change. (Indicate it in the Conventional Commit prefix with a !,
e.g. feat!:, fix!:).
[x] No, this is not a breaking change.

Aaah, I thought we already merged this:
https://github.com/flame-engine/flame/pull/1344


Doc: fix broken link to 'it all begins with a plan' page

Hi,
In https://docs.dagger.io/1221/action the link to it all begins with a plan is broken and goes to https://docs.dagger.io/1221/1202-plan.

Hi @skurtzemann,
Thanks for your contribution. Can you please edit your commit so that it begins with Docs: fix broken link to 'it all begins with a plan' page.
Also, can you please sign it: https://github.com/dagger/dagger/pull/2092/checks?check_run_id=5885216498 ?

Sorry to close this, but it looks stale and there's actually two links that #2125 solves.


Changed Travis configuration to test in newer node versions

It's just to see the node version restriction in package.json is really needed.

Failing due to https://docs.travis-ci.com/user/pull-requests/#Security-Restrictions-when-testing-Pull-Requests :(

Merged. Thanks, @dpobel !


New backing field (_steamProfile) for UnturnedPlayer.

This should prevent excessive downloads from Steam. Not sure if this will dramatically increase memory usage or not, but at least less web requests will be made.

You used master branch instead of dev, but its ok I changed it


chore(storage): Update azure-storage-blob-go to v0.14

When using azure-event-hubs-go in conjunction with golang-migrate, a shared dependency, relating to azure-storage-blob-go, forces one to either use an older version of golang-migrate or update azure-storage-blob-go.
This breaks builds as there are breaking changes introduced in azure-storage-blob-go.
I'm in no way sure this is the best way to accomplish this - so feel free to correct any missed parts.
I will update the PR with tests and changelog.
Thanks in advance.

[ ] All tests passed
[ ] Add change to changelog.md

Environment

OS: Linux
Go version: 1.17 & 1.18

As noted by the build this also puts a requirement on using go 1.16 or above, I'm not sure if this is acceptable for this library?

WARNING - this does not work.
I've now struggled with this for a while. essentially, the changes to azblob seems to not work. hence leases aren't created and no events are processed.
biggest problem right now is, it is not obvious how to use the azblob client without the client provided keys, to me at least.
any insights are greatly welcome, and I'll happily drive this PR home. Right now the solution for me has been to accept an older version of go-migrate :-(


http: removing deprecated filter names

Risk Level: low
Testing: n/a
Docs Changes: n/a
Release Notes: inline
part of #9953

/wait

/wait


Post refactor, Spinner is not central to plot

After #150 - please could someone sort out the placement of the spinner in PlotlyPlot.tsx

See https://github.com/VEuPathDB/web-components/pull/150/files#r656460115

Now fixed by #150 - thanks @chowington


The supplied role does not have the rights to perform the requested operation

Hello ,
I know that the same issue with the same title has been asked before in january this year. However there was no solution given to that person that"s why I will try it again.
I have set up an Azure AD application with a client ID and secret (the secret is not expired). some time ago but the script that I've run stopped working and stopped collecting data from the partner center and provides me the error message: The supplied role does not have the rights to perform the requested operation.
My script starts with the following:
#Check if the CSP powershell module is installed, otherwise install it.
if (-not (Get-Module -Name "PartnerCenter")) {
  Install-PackageProvider Nuget –Force
  Install-Module -Name PartnerCenter -Confirm:$False -Force
}

$appId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$appSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' | ConvertTo-SecureString -AsPlainText -Force
$tenantId = 'xxxxxxxxxxxxxxxxxx'

#Perform this code if you want a new refreshtoken the token will be placed in the Csp folder in the txt file "Refreshtoken"
#$credential = New-Object System.Management.Automation.PSCredential $appId, $appSecret
#$token = New-PartnerAccessToken -Consent -Credential $credential -Resource https://api.partnercenter.microsoft.com -TenantId $tenantId
#$token.RefreshToken  | Out-File #Check if the CSP powershell module is installed, otherwise install it.

#The refreshtoken was created by the Code above. Rerun the code above if you want to get a new token
$refreshToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# This will create a new accesstoken based on the refreshtoken so that the script will run automatically without any user interaction
$Newtoken = New-PartnerAccessToken -RefreshToken $refreshToken -Resource https://api.partnercenter.microsoft.com -ApplicationId $appId -ErrorVariable ExpiredToken
Connect-PartnerCenter -AccessToken $Newtoken.AccessToken -ApplicationId $appId  -TenantId $tenantId

As you can see I've saved the refreshtoken and i will Get-Content the refreshtoken from the txt file and use it to login again with the partner center. This seems to be the new way of connecting to the partner center.
However by doing this I still get the same error message. Is there someone who also retrieved this error message. Is this some kind of bug? I have no clue what it means with the suplied role.

@bilalAchahbar what operation are you trying to perform? The main reason yo will encounter this error is that you are attempting to perform an operation that requires Admin Agent privileges and the identity you are using does not have the role assigned.

after the connection that doesn't work. I run this command `Get-PartnerCustomer´ to start my script where i fetch every customer and their billing hours per resource type. Now for you feedback over the admin agent is strange. It could be that someone in my organisation stripped the AD application from some admin roles. Can you guide me how to check what roles I need and where I can find the permissions of my Azure AD application. Because I didn't change my script (that runs every day for the past months) and somehow it stopped working with that error message.

@bilalAchahbar you will need to check if the user, that was used to generate the refresh token, is still a member of the appropriate admin role in Partner Center. Usually the role used is the Admin Agents role because it can perform all operations the Partner Center API currently supports. You can check if the account has the appropriate rights by using the user management page in Partner Center.

Please let us know if you are still having any issues.


Remove common prefixes from D3D constants

Is this a good idea? I think it's a good idea. Enums are super obnoxious otherwise. Like, 3x worse than C.

It's not something I care much about, but I think we should be strict about this, and adhere as much as possible to how they're defined in their respective headers. It may also be somehow confusing for someone who never used them, eg. looks for help at MSDN and then compares.
Btw. are enums best for this? There places in winapi where enum's fields are equal, does Rust allow this?

No, it doesn't, and I strongly disagree with using Rust enums for this, but that's the decision @retep998 seems to have made.


GPG sign binaries; include pubkey in srcs

Proof of function: https://github.com/teaxyz/cli/actions/runs/5502595335
closes #633

I'm an idiot, we need signatures for each of the tarballs, not the binary.
Most projects aren’t single binary projects and we want this to be generalized.

Agreed. required as of gpg2 sadly. I mean, the safety of requiring actual passwords, and having a daemon deal with credential management was likely a well-considered decision, but it's overkill for this use case.

have we published our GPG public key in a standard location?
I would have thought https://tea.xyz/KEY (but not KEY) is a standard of some sort.

we haven't and I just regenerated it because we had been signing with my<EMAIL_ADDRESS>key.
the standard is usually to publish to public key servers. In the web3 space, I usually see it prominently mentioned alongside download locations so concerned individuals can check it.


[BUG]: Test Issue 23

Bug Description
N/A
Logs
N/A
Screenshots
No response
Additional Environment Information
No response
Steps to Reproduce
N/A
Expected Behavior
N/A
CSM Driver(s)
N/A
Installation Type
No response
Container Storage Modules Enabled
No response
Container Orchestrator
N/A
Operating System
N/A

/sync


Synthesis failed for Google.Cloud.RecaptchaEnterprise.V1Beta1

Hello! Autosynth couldn't regenerate Google.Cloud.RecaptchaEnterprise.V1Beta1. :broken_heart:
Here's the output from running synth.py:
Cloning into 'working_repo'...
Switched to a new branch 'autosynth-Google.Cloud.RecaptchaEnterprise.V1Beta1'
Cloning into '/tmpfs/tmp/tmpdhfyst66/googleapis'...
Note: checking out '88316b63a486002727e14032d104690541179fc9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 88316b63a Generated synth.py files with multiple commits enabled
Note: checking out '7be2811ad17013a5ea24cd75dfd9e399dd6e18fe'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 7be2811a fix: Update gapic-generator version to pickup discogapic fixes
Switched to a new branch 'autosynth-Google.Cloud.RecaptchaEnterprise.V1Beta1-2'
Running synthtool
['/tmpfs/src/git/autosynth/env/bin/python3', '-m', 'synthtool', '--metadata', 'synth.metadata', 'synth.py', '--']
2020-03-30 07:26:39,770 synthtool > Executing /tmpfs/src/git/autosynth/working_repo/apis/Google.Cloud.RecaptchaEnterprise.V1Beta1/synth.py.
Contents of preconfig file:
{"preclonedRepos": {"https://github.com/googleapis/google-cloud-dotnet.git": "/tmpfs/src/git/autosynth/working_repo", "https://github.com/googleapis/googleapis.git": "/tmpfs/tmp/tmpdhfyst66/googleapis"}}Extracted repo location: /tmpfs/tmp/tmpdhfyst66/googleapis
generateapis.sh: line 40: declare: GOOGLEAPIS: readonly variable
2020-03-30 07:26:39,817 synthtool > Failed executing /bin/bash generateapis.sh --check_compatibility Google.Cloud.RecaptchaEnterprise.V1Beta1:

None
2020-03-30 07:26:39,818 synthtool > Wrote metadata to synth.metadata.
Traceback (most recent call last):
  File "/home/kbuilder/.pyenv/versions/3.6.9/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/kbuilder/.pyenv/versions/3.6.9/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/__main__.py", line 102, in <module>
    main()
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/__main__.py", line 94, in main
    spec.loader.exec_module(synth_module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/tmpfs/src/git/autosynth/working_repo/apis/Google.Cloud.RecaptchaEnterprise.V1Beta1/synth.py", line 22, in <module>
    hide_output = False)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/shell.py", line 39, in run
    raise exc
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/shell.py", line 33, in run
    encoding="utf-8",
  File "/home/kbuilder/.pyenv/versions/3.6.9/lib/python3.6/subprocess.py", line 438, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('/bin/bash', 'generateapis.sh', '--check_compatibility', 'Google.Cloud.RecaptchaEnterprise.V1Beta1')' returned non-zero exit status 1.
Synthesis failed
Traceback (most recent call last):
  File "/home/kbuilder/.pyenv/versions/3.6.9/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/kbuilder/.pyenv/versions/3.6.9/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmpfs/src/git/autosynth/autosynth/synth.py", line 482, in <module>
    main()
  File "/tmpfs/src/git/autosynth/autosynth/synth.py", line 334, in main
    return _inner_main(temp_dir)
  File "/tmpfs/src/git/autosynth/autosynth/synth.py", line 429, in _inner_main
    branch,
  File "/tmpfs/src/git/autosynth/autosynth/synth.py", line 135, in synthesize_loop
    metadata_path, extra_args, deprecated_execution, environ, synthesize_py_path,
  File "/tmpfs/src/git/autosynth/autosynth/synth.py", line 278, in synthesize
    synth_proc.check_returncode()  # Raise an exception.
  File "/home/kbuilder/.pyenv/versions/3.6.9/lib/python3.6/subprocess.py", line 389, in check_returncode
    self.stderr)
subprocess.CalledProcessError: Command '['/tmpfs/src/git/autosynth/env/bin/python3', '-m', 'synthtool', '--metadata', 'synth.metadata', 'synth.py', '--']' returned non-zero exit status 1.

Google internal developers can see the full log here.

Autosynth passed, closing! :green_heart:


Add test for language tree node

Short description

This PR adds tests for the language node actions
Proposed changes

Test move_language_tree_node and delete_language_tree_node
Add try and except ProtectedError for the deleting action for better user experience (in case the delete button is somehow not deactivated)
Creating and updating are not included in the action file and covered by view_config but created/updated objects are not checked. So tests for them are added as small aditionals 😸

Side effects

None?

Resolved issues

Fixes: #2582

Pull Request Review Guidelines

@david-venhoff
So much typos 🙈 Thank you!


Feature request: compare folders

It would be extremely useful to be able to compare two folders. I use two note taking apps (Obsidian and NotePlan), which store their notes in different folders. Comparing them to make sure they have the same content would be ❤.
Thanks in advance!

Hey, thanks for your suggestion.
I'm not sure what you mean by "Compare Folder" 🤔  Do you have any screenshots of your current solution that I can refer?

Sure, something like this (from Kaleidoscope):

You can then double-click any entry, and it will open a diff view like the current one in Text Differ.
Thanks for building this app, btw!


Added Georgian (ka) localization

Added Georgian (ka) localization. Also included unit tests for this language

Hmm, I will fix CI errors and after will send PR


Prevent escaping of HTML

How do I prevent HTML I want to be inserted into my template from being escaped? It's converting < to < for example.

Never mind. I forgot all about triple mustaches!


chore: add decorators transform for addon consumers

Per the warning ember-decorators throws (text below), the babel-transform addon needs to be installed in order to use ember-decorators.
WARNING: ember-decorators (used in ember-bulma): You have not installed @ember-decorators/babel-transforms. It has been extracted to a separate addon. See instructions for installation: https://github.com/ember-decorators/babel-transforms#readme

@alexdiliberto Merging this update. Feel free to release if you're able to get to it before I can.


add status messages that display cmake version and cmake exe path

@white238  let me know if i should move to a better place

Good idea


Re-disable user-select on next-button and info-text

After VanJS commit it was disabled by mistake.

Could you add it for next button too?

@nyagami

alredy done


Pass strict = true to makedocs

Codecov Report

Merging #76 into master will decrease coverage by 16.95%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##           master      #76       +/-   ##
===========================================
- Coverage   84.17%   67.22%   -16.96%
===========================================
  Files          17       17
  Lines        1106     1022       -84
===========================================
- Hits          931      687      -244
- Misses        175      335      +160

Impacted Files
Coverage Δ

src/Transducers.jl
83.33% <ø> (-16.67%)
:arrow_down:

src/reduce.jl
40.38% <0%> (-56.23%)
:arrow_down:

src/progress.jl
35.36% <0%> (-53.4%)
:arrow_down:

src/comprehensions.jl
23.07% <0%> (-46.16%)
:arrow_down:

src/core.jl
54.66% <0%> (-14.37%)
:arrow_down:

src/dreduce.jl
86.66% <0%> (-13.34%)
:arrow_down:

src/processes.jl
78.29% <0%> (-13.01%)
:arrow_down:

src/library.jl
80.75% <0%> (-12.23%)
:arrow_down:

src/basics.jl
5.55% <0%> (-11.12%)
:arrow_down:

... and 5 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9269c21...4afe671. Read the comment docs.