motionEye v0.43.1 release
Most open pull requests have been merged, or major parts of larger collection PRs. Left are minor or layout/GUI additions, or feature PRs which require a rebase with conflicts resolving, all I'd not see as mandatory for a release.
So the question is how we do it.
- First of all is there anything, especially bugs/issues, any of you want to have addressed first?
- Then we should go through all features and test them, at best once on
x86_64and once on a Raspberry Pi, where some special features are available. How shall we do it? Adding a ToDo list here that everyone can tick off? - The Wiki needs an update, at least the install instructions. We have a pretty generic method in the
README.mdnow. Not sure whether we should add Fedora/rpm and Arch/pkg Python 3 + development headers instructions toREADME.md, deprecating these Wiki pages, or updating them instead and linking it from theREADME.md? - The Docker Wiki page needs an update as well. Not sure why it contains the whole Dockerfile instead of just linking the existing one 😄. I don't see much point to list Docker Compose instructions as long as motionEye runs fine in a single container? Finally it doubles with the related README.md, so similarly the question is whether we want to keep both, e.g. having install instructions in the Wiki and only container build instructions in the README? We may also want to add instructions about how to install the container from the GitHub registry, until we have a release at Docker Hub, and keeping it for development releases/testing?
- Then, once we do not find any blocker issues anymore, a pre-release makes sense. I think such is possible on PyPI as well, isn't it? At least there is a
--preflag. @ccrisan can a project on PyPI be transferred somehow, so thatpip install motioneyecan be done as before without the need to do keep using your personal PyPI account?
Let me know whether I forgot something and what you think about the above.
can a project on PyPI be transferred somehow, so that pip install motioneye can be done as before without the need to do keep using your personal PyPI account?
A PyPI token can be added as an (ecrypted) secret to github's secrets and can be used from CI jobs in GitHub Actions.
Unfortunately there's no "organization" concept on PyPI (at least not one that I can find) so I guess my user is just as good as anyone else's.
I just created the organization-level PYPI_TOKEN secret pointing to a new PyPI token scoped to motioneye. As far as I remember, it can be used in the CI like ${{ secrets.PYPI_TOKEN }}.
Many thanks. Indeed, practically it shouldn't make a difference whether we keep using your PyPI account or a new one, safe with an access token.
The Docker Hub download is anyway always done with account prefix, so for this a new account wouldn't be a problem, after install instructions have been updated.
Just a small remark, in dev branch, the Dockerfile has been refactored to use an entrypoint and this entrypoint.sh file is not copied in the container, the container cannot start.
Many thanks for the hint. I'm no Docker expert (and didn't find the time to test the container yet, to be true), can you open a PR to fix it?
I guess ENTRYPOINT ["/entrypoint.sh"] defines the path within the container, but obviously this doesn't imply copying it from the same dir of the Dockerfile during build?
Yep just adding
COPY . /tmp/motioneye
+COPY extra/entrypoint.sh /entrypoint.sh
should do the trick. I did not test yet the docker container, it may need additional changes, will try to find time and if anything else is needed, I'll open a PR.
PR up: #2386
Is version 0.43 usable with docker, does this motioneye will be developed in future?
Here is the Docker container: https://github.com/motioneye-project/motioneye/pkgs/container/motioneye Future development of motionEye is the whole point of the https://github.com/motioneye-project organisation, the planned v0.43.0 release etc 😉.
Is there a docker compose file o saw that it still refer to ccrisan version
That needs to be updated indeed (the wiki in general), however, you should be able to extract the essence from it.
Sorry not sure how to do it
Please test with this change: https://github.com/motioneye-project/motioneye/pull/2482/files
if i change with ghcr.io/motioneye-project/motioneye:edge the images from cam are not loades, do i have to setup it from scratch or can i maintain ccrisan settings?
The previous configs should work, but to be sure you could change back (and in case forth) affected camera settings and "Apply".
@spupuz Have a look into the container logs for any error messages.
here are the errors:
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/3/current/?_=1652690473933&width=0.8&_username=admin&_signature=5f6eed5e9e588eeacf6491b89a180d1a4df2fd08 (172.17.0.1) 2.37ms
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/4/current/?_=1652690473933&width=0.8&_username=admin&_signature=0e4eeaa7eb714d41910755800c26416f6b0142d8 (172.17.0.1) 2.67ms
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/5/current/?_=1652690473933&width=0.8&_username=admin&_signature=82a9a4882050e5b2b024515c4a21eb213aff4ee0 (172.17.0.1) 0.93ms
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/1/current/?_=1652690532931&width=0.8&_username=admin&_signature=4598a07c410838457ec01aed7728ec6f8d0b471d (172.17.0.1) 5.48ms
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/3/current/?_=1652690541932&width=0.8&_username=admin&_signature=bde666c0fc09648cc17c3b33b093496766b5982c (172.17.0.1) 4.48ms
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/2/current/?_=1652690541932&width=0.8&_username=admin&_signature=f58372b2b93cd3c2109b35e937ccd152d8d965d7 (172.17.0.1) 5.20ms
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/4/current/?_=1652690541932&width=0.8&_username=admin&_signature=d8d82b874924265bfdf893e4d36f721aa97c0a22 (172.17.0.1) 6.34ms
ERROR: initial_value must be str or None, not bytes
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 52, in get
await self.current(camera_id)
File "/usr/local/lib/python3.9/dist-packages/motioneye/handlers/picture.py", line 110, in current
picture = mediafiles.get_current_picture(
File "/usr/local/lib/python3.9/dist-packages/motioneye/mediafiles.py", line 1009, in get_current_picture
sio = io.StringIO(jpg)
TypeError: initial_value must be str or None, not bytes
ERROR: 500 GET /picture/5/current/?_=1652690541932&width=0.8&_username=admin&_signature=733a86ec02a60b721b082d54d61a8c7bcd7bb576 (172.17.0.1) 3.30ms
ERROR: mjpg client timed out receiving data for camera 6 on port 8086
That looks like issue #2398, as I thought.
so what i have to do?
#2483
@jmichault
I'd like to do a (pre-)release of motionEye v0.43.0, including upload to PyPI. The daily upload workflow with PYPI_TOKEN fails to authenticate: https://github.com/motioneye-project/motioneye/actions/runs/3094711509/jobs/5008377481
ERROR HTTPError: 403 Forbidden from https://upload.pypi.org/legacy/
Invalid or non-existent authentication information. See
https://pypi.org/help/#invalid-auth for more information.
Any idea what the reason of this is, as the same workflow works fine on your fork. Are there probably different kind of tokens? @ccrisan
Also, how to do uploads as pre-releases?
I have just updated the PYPI_TOKEN organization secret. I think I accidentally removed the API token from my PyPI account, although I don't remember doing that. Anyway, it has now been recreated and should hopefully work.
Many thanks. I'll create a (pre-)release + manually triggered workflow tomorrow.
It looks like PyPI detects releases vs pre-releases simply via certain key words like "dev" or "rc" in the version string? At least the previously successful uploads to test.pypi.org were treated as pre-releases, and I do not see anything else done than adding a .dev* suffix to the version string.
Hi, was 0.43.0 released in the end ?
Thank you in advance,
Simone
Can the dev branch be pre-released on Github?
I'm working on it, i.e. the PyPI upload along with a pre-release tag here on GitHub: #2675
Has anyone time and mood to wrap up some release notes for 0.43.0 (or 0.43.1, possibly technically required)? Aside of Python 3 migration, lots of other features and fixes have been done, l10n, S3 upload, motion 4.4/4.5 support, and lots more. Could be also done via new CHANGELOG(.md) file or similar, so we can add notes directly when the changes are merged, instead of needing to lookup everything when a release is done.
You can generate release notes with GitHub, when creating a release. You might just have to modify it a bit. It is basically a list of all PRs that were merged.
At least for this release this would be really messy, due to quite some back and forth and non-linear merges, also from the previously dedicated l18n/i10n project. But for the future it makes sense indeed. We should then follow some consistent PR/commit naming, which, AFAIK, allows even automatic sorting (bug, enh, feat, frontend, backend or so), isn't it?
Probably someone of you has a good idea or opinion about #2675:
- As
devcurrently has0.43.0as version string,0.43.0b1or similar as PyPI pre-release version string would be a downgrade. So one cannot easily migrate fromdevbranch to PyPI pre-release without defining the version string explicitly then. - Using
0.43.1b1would do, or is there another clever way?
is it the dev image for docker the latest one? why it show always 0.43.0?