From 08d5d6f9b07bf8a0396ccfadb43a951e4b2a9de7 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 6 Nov 2023 11:09:50 -0500 Subject: [PATCH] Guix and CI --- .builds/guix.yml | 28 +++++ guix.scm | 267 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 295 insertions(+) create mode 100644 .builds/guix.yml create mode 100644 guix.scm diff --git a/.builds/guix.yml b/.builds/guix.yml new file mode 100644 index 0000000..75b550e --- /dev/null +++ b/.builds/guix.yml @@ -0,0 +1,28 @@ +image: guix +packages: +- plzip +sources: +- https://git.sr.ht/~singpolyma/sgx-aa +secrets: +- 9ded4157-4cf9-42ae-b7d0-55eb6e52ea37 +- fd52c9ce-04e8-4684-af6c-1ab78d2e124a +artifacts: +- sgx-aa.scm +- sgx-aa.nar.lz +tasks: +- bake: | + printf "(define-module (sgx-aa))\n" >> sgx-aa.scm + sed '/^;;;;$/q' sgx-aa/guix.scm >> sgx-aa.scm + printf "(define-public sgx-aa\n\t" >> sgx-aa.scm + cd sgx-aa + printf '(load "%s/guix.scm")\n(write sgx-aa-baked)\n' "$(pwd)" | guix repl /dev/stdin >> ../sgx-aa.scm + cd - + printf ")\n" >> sgx-aa.scm + rm -f sgx-aa/guix.scm + [ "$BUILD_REASON" = patchset ] || rm -rf sgx-aa +- build: | + if [ "$BUILD_REASON" = patchset ]; then with_source="--with-source=$PWD/sgx-aa"; fi + guix build $with_source --no-grafts -r out -L. sgx-aa +- archive: | + guix archive --export -r --no-grafts $(readlink -f out) > sgx-aa.nar + plzip sgx-aa.nar diff --git a/guix.scm b/guix.scm new file mode 100644 index 0000000..c2e4bb8 --- /dev/null +++ b/guix.scm @@ -0,0 +1,267 @@ +(use-modules + ((guix licenses) #:prefix license:) + (guix packages) + (guix download) + (guix git-download) + (guix build-system go) + (gnu packages golang) + (ice-9 rdelim) + (ice-9 popen) +) + +(define-public go-github-com-gorilla-mux + (package + (name "go-github-com-gorilla-mux") + (version "1.8.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/gorilla/mux") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0pfh9bmy7j750ghw268jg90n9cx7vsx6wzv3bda0qqk512y02c4w")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/gorilla/mux")) + (home-page "https://github.com/gorilla/mux") + (synopsis "gorilla/mux") + (description "Package mux implements a request router and dispatcher.") + (license license:bsd-3))) + +(define-public go-github-com-cespare-xxhash-v2 + (package + (name "go-github-com-cespare-xxhash-v2") + (version "2.2.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/cespare/xxhash") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "055xvgyv78xl6bdj8kgy0105n9cq33w4rb0sg84lp9r85i9qx2l5")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/cespare/xxhash/v2")) + (home-page "https://github.com/cespare/xxhash") + (synopsis "xxhash") + (description + "Package xxhash implements the 64-bit variant of @code{xxHash} (XXH64) as +described at +@code{@@url{http://cyan4973.github.io/xxHash/,http://cyan4973.github.io/xxHash/}.}") + (license license:expat))) + +(define-public go-github-com-dgryski-go-rendezvous + (package + (name "go-github-com-dgryski-go-rendezvous") + (version "0.0.0-20200823014737-9f7001d12a5f") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/dgryski/go-rendezvous") + (commit (go-version->git-ref version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0hhdbsm5k19kh1fyxs4aibza9jylils4p3555lr8xalhj2iz3zlz")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/dgryski/go-rendezvous")) + (home-page "https://github.com/dgryski/go-rendezvous") + (synopsis #f) + (description #f) + (license license:expat))) + +(define-public go-github-com-redis-go-redis-v9 + (package + (name "go-github-com-redis-go-redis-v9") + (version "9.2.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/redis/go-redis") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0mrfcg50kkh7pfbb3q0758nfgz80bw00ijngd3xry41cdhakfjrs")))) + (build-system go-build-system) + (arguments + `(#:import-path "github.com/redis/go-redis/v9" #:go ,go-1.19 #:tests? #f)) + (propagated-inputs `(("go-github-com-dgryski-go-rendezvous" ,go-github-com-dgryski-go-rendezvous) + ("go-github-com-cespare-xxhash-v2" ,go-github-com-cespare-xxhash-v2))) + (home-page "https://github.com/redis/go-redis") + (synopsis "Redis client for Go") + (description "Package redis implements a Redis client.") + (license license:bsd-2))) + +(define-public go-mellium-im-sasl + (package + (name "go-mellium-im-sasl") + (version "0.3.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/mellium/sasl") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1qld1kw5j53nj1i0zgr4xbdkqgjcslaiir6s82a52h2izb8mp8ib")))) + (build-system go-build-system) + (arguments + '(#:import-path "mellium.im/sasl")) + (propagated-inputs `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto))) + (home-page "https://mellium.im/sasl") + (synopsis "SASL") + (description + "Package sasl implements the Simple Authentication and Security Layer (SASL) as +defined by @@url{https://rfc-editor.org/rfc/rfc4422.html,RFC 4422}.") + (license license:bsd-2))) + +(define-public go-mellium-im-xmlstream + (package + (name "go-mellium-im-xmlstream") + (version "0.15.4") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/mellium/xmlstream") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "183nqjd34f7hfaahnh7cqh2wrwvjy77dkjm484mcxb935rdrpjm5")))) + (build-system go-build-system) + (arguments + '(#:import-path "mellium.im/xmlstream")) + (propagated-inputs `(("go-mellium-im-reader" ,go-mellium-im-reader))) + (home-page "https://mellium.im/xmlstream") + (synopsis "mellium.im/xmlstream") + (description + "Package xmlstream provides an API for streaming, transforming, and otherwise +manipulating XML data.") + (license license:bsd-2))) + +(define-public go-mellium-im-reader + (package + (name "go-mellium-im-reader") + (version "0.1.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/mellium/reader") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1drb2ibi6ygg4x824vymj1zw2kj1i6wvdiqw88qlwbgj9jqly2kw")))) + (build-system go-build-system) + (arguments + '(#:import-path "mellium.im/reader")) + (home-page "https://mellium.im/reader") + (synopsis "mellium.im/reader") + (description + "Package reader contains small, reusable APIs that build on the io.Reader +interface.") + (license license:bsd-2))) + +(define-public go-mellium-im-xmpp + (package + (name "go-mellium-im-xmpp") + (version "0.21.4") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/mellium/xmpp") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "176q3hlidhlcsad54fjwm6fhk2il42r5dhmrlga6glflkdsn50zj")))) + (build-system go-build-system) + (arguments + '(#:import-path "mellium.im/xmpp")) + (propagated-inputs `(("go-mellium-im-reader" ,go-mellium-im-reader) + ("go-golang-org-x-mod" ,go-golang-org-x-mod) + ("go-golang-org-x-crypto" ,go-golang-org-x-crypto) + ("go-mellium-im-xmlstream" ,go-mellium-im-xmlstream) + ("go-mellium-im-sasl" ,go-mellium-im-sasl) + ("go-golang-org-x-tools" ,go-golang-org-x-tools) + ("go-golang-org-x-text" ,go-golang-org-x-text) + ("go-golang-org-x-sys" ,go-golang-org-x-sys) + ("go-golang-org-x-net" ,go-golang-org-x-net) + ("go-golang-org-x-image" ,go-golang-org-x-image))) + (home-page "https://mellium.im/xmpp") + (synopsis "XMPP") + (description + "Package xmpp provides functionality from the Extensible Messaging and Presence +Protocol, sometimes known as \"Jabber\".") + (license license:bsd-2))) + +;;;; + +(define %source-dir (dirname (current-filename))) +(define %git-dir (string-append %source-dir "/.git")) + +; Bake a template by eval'ing the leaves +(define-public (bake tmpl) + (cons + (car tmpl) + (map + (lambda (x) (list (car x) (eval (cadr x) (current-module)))) + (cdr tmpl)))) + +; double-escaped template of the sgx-aa sexp +; This allows us to bake the expression without doing a full eval to a record, +; so it can be written +(define-public sgx-aa-template + '(package + (name "sgx-aa") + (version (read-line (open-pipe* OPEN_READ "git" "--git-dir" %git-dir "describe" "--always" "--dirty"))) + (source `(origin + (method git-fetch) + (uri (git-reference + (recursive? #t) + (url "https://git.singpolyma.net/sgx-aa") + (commit ,(read-line (open-pipe* OPEN_READ "git" "--git-dir" %git-dir "rev-parse" "HEAD"))))) + (file-name (git-file-name name version)) + (sha256 + (base32 + ,(read-line (open-pipe* OPEN_READ "guix" "hash" "-rx" %source-dir)))))) + (build-system 'go-build-system) + (arguments + '`(#:import-path "sgx-aa" #:unpack-path "sgx-aa" #:go ,go-1.19 #:tests? #f #:install-source? #f)) + (inputs + '(list + go-github-com-gorilla-mux + go-github-com-dgryski-go-rendezvous + go-github-com-google-uuid + go-github-com-redis-go-redis-v9 + go-golang-org-x-crypto + go-golang-org-x-mod + go-golang-org-x-net + go-golang-org-x-sys + go-golang-org-x-text + go-golang-org-x-tools + go-mellium-im-reader + go-mellium-im-sasl + go-mellium-im-xmlstream + go-mellium-im-xmpp + go-github-com-cespare-xxhash-v2)) + (home-page "https://certwatch.xmpp.net") + (synopsis #f) + (description #f) + (license 'license:agpl3))) + +; Baked version of sgx-aa-template with leaves eval'd +(define-public sgx-aa-baked + (bake sgx-aa-template)) + +; Build clean from git the version from a local clone +; To build whatever is sitting in local use: +; guix build --with-source=$PWD -f guix.scm +(eval sgx-aa-baked (current-module)) -- 2.45.2