Closed emmanuelbernard closed 1 year ago
@marcwrobel si ça t'amuse et si tu as du temps, fais moi signe.
@emmanuelbernard ça pourrait être sympa à faire. Pour info je n'ai jamais fait de bot slack.
Tu imagines quel genre d’interactions avec ce bot ? Un message structuré du genre "@bot, add xxx to LCC-1234", une discussion (un peu comme l'exemple sur https://api.slack.com/bot-users#responding-to-events)... ?
J'imagine aussi que ça devra être hébergé quelque part. Tu sais déjà où ?
en fait aujourd'hui on ouvre un channel par épisode etpour chaque nouvelle on a :
Donc le bot pourrait etre appelé à la fin du genre @lcc generate-shownotes et paf il lit les messages du channel et sort le markdown dans github.
Pour l'hébergement, soit on deploie dans un petit VPS chez OVH, soit @glaforge nous trouve un micro budget pour des google cloud function, et si tu écris la fonction en Quarkus (via l'approche portable Funqy, tu fais le jackpot bingo des cast codeurs :)
Exemple de news.
Aujourd'hui on met tous les points dans le meme message par ce que ca aide le copier coller mais c'est pénible.
Essayons d'atteindre le jackpot bingo des cast codeurs alors ! Je n'ai presque aucune connaissance de Quarkus, des Google cloud function, ni de l'API Slack : ça devrait donc être sympa à faire.
Les deux premiers millions d'appels sont gratuits d'après https://cloud.google.com/functions/pricing#invocations, donc on ne devrait même pas avoir besoin d'un micro-budget de @glaforge. Il faudra par contre s'arranger sur le compte GCP à utiliser quand se sera en prod.
Merci pour les liens.
Rien à voir avec le sujet mais je suis en train de tester asdf (sympa comme outil !). J'en ai donc profité pour créer un plugin pour Quarkus CLI (https://github.com/marcwrobel/asdf-quarkus) avant de commencer.
Ah interessant, moi je traite Quarkus comme evergreen et utilises toujours la dernière version ;P
J'essaie aussi de toujours utiliser les dernières versions quand c'est possible et relativement facile. J'utilise asdf principalement pour la facilité d'installation / désinstallation des différents outils.
Ces dernières années j'ai souvent eu besoin d'utiliser Java / Maven / Node.js sur différents projets. L’intérêt de asdf par rapport à d'autres outils du même genre que j'ai pu tester (SDKMAN!, nvm, rvm...) est qu'il n'est pas spécifique à une techno, et ça facilite beaucoup les choses.
Nouveau projet GitHub créé : https://github.com/lescastcodeurs/lcc-slack-bot.
Du coup pour résumer on partira sur une application Quarkus qui sera déployée sous la forme d'une Google Cloud Function. À priori on restera dans le free-tiers vu le peu d'invocations par mois et le peu de ressources utilisées (cf. Cloud Functions pricing). Néanmoins ce raisonnement part du principe qu'il existe un moyen de restreindre les appels à cette fonction uniquement au bot Slack même si l'URL de la fonction devient accidentellement public.
L'application devra réagir à commande @lcc generate-shownotes
. À partir de là :
Template-news
),Les liens utiles pour la création de l'application Quarkus :
Les docs utiles pour la création de la Slack Slash Commands :
Les docs utiles pour la création de la page wiki sur GitHub :
Questions restantes :
@emmanuelbernard je me suis un peu perdu dans la doc de Slack. Du coup j'ai commencé en utilisant leur framework, Bolt. Ça a l'avantage d'être simple et de prendre en charge toutes les questions liées à la sécurité.
J'ai démarré les devs sur https://github.com/lescastcodeurs/lcc-slack-bot. Pour le moment j'utilise le Socket Mode car ça permet d'avoir un bot fonctionnel sans devoir exposer un endpoint HTTP. Bolt propose aussi une intégration Google Cloud Functions, à voir si ça serait pas mieux d'utiliser ça à terme plutôt qu'une approche plus manuelle.
Pour le moment j'ai un bot fonctionnel mais qui ne fait pas grand chose. Prochaine étape : récupérer l'historique Slack afin de générer le markdown de la page wiki.
Ton résumé est bon. Pour les 3s, en fait c'est une commande fire and forget dans le sens où les shownotes seraient générées dans le wiki github par exemple et pas retournée a la commande. Je ne sais pas si ca donne des libertés.
J'avais vu bolt mais ils utilisent OKHTTP (je crois) et une version qui clashait avec le sbom Quarkus et donc la version n'était pas forcément compilable en natif. Mais c'est peut etre le chemin necessaire.
Pour ce que tu dis sur les 3s il faudra que je teste (cf. https://api.slack.com/legacy/interactive-messages#responding_right_away). Pour le moment je balance un événement et je traite la génération des show notes à part.
Pour info ça prend pas mal de temps (des fois plus de 2s) car il y a besoin de pas mal d'appels distincts pour tout faire :
Pour mes tests je retournais au début le markdown directement dans un message du channel. Pour info il y a une limite à la taille du message assez basse (en tout cas trop basse pour les show notes) et, de plus, Slack interprète en partie le markdown. Donc, même si ça n'est pas ce qu'on veut faire, ça n'est même pas une solution de repli.
En ce qui concerne bolt ils utilisent toujours okhttp (https://mvnrepository.com/artifact/com.slack.api/slack-api-client/1.22.3). Mais je pourrais je pense réécrire relativement facilement les requêtes avec un simple java.net.http.HttpClient
: elles ne me semblent finalement pas très compliquées.
Sinon j'ai pas mal avancé. Pour le moment :
Si tu as du temps et que tu veux commencer à tester tu peux jeter un coup d’œil à https://github.com/lescastcodeurs/lcc-slack-bot.
Pour publier ça dans le wiki ça risque d'être compliqué. Comme dit sur https://stackoverflow.com/questions/2402413/update-a-github-project-wiki-through-the-github-api ça n'est pas possible via les APIs. J'ai fait quelque tests en suffixant le nom du dépôt par .wiki
et .wiki.git
dans l'URL (les suffixes utilisés lorsqu'on veut cloner le dépôt contenant le wiki) mais ça ne fonctionne pas. Du coup le seul moyen de mettre à jour programmatiquement le wiki est de faire un clone du dépôt, commiter les show notes, et pusher. Ça m'a l'air un peu chiant à faire.
Du coup est-ce qu'il serait envisageable de publier ça dans un dépôt privé à la place (il ne resterait alors qu'un copier/coller à faire) ? Ou éventuellement de convertir le wiki en un dépôt GitHub à part (et donc pas de copier/coller) ?
Ce qui est pratique dans le wiki c'est que une fois les shownotes générées, chacun peut éditer les jours ou heures avant l'épisode. Et moi pour la publication je repars de ça. On peut faire un repo (pas forcément privé) tant que c'est aussi facilement éditable. Vu les outils d'édition de GitHub web on ne va pas perdre beaucoup.
Ok, du coup j'ai presque une première version de disponible : il me reste à régler https://github.com/lescastcodeurs/lcc-slack-bot/pull/15 et à mettre en place ce qu'il faut pour livrer une version. Cette première version permettra de vérifier le fonctionnement du bot.
Je pense que je la déploierais sur mon serveur, ça sera plus simple. Je peux aussi créer le dépôt dans l'organisation lescastcodeurs
. Par contre il faudrait voir comment on procède pour la Slack app :
J'ai tendance à préférer la première solution car elle permet de tester le bot sur de "vraie" données. Mais en même temps ça risque de spammer tout le monde et il faudra que le propriétaire de cet espace créé le bot (ou me donne les droits nécessaires pour que je puisse le faire). Tu préfères fonctionner comment @emmanuelbernard ?
Ensuite si on est bon sur le fonctionnement il faudra, pour se rapprocher un peu des Google Cloud Functions et permettre la compilation native (bloquée actuellement par OKHTTP) :
com.slack.api.Slack
par un client HTTP Java basique,SocketModeApp
par une WebApp classique et voir comment la déclarer sur SlackLe bot est en place depuis quelques temps. Il reste des choses à faire mais ce sera pris en charge au travers de tickets sur https://github.com/lescastcodeurs/lcc-slack-bot.
Aujourd'hui, nous entrons les news dans un channel slack et une personne écrit un résumé dans le thread de chaque message de news. C'est top parce que c'est partagé par tous et qu'on voit où on en est niveau nouvelles. Et il y a moins de friction que d'entrer les news dans le wiki directement ce qui est vital.
Mais la conversion des entrées slack vers le wiki / shownote de l'épisode est manuel et beaucoup de copier coller. On pourrait automatiser ça (en tous cas pré categorisation) avec un bot / application slack.