# Amorce du poste Data Monkeys. # # Servie publiquement a https://get.datamonkeys.be et lancee par : # # irm https://get.datamonkeys.be | iex # # Pour la LIRE avant de la lancer (c'est le reflexe a garder) : # # irm https://get.datamonkeys.be # # Pourquoi elle existe : l'installateur complet (scripts/installer-poste.ps1) vit dans un depot # prive. Pour le recuperer, il faut deja Git, GitHub CLI et une connexion GitHub. Cette amorce fait # ces trois pas, clone dm-platform, puis passe la main a l'installateur. Elle ne contient aucun # secret et ne demande aucun mot de passe : la connexion GitHub passe par le navigateur. # # Contraintes d'ecriture, parce qu'elle est executee par Invoke-Expression : # - tout est dans un bloc & { } : un `exit` fermerait la fenetre PowerShell de l'arrivant ; # - pas de bloc param(), pas de dependance a un fichier voisin ; # - ASCII uniquement : le texte transite par le reseau puis par iex, sans garantie d'encodage. & { Set-StrictMode -Version Latest $ErrorActionPreference = 'Continue' $Organisation = 'Data-Monkeys' $Racine = 'C:\Dev\_datamonkeys' $Plateforme = Join-Path $Racine 'dm-platform' $Installateur = Join-Path $Plateforme 'scripts\installer-poste.ps1' function Dire([string]$Texte) { Write-Host $Texte } function Etape([string]$Texte) { Write-Host ''; Write-Host ">> $Texte" } function Trouver([string]$Nom) { Get-Command $Nom -CommandType Application -ErrorAction SilentlyContinue | Select-Object -First 1 } function Rafraichir-Path { $env:Path = [Environment]::GetEnvironmentVariable('Path', 'Machine') + ';' + [Environment]::GetEnvironmentVariable('Path', 'User') } function Installer([string]$Id, [string]$Nom, [string]$Commande) { if (Trouver $Commande) { Dire " $Nom deja present"; return $true } if (-not (Trouver 'winget')) { Dire " winget est absent : installe `"Programme d installation d applications`" depuis le Microsoft Store, puis relance cette commande." return $false } Dire " installation de $Nom (Windows peut te demander d'autoriser l'installation : reponds Oui)" & winget install --id $Id --exact --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity Rafraichir-Path if (Trouver $Commande) { Dire " $Nom installe"; return $true } Dire " $Nom n'a pas pu etre installe. Ferme PowerShell, rouvre-le, et relance la commande du mail." return $false } Dire '' Dire 'Data Monkeys : preparation de ton poste' Dire '' Dire 'Ce que cette commande va faire, dans l ordre :' Dire ' 1. installer Git et GitHub CLI s ils manquent' Dire ' 2. te connecter a GitHub (ton navigateur s ouvre, aucun mot de passe ne passe par ce script)' Dire ' 3. verifier ton invitation dans l organisation Data Monkeys' Dire " 4. recuperer le depot dm-platform dans $Racine" Dire ' 5. lancer l installateur du poste, qui te montrera la suite et redemandera ton accord' Dire '' Dire 'Tu peux lire ce script avant de continuer : dans une autre fenetre, tape' Dire ' irm https://get.datamonkeys.be' Dire '' $reponse = Read-Host 'On y va ? [O/n]' if ($reponse -and $reponse -notmatch '^(o|oui|y|yes)$') { Dire 'Abandon : rien n a ete modifie.'; return } Etape 'Git et GitHub CLI' if (-not (Installer 'Git.Git' 'Git' 'git')) { return } if (-not (Installer 'GitHub.cli' 'GitHub CLI' 'gh')) { return } Etape 'Connexion a GitHub' & gh auth status *> $null if ($LASTEXITCODE -ne 0) { Dire ' ton navigateur va s ouvrir : connecte-toi a GitHub, saisis le code affiche ici, puis autorise GitHub CLI' & gh auth login --hostname github.com --git-protocol https --web & gh auth status *> $null if ($LASTEXITCODE -ne 0) { Dire ' connexion non terminee. Relance la commande du mail quand tu veux reprendre.'; return } } & gh auth setup-git *> $null Dire " connecte en tant que $(& gh api user --jq .login)" Etape "Invitation dans l'organisation $Organisation" $etat = & gh api "user/memberships/orgs/$Organisation" --jq .state 2>$null if ($LASTEXITCODE -ne 0) { Dire " aucune invitation trouvee pour ce compte GitHub." Dire ' Verifie que tu es connecte avec le compte que tu as communique a Data Monkeys, puis demande a ton parrain.' return } if ($etat -eq 'pending') { Dire ' une invitation t attend. L accepter te donne acces aux depots de l equipe.' $accepter = Read-Host ' Accepter l invitation maintenant ? [O/n]' if ($accepter -and $accepter -notmatch '^(o|oui|y|yes)$') { Dire ' Invitation non acceptee : rien d autre ne peut se faire sans elle.'; return } & gh api -X PATCH "user/memberships/orgs/$Organisation" -f state=active *> $null if ($LASTEXITCODE -ne 0) { Dire " acceptation impossible depuis ici : ouvre https://github.com/orgs/$Organisation/invitation, accepte, puis relance la commande du mail." return } } Dire ' membre de l organisation' Etape 'Depot dm-platform' if (Test-Path -LiteralPath (Join-Path $Plateforme '.git')) { Dire " deja present dans $Plateforme" } else { $null = New-Item -ItemType Directory -Path $Racine -Force & git clone --quiet "https://github.com/$Organisation/dm-platform.git" $Plateforme if ($LASTEXITCODE -ne 0) { Dire ' clonage impossible. Note le message ci-dessus et demande a ton parrain.'; return } Dire " recupere dans $Plateforme" } Etape 'Installateur du poste' if (-not (Test-Path -LiteralPath $Installateur)) { Dire " installateur introuvable : $Installateur"; return } & powershell.exe -NoProfile -ExecutionPolicy Bypass -File $Installateur # L'installateur tourne dans son propre processus : ce qu'il installe (Claude Code) s'inscrit dans # le PATH enregistre, pas dans celui de cette fenetre. Sans ce rafraichissement, "tape claude" # repondrait "claude n'est pas reconnu" a quelqu'un qui vient de tout faire comme demande. Rafraichir-Path Dire '' Dire 'Et maintenant :' if (Trouver 'claude') { Dire ' - connecte Claude Code : tape claude ici meme, puis suis les instructions (compte fourni par Data Monkeys)' } else { Dire ' - connecte Claude Code : ferme et rouvre PowerShell, tape claude puis suis les instructions (compte fourni par Data Monkeys)' } Dire " - lis $Racine\dm-brain\CLAUDE.md (10 minutes)" Dire ' - remplis ta fiche equipe : c est ton premier geste dans le systeme, ton parrain t accompagne' }