Skip to content

Conversation

nogebeat
Copy link

📌 Pull Request : Automatisation de l'installation de Lambdananas
🚀 Description
Ce pull request améliore le script en automatisant l'installation de lambdananas si celui-ci n'est pas trouvé sur le système.

🔹 Vérifie si lambdananas est installé via command -v.
🔹 S'il est absent, le télécharge directement depuis GitHub dans un conteneur Docker Alpine.
🔹 Rend le binaire exécutable et l'installe dans /usr/local/bin/.

🔧 Modifications apportées
Ajout d'une vérification de lambdananas avant exécution.
Installation automatique via curl dans un conteneur Docker.
Vérification après installation pour garantir le bon fonctionnement.
Vérification de la date de modification de la dernière image du coding style avant de pull permettant l'accélération du checker
🎯 Pourquoi cette amélioration ?
✅ Facilite l'utilisation : Plus besoin d'installer lambdananas manuellement.
✅ Automatisation complète : L'outil est toujours accessible sans intervention manuelle.
✅ Portabilité : Fonctionne même si l'utilisateur ne peut pas installer directement des fichiers binaires.

✅ Tests effectués
Suppression de lambdananas et exécution du script :

🟢 Installation automatique réussie via Docker.
🟢 lambdananas devient accessible depuis /usr/local/bin/.
Exécution avec lambdananas déjà installé :

🟢 Aucun téléchargement inutile.
Test d'un fichier .hs :

lambdananas test.hs

🟢 Vérification réussie.
🛠 Instructions pour tester
Supprimez lambdananas s'il est déjà installé :

sudo rm -f /usr/local/bin/lambdananas

Exécutez le script et observez l'installation automatique.
Vérifiez que lambdananas fonctionne avec un fichier Haskell :

lambdananas test.hs

🟢 Prêt à être fusionné après validation !

@Sigmanificient
Copy link
Contributor

Sigmanificient commented Feb 28, 2025

Hi, I am a student myself, but while reading this pr, I noticed it uses a custom docker image, which downloads a binary that you uploaded. Despite your good intentions, I believe using an external provider is not well-suited for a checker meant to be run by most students. Indeed, this raises a security concern because neither the Docker image nor the binary is managed by the Epitech internal team.

@nogebeat
Copy link
Author

nogebeat commented Feb 28, 2025 via email

@Sigmanificient
Copy link
Contributor

There is an official binary released on lambdananas source repo, which is also statically compiled (so it should work out of the box).

Since it is accessible publicly, it would also simplify the fetching process:

upstream=Epitech/lambdananas

tag=$(curl -L https://api.github.com/repos/$upstream/releases | jq -r .[0].tag_name)
# In case `jq` is not available: `grep "tag_name" | cut -d '"' -f 4 | head -n 1`

curl -L "https://github.com/$upstream/releases/download/$tag/lambdananas" > lambdananas

sha256sum lambdananas
59c64e602c25fedbb1c5131b0b089afb35c38a39d547fc321b03383d12b0c4d7  lambdananas

I still am unsure whether this would fulfil @Xephi criteria "Pas de binaire dans ce dépôt, utilise lambdananas via docker à la place"

@Sigmanificient
Copy link
Contributor

Sigmanificient commented Feb 28, 2025

When digging into epitech/coding-style-checker image, it exposes check.sh which seems to already run both the C and Haskell coding style though 😅 I am missing something?

Here is the content of check.sh file:

#!/bin/bash

function cat_readme() {
    echo ""
    echo "Usage: ./check.sh DELIVERY_DIR REPORTS_DIR"
    echo ""
}

if [ $# == 1 ] && [ $1 == "--help" ]; then
    cat_readme
elif [ $# = 2 ];
then
    DELIVERY_DIR="$1"
    REPORTS_DIR="$2"

    ### generate reports
    mkdir -p $REPORTS_DIR
    ( timeout --kill-after=10s 120s code-style-c.sh "$DELIVERY_DIR" "$REPORTS_DIR" )
    ( timeout --kill-after=10s 120s code-style-haskell.sh "$DELIVERY_DIR" "$REPORTS_DIR" )

else
    cat_readme
fi

lambdananas is also located at /usr/local/bin/lambdananas

@nogebeat
Copy link
Author

nogebeat commented Feb 28, 2025 via email

@Sigmanificient
Copy link
Contributor

Isn't code-style-haskell.sh supposed to ignore stack folder already?

  source prepare-tmp-workspace.sh
  excluded_dirs="Setup.hs:setup.hs:.git:.stack-work:test:tests:bonus"
  lambdananas -o vera --exclude "$excluded_dirs" . >> lambdananas-reports.log

@nogebeat
Copy link
Author

nogebeat commented Mar 1, 2025 via email

coding-style.sh Outdated
then
REPORTS_DIR=$(my_readlink "$2")
fi
IMAGE_HASKELL="ghcr.io/nogebeat/lambdananas:latest"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nope

@Xephi
Copy link
Member

Xephi commented Mar 2, 2025

en effet, y a lambdananas dans l'image docker, tu peux override l'entrypoint de l'image docker si y a besoin de run lambdananas directement depuis un container basée sur cette image (et cette image uniquement)

@nogebeat
Copy link
Author

nogebeat commented Mar 2, 2025

Oui je vois un peu je suis déjà entrain de corriger et voir une nouvelle version en prenant l'exécution de lambdananas
parce que il nécessite ici le fait que on doive spécifié le fichier que l'on veut corriger alors qu'on pourrais directement parcourir le repo et exécuté les fichiers correspondant en fessant des excusions correspondant au fichier inutile

nogebeat added 4 commits March 2, 2025 05:15
…askell- 🛠 Correction de bugs dans le script Bash : - Fix de la fonction my_readlink (gestion des erreurs de cd) - Correction des conditions if avec -eq au lieu de == - Sécurisation de la mise à jour de lambdananas (find, cp au lieu de cat) - Amélioration de la gestion des couleurs avec tput - Vérification plus robuste des dates pour la mise à jour Docker- �� Implémentation d'une nouvelle version de l'installateur Haskell : - Meilleure gestion des dépendances et installation plus propre- 📖 Mise à jour de l'aide (cat_readme) pour une documentation plus claire
… to extract the binary cleanly from Docker instead of searching in
@Xephi
Copy link
Member

Xephi commented Mar 2, 2025

Je crois que tu n'as pas bien compris ce que l'on veut, il faudrait monter les fichiers dans l'image docker et run lambdananas depuis l'image docker, avec par exemple : docker run --entrypoint /bin/bash ghcr.io/epitech/coding-style-checker:latest -c "lambdananas [file]" ou quelque chose dans le genre, mais je veux pas d'exec locale d'un binaire (même s'il provient de l'image et que tu l'as extrait)
Le but premier de cette image est de pouvoir tester ton coding style dans un environnement semblable à celui de l'environnement de test

@nogebeat
Copy link
Author

nogebeat commented Mar 2, 2025

Okay je vois un peu
je vais essayer de revoir un peu le code et appliqué maintenant ces modifications

nogebeat added 4 commits March 3, 2025 18:47
…le- Réorganisation du script pour une meilleure lisibilité et maintenabilité - Ajout d'une fonction pour gérer la mise à jour des images Docker séparément - Amélioration de l'analyse des arguments et du formatage du message d'aide - Ajout de la prise en charge de la vérification du coding style Haskell ( ou ) - Meilleure gestion des erreurs et des permissions pour les répertoires de rapports - Optimisation de la vérification et mise à jour de l’image Docker - Amélioration du retour utilisateur avec des messages plus clairs et un affichage coloré
@nogebeat nogebeat changed the title Update coding-style.sh Update coding-style.sh and add usage lamdananas Mar 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants