Nächste: Zusammenfassung, Vorige: Stufe 3: Kontinuierliche Integration einrichten, Nach oben: Software-Entwicklung [Inhalt][Index]
Mit der Cuirass-Spezifikation oben können wir uns gut anfreunden: Jedes Paket in unserem Kanal wird erstellt, einschließlich einiger Varianten (siehe Stufe 3: Kontinuierliche Integration einrichten). Allerdings können wir in manchen Fällen noch nicht alles ausdrücken, was wir möchten, etwa wenn wir in manchen Cuirass-Jobs cross-kompilieren möchten, Transformationen festlegen oder Docker-Abbilder, RPM-/Deb-Pakete oder sogar Systemtests wollen.
Das erreichen Sie, indem Sie ein Manifest mit den Angaben schreiben (siehe Manifeste verfassen in Referenzhandbuch zu GNU Guix). Das Manifest, was wir für Guile haben, hat Einträge für die oben definierten Paketvarianten sowie zusätzliche Varianten und Cross-Erstellungen:
;; Dies ist ‚.guix/manifest.scm‘. (use-modules (guix) (guix profiles) (guile-package)) ;unser eigenes Paketmodul importieren (define* (package->manifest-entry* package system #:key target) "Gibt einen Manifest-Eintrag für das Paket PACKAGE für SYSTEM zurück. Optional wird für das Zielsystem TARGET cross-kompiliert." (manifest-entry (inherit (package->manifest-entry package)) (name (string-append (package-name package) "." system (if target (string-append "." target) ""))) (item (with-parameters ((%current-system system) (%current-target-system target)) package)))) (define native-builds (manifest (append (map (lambda (system) (package->manifest-entry* guile system)) '("x86_64-linux" "i686-linux" "aarch64-linux" "armhf-linux" "powerpc64le-linux")) (map (lambda (guile) (package->manifest-entry* guile "x86_64-linux")) (cons (package (inherit (package-with-c-toolchain guile `(("clang-toolchain" ,(specification->package "clang-toolchain"))))) (name "guile-clang")) (list guile-without-threads guile-without-networking guile-debug guile-strict-typing)))))) (define cross-builds (manifest (map (lambda (target) (package->manifest-entry* guile "x86_64-linux" #:target target)) '("i586-pc-gnu" "aarch64-linux-gnu" "riscv64-linux-gnu" "i686-w64-mingw32" "x86_64-linux-gnu")))) (concatenate-manifests (list native-builds cross-builds))
Wir gehen nicht auf die Details dieses Manifests ein; es genügt zu wissen, dass wir dadurch mehr Flexibilität haben. Wir müssen jetzt Cuirass die Information geben, dass damit dieses Manifest erstellt werden soll; dazu verwenden wir eine leicht abgeänderte Spezifikation verglichen mit vorher:
;; Cuirass-Spezifikationsdatei, um alle Pakete des ‚guile‘-Kanals zu erstellen. (list (specification (name "guile") (build '(manifest ".guix/manifest.scm")) (channels (append (list (channel (name 'guile) (url "https://git.savannah.gnu.org/git/guile.git") (branch "main"))) %default-channels))))
Wir haben im Teil (build …)
der Spezifikation jetzt '(manifest
".guix/manifest.scm")
verwendet, damit unser Manifest genommen wird, und
das war schon alles!
Nächste: Zusammenfassung, Vorige: Stufe 3: Kontinuierliche Integration einrichten, Nach oben: Software-Entwicklung [Inhalt][Index]