motioneye icon indicating copy to clipboard operation
motioneye copied to clipboard

motionEye v0.43.1 release

Open MichaIng opened this issue 3 years ago • 70 comments

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_64 and 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.md now. Not sure whether we should add Fedora/rpm and Arch/pkg Python 3 + development headers instructions to README.md, deprecating these Wiki pages, or updating them instead and linking it from the README.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 --pre flag. @ccrisan 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?

Let me know whether I forgot something and what you think about the above.

MichaIng avatar Mar 20 '22 18:03 MichaIng

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 }}.

ccrisan avatar Mar 20 '22 18:03 ccrisan

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.

MichaIng avatar Mar 20 '22 19:03 MichaIng

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.

ultratoto14 avatar Mar 24 '22 13:03 ultratoto14

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?

MichaIng avatar Mar 24 '22 13:03 MichaIng

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.

ultratoto14 avatar Mar 24 '22 13:03 ultratoto14

PR up: #2386

MichaIng avatar Mar 24 '22 14:03 MichaIng

Is version 0.43 usable with docker, does this motioneye will be developed in future?

spupuz avatar May 15 '22 15:05 spupuz

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 😉.

MichaIng avatar May 15 '22 15:05 MichaIng

Is there a docker compose file o saw that it still refer to ccrisan version

spupuz avatar May 15 '22 15:05 spupuz

That needs to be updated indeed (the wiki in general), however, you should be able to extract the essence from it.

MichaIng avatar May 15 '22 15:05 MichaIng

Sorry not sure how to do it

spupuz avatar May 15 '22 15:05 spupuz

Please test with this change: https://github.com/motioneye-project/motioneye/pull/2482/files

MichaIng avatar May 15 '22 15:05 MichaIng

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?

spupuz avatar May 15 '22 16:05 spupuz

The previous configs should work, but to be sure you could change back (and in case forth) affected camera settings and "Apply".

MichaIng avatar May 15 '22 18:05 MichaIng

@spupuz Have a look into the container logs for any error messages.

kleini avatar May 16 '22 05:05 kleini

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

spupuz avatar May 16 '22 08:05 spupuz

That looks like issue #2398, as I thought.

kleini avatar May 16 '22 12:05 kleini

so what i have to do?

spupuz avatar May 16 '22 13:05 spupuz

#2483

cclauss avatar May 16 '22 17:05 cclauss

@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?

MichaIng avatar Sep 25 '22 18:09 MichaIng

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.

ccrisan avatar Sep 26 '22 20:09 ccrisan

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.

MichaIng avatar Sep 26 '22 22:09 MichaIng

Hi, was 0.43.0 released in the end ?

Thank you in advance,

Simone

chemelli74 avatar Nov 25 '22 11:11 chemelli74

Can the dev branch be pre-released on Github?

coder0107git avatar Dec 21 '22 23:12 coder0107git

I'm working on it, i.e. the PyPI upload along with a pre-release tag here on GitHub: #2675

MichaIng avatar Dec 23 '22 06:12 MichaIng

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.

MichaIng avatar Dec 23 '22 07:12 MichaIng

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.

MarcelCoding avatar Dec 23 '22 09:12 MarcelCoding

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?

MichaIng avatar Dec 27 '22 03:12 MichaIng

Probably someone of you has a good idea or opinion about #2675:

  • As dev currently has 0.43.0 as version string, 0.43.0b1 or similar as PyPI pre-release version string would be a downgrade. So one cannot easily migrate from dev branch to PyPI pre-release without defining the version string explicitly then.
  • Using 0.43.1b1 would do, or is there another clever way?

MichaIng avatar Dec 28 '22 04:12 MichaIng

is it the dev image for docker the latest one? why it show always 0.43.0?

spupuz avatar Jan 29 '23 22:01 spupuz