sng detect
Fonctionnalité en cours de déploiement. L'interface décrite ici est celle de la prochaine livraison : elle peut encore évoluer, et n'est pas forcément activée sur votre tenant.
sng detect est en cours de diffusion dans la CLI.
sng detect [CHEMIN] [-v] [--no-oidc]
Analyse un dossier (défaut .) et affiche une ligne par programme : langage, framework,
port. Dans un terminal, un assistant propose ensuite de corriger le résultat, de générer un
Dockerfile et un manifeste App par programme, puis de
créer une confiance OIDC pour votre dépôt GitLab. Une session est facultative.
Un programme est un dossier qui contient un fichier de build : go.mod (un programme par
paquet main : racine et cmd/*), package.json, pyproject.toml, requirements.txt ou
Pipfile, composer.json. Langages reconnus : Go, Node / TypeScript, Python, PHP. Un
package.json d'outillage (vite, lint) à côté d'un composer.json ou d'un requirements.txt
n'est pas un second programme.
| Flag | Effet |
|---|---|
-v, --verbose | ajoute l'endroit où le port a été lu |
--no-oidc | saute la dernière étape (confiance OIDC) |
--json | liste structurée (name, path, language, framework, port, portSource, portFrom) ; rien n'est demandé ni écrit |
sng detect . -v
PATH NAME LANGUAGE FRAMEWORK PORT FROM
cmd/api api go chi 8080 internal/config/config.go HTTP_ADDR
ui ui typescript next 3000 (dockerfile) -
jobs jobs python fastapi 8000 (default) -
Le port est lu dans le code (un binaire Go est suivi à travers ses imports : un
getenv("HTTP_ADDR", ":8080") compte ; les ports de métriques, de sondes et internes passent
après le port principal), puis dans un EXPOSE de Dockerfile, un fichier compose, un PORT
de .env, enfin le défaut du framework. - signifie qu'il n'y a pas de serveur.
L'assistant
Dans un terminal, le tableau est suivi de quatre questions. Hors terminal (redirection) ou
avec --json, rien n'est demandé et rien n'est écrit. ACCESSIBLE=1 donne des questions en
texte simple (lecteurs d'écran).
- Le résultat est-il correct ? Répondre non permet de cocher les programmes à corriger,
puis de modifier seulement les champs faux (nom, langage, framework, port) ; le tableau est
réaffiché jusqu'à votre confirmation. Un port corrigé est marqué
(user). - Générer ? Pour chaque programme : un
Dockerfiledans son dossier et un manifesteAppdansstackngo/<nom>.yaml(un service, le port, et un accès HTTPS quand le programme écoute). Un fichier existant n'est écrasé qu'après confirmation. - Image : le nom proposé est celui du dossier du Dockerfile, tag
latest; Entrée l'accepte, ou saisissez le vôtre (registre/nom:tag). - Confiance OIDC : voir ci-dessous.
Ensuite, construisez et poussez les images (sng registry build),
puis appliquez : sng apply stackngo/.
Dockerfiles non-root
Les Dockerfiles générés (Go, Node, Python, PHP) n'exécutent jamais le programme en root :
ils s'exécutent sous un identifiant numérique, 65532:65532 (101:101 pour un site statique
servi par nginx). Le manifeste App généré déclare le même utilisateur (user). Pour PHP,
Apache écoute sur le port 8080, sans privilège.
Confiance OIDC pour votre dépôt GitLab
Dernière étape, seulement si au moins une App a été générée et que le dossier est un dépôt
GitLab : sng detect propose de créer une confiance OIDC
limitée à ce dépôt et à sa branche courante, pour que les jobs de cette branche
puissent déployer sans secret. Les droits accordés sont minimaux : appliquer les App
générées et pousser leurs images dans le registre de la plateforme ; jamais de suppression,
de secret ni de gestion d'identité. Une session de 30 minutes.
Avant toute création, un récapitulatif liste le dépôt, la branche, tous les droits et ce qui reste interdit. La réponse par défaut est non ; Ctrl-C ou Échap valent non, et alors rien n'est créé.
| Situation | Comportement |
|---|---|
Aucune branche active (HEAD détaché) | la branche est demandée |
| Projet GitLab privé | le numéro du projet (Project ID) est demandé ; aucun jeton GitLab n'est lu |
| Confiance équivalente déjà présente | elle est réutilisée ; rien n'est modifié ni supprimé |
Pas de session, ou droits insuffisants (policy:admin, oidctrust:admin) | les commandes sng tenant policy create, sng tenant oidc create et policy attach à lancer sont affichées |
| Dépôt non GitLab | l'étape est ignorée |
--no-oidc saute l'étape. Voir aussi sng tenant oidc.
Erreurs typiques
| Symptôme | Cause |
|---|---|
| aucun programme listé | aucun fichier de build reconnu dans le dossier |
PORT à - | pas de serveur détecté : corrigez-le dans l'assistant si le programme écoute |
Voir aussi
sng run: lancer un dossier sans manifestesng registry build,sng apply