pifou
Juin 2, 2023, 1:04
1
Bonjour,
Ce sujet fait suite à plusieurs cas, où des utilisateurs ont tenté de mettre à jour des packages python avec plus ou moins de bonheur… (dernier topic en date mais c’est pas le seul)
Jeedom Core n’utilise pas python ni ces packages. il revient donc en principe aux plugins concernés à mettre à jour les packages qu’ils utilisent… Et il est possible d’automatiser cela, coté dev / plugin, on en a de la chance
Il faut pour cela utiliser un bot Github qui se charge de répercuter ce genre de mise à jour sur nos plugins. Pour Python, les dépendances sont en principe listées dans un fichier requirements.txt
sous un format précis. Et c’est donc ce que j’ai fait pour mon plugin LGThinq
, voici la méthode :
il faut placer ce fichier .github/dependabot.yml
pour « appeler » le bot à vérifier notre dépôt
jeedom-lgthinq-plugin/.github/dependabot.yml at master · pifou25/jeedom-lgthinq-plugin · GitHub
version: 2
updates:
# Maintain python pip dependencies
- package-ecosystem: "pip"
directory: "/resources"
schedule:
interval: "daily"
directory
désigne le répertoire où j’ai mis le fichier requirements.txt
.
2. Quotidiennement, le bot check les mises à jours, et s’il y a lieu, il vient créer une PR sur mon repo pour propager ces mises à jour. ex:
pifou25:master
← pifou25:dependabot/pip/resources/requests-oauthlib-1.3.1
ouvert 08:26AM - 31 May 23 UTC
Bumps [requests-oauthlib](https://github.com/requests/requests-oauthlib) from 1.… 0.0 to 1.3.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/requests/requests-oauthlib/releases">requests-oauthlib's releases</a>.</em></p>
<blockquote>
<h2>v1.3.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Add Support for OAuth Mutual TLS (draft-ietf-oauth-mtls) by <a href="https://github.com/danielfett"><code>@danielfett</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/389">requests/requests-oauthlib#389</a></li>
<li>Linkedin compliance removal & LinkedIn Example update/fix by <a href="https://github.com/jtroussard"><code>@jtroussard</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/397">requests/requests-oauthlib#397</a></li>
<li>docs: Fix typos in token refresh section of oauth2 worflow by <a href="https://github.com/momobel"><code>@momobel</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/413">requests/requests-oauthlib#413</a></li>
<li>Add eBay compliance fix by <a href="https://github.com/craiga"><code>@craiga</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/456">requests/requests-oauthlib#456</a></li>
<li>Fix Docs generation - Improve Pipeline by <a href="https://github.com/JonathanHuot"><code>@JonathanHuot</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/459">requests/requests-oauthlib#459</a></li>
<li>Fix Sphinx error for oauth1 fetch_token documentation by <a href="https://github.com/JonathanHuot"><code>@JonathanHuot</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/462">requests/requests-oauthlib#462</a></li>
<li>Move from Travis to GitHub Actions by <a href="https://github.com/JonathanHuot"><code>@JonathanHuot</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/470">requests/requests-oauthlib#470</a></li>
<li>Add Spotify OAuth 2 Tutorial by <a href="https://github.com/odysseusmax"><code>@odysseusmax</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/471">requests/requests-oauthlib#471</a></li>
<li>Update documentation for Python 3 by <a href="https://github.com/gschizas"><code>@gschizas</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/435">requests/requests-oauthlib#435</a></li>
<li>docs: add the link to the Application Registration Portal by <a href="https://github.com/Abdelkrim"><code>@Abdelkrim</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/425">requests/requests-oauthlib#425</a></li>
<li>docs: rearrange and link spotify tutorial by <a href="https://github.com/odysseusmax"><code>@odysseusmax</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/472">requests/requests-oauthlib#472</a></li>
<li>Update google.rst by <a href="https://github.com/mrwangjianhui"><code>@mrwangjianhui</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/454">requests/requests-oauthlib#454</a></li>
<li>Add Python 3.8 & 3.9 as supported versions by <a href="https://github.com/kaxil"><code>@kaxil</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/442">requests/requests-oauthlib#442</a></li>
<li>Update build badge for GitHub Actions by <a href="https://github.com/hugovk"><code>@hugovk</code></a> in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/475">requests/requests-oauthlib#475</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/danielfett"><code>@danielfett</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/389">requests/requests-oauthlib#389</a></li>
<li><a href="https://github.com/jtroussard"><code>@jtroussard</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/397">requests/requests-oauthlib#397</a></li>
<li><a href="https://github.com/momobel"><code>@momobel</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/413">requests/requests-oauthlib#413</a></li>
<li><a href="https://github.com/craiga"><code>@craiga</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/456">requests/requests-oauthlib#456</a></li>
<li><a href="https://github.com/JonathanHuot"><code>@JonathanHuot</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/459">requests/requests-oauthlib#459</a></li>
<li><a href="https://github.com/odysseusmax"><code>@odysseusmax</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/471">requests/requests-oauthlib#471</a></li>
<li><a href="https://github.com/gschizas"><code>@gschizas</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/435">requests/requests-oauthlib#435</a></li>
<li><a href="https://github.com/Abdelkrim"><code>@Abdelkrim</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/425">requests/requests-oauthlib#425</a></li>
<li><a href="https://github.com/mrwangjianhui"><code>@mrwangjianhui</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/454">requests/requests-oauthlib#454</a></li>
<li><a href="https://github.com/kaxil"><code>@kaxil</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/442">requests/requests-oauthlib#442</a></li>
<li><a href="https://github.com/hugovk"><code>@hugovk</code></a> made their first contribution in <a href="https://redirect.github.com/requests/requests-oauthlib/pull/475">requests/requests-oauthlib#475</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/requests/requests-oauthlib/compare/v1.3.0...v1.3.1">https://github.com/requests/requests-oauthlib/compare/v1.3.0...v1.3.1</a></p>
<h2>v1.3.0</h2>
<ul>
<li>Instagram compliance fix</li>
<li>Added <code>force_querystring</code> argument to fetch_token() method on OAuth2Session</li>
</ul>
<h2>v1.2.0</h2>
<ul>
<li>This project now depends on OAuthlib 3.0.0 and above. It does <strong>not</strong> support
versions of OAuthlib before 3.0.0.</li>
<li>Updated oauth2 tests to use 'sess' for an OAuth2Session instance instead of <code>auth</code>
because OAuth2Session objects and methods acceept an <code>auth</code> paramether which is
typically an instance of <code>requests.auth.HTTPBasicAuth</code></li>
<li><code>OAuth2Session.fetch_token</code> previously tried to guess how and where to provide
"client" and "user" credentials incorrectly. This was incompatible with some
OAuth servers and incompatible with breaking changes in oauthlib that seek to
correctly provide the <code>client_id</code>. The older implementation also did not raise
the correct exceptions when username and password are not present on Legacy
clients.</li>
<li>Avoid automatic netrc authentication for OAuth2Session.</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/requests/requests-oauthlib/blob/master/HISTORY.rst">requests-oauthlib's changelog</a>.</em></p>
<blockquote>
<p>v1.3.1 (21 January 2022)
++++++++++++++++++++++++</p>
<ul>
<li>Add initial support for OAuth Mutual TLS (draft-ietf-oauth-mtls)</li>
<li>Removed outdated LinkedIn Compliance Fixes</li>
<li>Add eBay compliance fix</li>
<li>Add Spotify OAuth 2 Tutorial</li>
<li>Add support for python 3.8, 3.9</li>
<li>Fixed LinkedIn Compliance Fixes</li>
<li>Fixed ReadTheDocs Documentation and sphinx errors</li>
<li>Moved pipeline to GitHub Actions</li>
</ul>
<p>v1.3.0 (6 November 2019)
++++++++++++++++++++++++</p>
<ul>
<li>Instagram compliance fix</li>
<li>Added <code>force_querystring</code> argument to fetch_token() method on OAuth2Session</li>
</ul>
<p>v1.2.0 (14 January 2019)
++++++++++++++++++++++++</p>
<ul>
<li>This project now depends on OAuthlib 3.0.0 and above. It does <strong>not</strong> support
versions of OAuthlib before 3.0.0.</li>
<li>Updated oauth2 tests to use 'sess' for an OAuth2Session instance instead of <code>auth</code>
because OAuth2Session objects and methods acceept an <code>auth</code> paramether which is
typically an instance of <code>requests.auth.HTTPBasicAuth</code></li>
<li><code>OAuth2Session.fetch_token</code> previously tried to guess how and where to provide
"client" and "user" credentials incorrectly. This was incompatible with some
OAuth servers and incompatible with breaking changes in oauthlib that seek to
correctly provide the <code>client_id</code>. The older implementation also did not raise
the correct exceptions when username and password are not present on Legacy
clients.</li>
<li>Avoid automatic netrc authentication for OAuth2Session.</li>
</ul>
<p>v1.1.0 (9 January 2019)
+++++++++++++++++++++++</p>
<ul>
<li>Adjusted version specifier for <code>oauthlib</code> dependency: this project is
not yet compatible with <code>oauthlib</code> 3.0.0.</li>
<li>Dropped dependency on <code>nose</code>.</li>
<li>Minor changes to clean up the code and make it more readable/maintainable.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/requests/requests-oauthlib/commit/b0857c856dc76cc375f72d7c2c5b773bdc55526e"><code>b0857c8</code></a> Changed secret's name</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/dbecd38bb0338f5f5ac468f254e573df3eabca9f"><code>dbecd38</code></a> Uses 3.9 for publishing</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/7d194e3d0baa166fa6e9738232f7d2735341745c"><code>7d194e3</code></a> Add changelog for 1.3.1</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/2c7650ec562ab8655a31e3b558d152be9d1a771d"><code>2c7650e</code></a> Add auto publish to pypi when pushing a new tag.</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/05a25a96522dc64c25224a4862f2342a6978e80d"><code>05a25a9</code></a> Update build badge for GitHub Actions (<a href="https://redirect.github.com/requests/requests-oauthlib/issues/475">#475</a>)</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/337dbe864045308ae35d589719965788f66fd462"><code>337dbe8</code></a> Add Python 3.8 & 3.9 as supported version (<a href="https://redirect.github.com/requests/requests-oauthlib/issues/442">#442</a>)</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/00e8156715674452194655eee53922d3280bb2a7"><code>00e8156</code></a> Update google.rst (<a href="https://redirect.github.com/requests/requests-oauthlib/issues/454">#454</a>)</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/75a316bfd9c6db17c38b1b2879764fe8e7bfb2c9"><code>75a316b</code></a> docs: rearrange and link spotify tutorial (<a href="https://redirect.github.com/requests/requests-oauthlib/issues/472">#472</a>)</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/fb3ec4e846d807cf3d816447f1a3e1f2a490689f"><code>fb3ec4e</code></a> docs: add the link to the Application Registration Portal (<a href="https://redirect.github.com/requests/requests-oauthlib/issues/425">#425</a>)</li>
<li><a href="https://github.com/requests/requests-oauthlib/commit/ee2085539d98495c7cd237bd115baac89903afd1"><code>ee20855</code></a> Update documentation for Python 3 (<a href="https://redirect.github.com/requests/requests-oauthlib/issues/435">#435</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/requests/requests-oauthlib/compare/v1.0.0...v1.3.1">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
You can trigger a rebase of this PR by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
> **Note**
> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.
… et c’est là qu’on a un peu de boulot en tant que dev, il faut vérifier le truc d’une manière ou d’une autre. Puis, pousser sur la branche beta, puis stable.
Pour l’utilisateur, au final il n’aura qu’un plugin à mettre à jour. Et relancer l’installation des dépendances pour le plugin, ça pourrait pas être relancé automatiquement après la maj du plugin ?
Pour aller plus loin, la doc pour les options Dependabot sur Github
Et à priori (pas testé c’est pas mon cas) ça marche avec les dépôts privés
Pour ou contre ? si ça vous plaît, la semaine prochaine je vous fais un tuto sur semantic-release
pour automatiser la livraison et le versioning
4 « J'aime »
nebz
Juin 2, 2023, 1:10
2
Mips
Juin 2, 2023, 1:57
3
Salut,
Merci pour les explications, je reconnais que perso sur les plugins jeedom je n’ai pas (encore) pris la peine de le faire (je l’ai fait pour d’autres projets), mais je vais l’appliquer aussi.
Après on est pas toujours obligé d’appliquer tous les PR reçu, on peut le faire seulement si fix sécu par exemple et au moins le dependabot permet d’être averti automatiquement
Par contre si je peux me permettre une petite proposition d’amélioration: installer les dépendances python dans un V irtual ENV ironnement (VENV):
il faut définir le dossier cible (moi je met dans /resources/venv
mais si quelqu’un pense qu’il y a mieux qu’il le fasse savoir)
installer le paquet apt python3-venv
créer le venv: python3 -m venv $VENV_DIR
(en supposant donc que $VENV_DIR
est le path vers le dossier
moi je fais un upgrade wheel aussi (utile voir nécessaire pour plusieurs dépendances si on ne veut pas casser l’install vu qu’on est dans un VENV, sinon le venv va utiliser celui du global): $VENV_DIR/bin/python3 -m pip install --upgrade pip wheel
et ensuite installer les dépendances: $VENV_DIR/bin/python3 -m pip install -r requirements.txt
la différence consiste donc « juste » à créer le venv et appeler le bin python de notre venv lors de l’install et aussi bien sur lors du lancement du démon (dans la class du plugin)
=> avantage: on n’est plus impacté par les requierements des autres plugins et vice versa
4 « J'aime »
nebz
Juin 2, 2023, 2:04
4
Je le fait aussi pour atvremote, je vais ajouter la mise à jour wheel, je l’avais mis de côté car je pensais que ça servait pas/peu au final.
Faudrait pas faire cryptography aussi qui est le problème dans quasi tous les problèmes que je vois en python ?
Mips
Juin 2, 2023, 2:12
5
N’ayant pas encore rencontré ce problème personnellement je ne sais pas
1 « J'aime »
nebz
Juin 2, 2023, 2:14
6
je crois que c’est la lib qui est un peu de la merde…
elle build pas même chez eux…
1 « J'aime »
Le problème avec cryptography c’est si la version du fichier wheel n’existe pas pour l’archi concernée a un instant donné , cela nécessite alors une compilation avec rust. Exemple plugin zigbee.
akenad
1 « J'aime »
pifou
Juin 3, 2023, 3:25
8
Merci pour vos retours
Je vais essayer de mettre mon demon sous VENV, je n’avais pas réussi quand j’ai fait le plugin, il se lançait juste pas, ou pas avec les paramètres.
Dans l’idéal, maintenant qu’on a un plugin Docker, on devrait juste mettre tous nos démons dans un conteneur distinct, c’est encore mieux isolé qu’un VENV.
Je n’ai pas wheels installé mais j’ai cryptography, je ne sais pas pourquoi ni pour quel plugin il est installé, pas le mien en tout cas. Piwheels semble spécifique aux raspberry pi, est-ce que cette lib n’existe pas pour d’autres systèmes ?
pifou
Août 17, 2023, 1:39
9
Bonjour,
J’ai fait une PR sur le plugin template pour ajouter un exemple de dependabot.yml avec quelques liens
jeedom:master
← pifou25:master
opened 05:47PM - 15 Aug 23 UTC
This is an example for the dependabot file, to keep dependencies up-to-date
for… npm: package.json
for python: requierements.txt
for github actions: any yaml into /.github/workflows
1 « J'aime »