Communitygithub.com

actonos/actonos

ActonOS est un système d'exploitation mono-usage conçu comme un noyau d'agent IA personnalisable et autonome, fonctionnant 24h/24 et 7j/7.

Qu'est-ce que actonos ?

Cette compétence est conçue pour construire les artefacts ActonOS : le frontend, le binaire Go, l'image Docker ou l'ISO bare-metal. La pipeline de compilation est un processus en plusieurs étapes incluant les dépendances, le linting, les tests (unitaires et d'intégration), la construction web, la compilation Go, la création de l'image Docker et la génération de l'ISO. Elle prend en charge la compilation croisée pour les architectures AMD64 et ARM64, et intègre les métadonnées de version via les flags du linker Go. L'ensemble est optimisé pour produire un binaire statique et une image Docker légère (<35 Mo). L'intégration `go:embed` permet d'incorporer les assets du frontend directement dans le binaire, avec un système de fichiers superposé pour la personnalisation au moment de l'exécution. Cette compétence est utile pour les développeurs qui souhaitent automatiser la construction d'ActonOS pour différents environnements (conteneurs, machines physiques, systèmes embarqués).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add actonos/actonos

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Compétence de construction ActonOS

Utilisez cette compétence lors de la construction des artefacts ActonOS : le frontend, le binaire Go, l'image Docker ou l'ISO bare-metal.

Aperçu de la pipeline de compilation

make deps → make lint → make test → make test-race (CI Linux) → make build-web → make build → make docker → make iso
CibleCe qu'elle faitSortie
make depsInstaller les dépendances Go + Node—
make lintExécuter Go vet, gofmt, golangci-lint, ESLint—
make testExécuter tous les tests (unitaires + intégration)build/coverage.out
make test-raceExécuter le détecteur de course CGO LinuxPorte CI obligatoire
make build-webConstruire le frontend React (production Vite)web/dist/
make buildConstruire le binaire actond complet (inclut le web)build/actond
make build-onlyConstruire uniquement le binaire Go (sans reconstruire le web)build/actond
make dockerConstruire l'image Dockeractonos/actonos:VERSION
make isoConstruire l'ISO d'installation bare-metalbuild/ActonOS-vVERSION.iso
make allPipeline complète : lint → test → buildbuild/actond

Variables de construction

Le binaire Go intègre les métadonnées de version via les flags du linker (-ldflags) :

LDFLAGS := -s -w \
    -X main.Version=$(VERSION) \
    -X main.GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) \
    -X main.BuildTime=$(BUILD_TIME)

Ces valeurs sont lues depuis :

  • Fichier VERSION → main.Version
  • git rev-parse --short HEAD → main.GitCommit
  • date -u → main.BuildTime

Étape par étape : Construction complète pour la production

1. Construire le frontend

make build-web
# Exécute : cd web && npm run build
# Sortie : web/dist/ (assets statiques compressés)

Le frontend est construit avec Vite et produit des assets compressés en gzip/brotli qui sont intégrés dans le binaire Go via go:embed.

2. Construire le binaire Go

make build
# Exécute : CGO_ENABLED=0 go build -trimpath -ldflags '...' -o build/actond ./cmd/actond/

Critique : Toujours construire avec CGO_ENABLED=0 pour obtenir un binaire entièrement statique.

3. Compilation croisée

# Linux AMD64 (cible par défaut pour MiniPC/Docker)
GOOS=linux GOARCH=amd64 make build

# Linux ARM64 (pour les appareils basés sur ARM)
GOOS=linux GOARCH=arm64 make build

4. Construire l'image Docker

make docker
# Sortie : actonos/actonos:VERSION et actonos/actonos:latest

Le Dockerfile utilise une construction multi-étapes :

  1. Étape 1 : Construire le binaire Go
  2. Étape 2 : Construire le frontend
  3. Étape 3 : Image d'exécution Alpine minimaliste (<35 Mo)

5. Construire l'ISO (Bare-metal)

# Nécessite : hôte Debian/Ubuntu avec live-build et debootstrap
make iso
# Exécute : bash scripts/build-iso.sh
# Sortie : build/ActonOS-vVERSION.iso

Intégration go:embed

Les assets du frontend construit sont intégrés dans le binaire Go :

// internal/server/static.go
//go:embed all:../../../web/dist
var embeddedAssets embed.FS

Le module layered_fs.go implémente un système de fichiers superposé qui vérifie /data/overrides/ avant de revenir aux assets intégrés, permettant la personnalisation de l'interface utilisateur au moment de l'exécution.

Vérification d'une construction

# Vérifier la version du binaire
./build/actond --version

# Vérifier la taille du binaire
ls -lh build/actond

# Vérifier qu'il est vraiment statique (pas de liaison dynamique)
file build/actond
# Attendu : "ELF 64-bit LSB executable, x86-64, statically linked"

# Test rapide
./build/actond --data-dir=./dev-data --log-level=debug &
curl http://localhost:8080/api/health
kill %1

Problèmes courants de construction

ProblèmeCauseSolution
web/dist not foundFrontend non construitExécutez make build-web d'abord
CGO requiredUtilisation de mattn/go-sqlite3Utilisez modernc.org/sqlite à la place
go:embed pattern matches no filesweb/dist/ videConstruisez le frontend d'abord
Binaire non statiqueCGO_ENABLED=1Définissez CGO_ENABLED=0
Construction Docker OOMFaible mémoire pendant la compilation GoAugmentez la limite mémoire Docker

Fichiers de référence

Skills associés