You've already forked guix-tribes
Add Go module packaging for web services
This commit is contained in:
247
tribes/packages/go.scm
Normal file
247
tribes/packages/go.scm
Normal file
@@ -0,0 +1,247 @@
|
||||
(define-module (tribes packages go)
|
||||
#:use-module (guix base32)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system trivial)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (gnu packages bash)
|
||||
#:use-module (gnu packages base)
|
||||
#:use-module (gnu packages compression)
|
||||
#:use-module (gnu packages golang)
|
||||
#:use-module (gnu packages nss)
|
||||
#:use-module (gnu packages version-control)
|
||||
#:export (fetch-go-modules
|
||||
build-go-module
|
||||
go-module-package))
|
||||
|
||||
(define* (fetch-go-modules source
|
||||
#:key
|
||||
name
|
||||
version
|
||||
sha256
|
||||
(go go)
|
||||
(mod-root ".")
|
||||
(delete-vendor? #t)
|
||||
goproxy)
|
||||
"Return a fixed-output store item containing the vendored Go modules for
|
||||
SOURCE."
|
||||
(computed-file
|
||||
(string-append name "-" version "-go-modules")
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(ice-9 ftw)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1))
|
||||
|
||||
(define out #$output)
|
||||
(define work (string-append (getcwd) "/build"))
|
||||
(define source-item #+source)
|
||||
(define source-dir (string-append work "/source"))
|
||||
(define scratch-dir (string-append work "/scratch"))
|
||||
(define cert-file
|
||||
#$(file-append nss-certs "/etc/ssl/certs/ca-certificates.crt"))
|
||||
(define certs-dir
|
||||
#$(file-append nss-certs "/etc/ssl/certs"))
|
||||
(define path
|
||||
(string-join
|
||||
(list #$(file-append go "/bin")
|
||||
#$(file-append git-minimal "/bin")
|
||||
#$(file-append bash-minimal "/bin")
|
||||
#$(file-append coreutils "/bin")
|
||||
#$(file-append findutils "/bin")
|
||||
#$(file-append gzip "/bin")
|
||||
#$(file-append tar "/bin")
|
||||
#$(file-append unzip "/bin")
|
||||
(or (getenv "PATH") ""))
|
||||
":"))
|
||||
|
||||
(define (copy-directory-contents source destination)
|
||||
(for-each
|
||||
(lambda (entry)
|
||||
(copy-recursively (string-append source "/" entry)
|
||||
(string-append destination "/" entry)
|
||||
#:keep-mtime? #t))
|
||||
(remove (lambda (entry)
|
||||
(member entry '("." "..")))
|
||||
(scandir source))))
|
||||
|
||||
(define (unpack-archive archive destination)
|
||||
(mkdir-p scratch-dir)
|
||||
(with-directory-excursion scratch-dir
|
||||
(cond
|
||||
((string-suffix? ".zip" archive)
|
||||
(invoke "unzip" archive))
|
||||
(else
|
||||
(invoke "tar" "-xf" archive)))
|
||||
(let ((entries (remove (lambda (entry)
|
||||
(member entry '("." "..")))
|
||||
(scandir "."))))
|
||||
(match entries
|
||||
((entry)
|
||||
(if (file-is-directory? entry)
|
||||
(copy-recursively entry destination #:keep-mtime? #t)
|
||||
(copy-directory-contents "." destination)))
|
||||
(_
|
||||
(copy-directory-contents "." destination))))))
|
||||
|
||||
(mkdir-p work)
|
||||
(mkdir-p source-dir)
|
||||
(if (file-is-directory? source-item)
|
||||
(copy-recursively source-item source-dir #:keep-mtime? #t)
|
||||
(unpack-archive source-item source-dir))
|
||||
(invoke #$(file-append coreutils "/bin/chmod") "-R" "u+w" source-dir)
|
||||
|
||||
(setenv "PATH" path)
|
||||
(setenv "HOME" (string-append work "/home"))
|
||||
(setenv "XDG_CACHE_HOME" (string-append work "/cache"))
|
||||
(setenv "GOCACHE" (string-append work "/go-cache"))
|
||||
(setenv "GOMODCACHE" (string-append work "/go-mod-cache"))
|
||||
(setenv "GOPATH" (string-append work "/go"))
|
||||
(setenv "GO111MODULE" "on")
|
||||
(setenv "GOTOOLCHAIN" "local")
|
||||
(setenv "SSL_CERT_DIR" certs-dir)
|
||||
(setenv "SSL_CERT_FILE" cert-file)
|
||||
(setenv "GIT_SSL_CAINFO" cert-file)
|
||||
(mkdir-p (getenv "HOME"))
|
||||
(mkdir-p (getenv "XDG_CACHE_HOME"))
|
||||
(mkdir-p (getenv "GOCACHE"))
|
||||
(mkdir-p (getenv "GOMODCACHE"))
|
||||
(mkdir-p (getenv "GOPATH"))
|
||||
#$@(if goproxy
|
||||
(list #~(setenv "GOPROXY" #$goproxy))
|
||||
'())
|
||||
|
||||
(with-directory-excursion
|
||||
(if (string=? #$mod-root ".")
|
||||
source-dir
|
||||
(string-append source-dir "/" #$mod-root))
|
||||
(when (and #$delete-vendor? (file-exists? "vendor"))
|
||||
(delete-file-recursively "vendor"))
|
||||
(invoke "go" "mod" "vendor")
|
||||
(mkdir-p out)
|
||||
(copy-recursively "vendor" out #:keep-mtime? #t))))
|
||||
#:options
|
||||
`(#:hash ,(base32 sha256)
|
||||
#:hash-algo sha256
|
||||
#:recursive? #t
|
||||
#:leaked-env-vars ("http_proxy" "https_proxy"
|
||||
"LC_ALL" "LC_MESSAGES" "LANG" "COLUMNS"))))
|
||||
|
||||
(define* (build-go-module source
|
||||
#:key
|
||||
name
|
||||
version
|
||||
home-page
|
||||
synopsis
|
||||
description
|
||||
license
|
||||
vendor-sha256
|
||||
(go go)
|
||||
(mod-root ".")
|
||||
(sub-packages '("."))
|
||||
(build-flags '("-trimpath"))
|
||||
(ldflags '())
|
||||
(test-flags '())
|
||||
(test-sub-packages '("./..."))
|
||||
(tests? #t)
|
||||
(delete-vendor? #t)
|
||||
goproxy
|
||||
(native-inputs '())
|
||||
(inputs '()))
|
||||
"Return a package that builds SOURCE with vendored Go modules."
|
||||
(let* ((go-modules
|
||||
(fetch-go-modules source
|
||||
#:name name
|
||||
#:version version
|
||||
#:sha256 vendor-sha256
|
||||
#:go go
|
||||
#:mod-root mod-root
|
||||
#:delete-vendor? delete-vendor?
|
||||
#:goproxy goproxy))
|
||||
(ldflags-string (string-join ldflags " "))
|
||||
(ldflags-arguments
|
||||
(if (null? ldflags)
|
||||
'()
|
||||
`("-ldflags" ,ldflags-string))))
|
||||
(package
|
||||
(name name)
|
||||
(version version)
|
||||
(source source)
|
||||
(build-system gnu-build-system)
|
||||
(native-inputs
|
||||
(append (list go)
|
||||
native-inputs))
|
||||
(inputs inputs)
|
||||
(arguments
|
||||
(list
|
||||
#:tests? tests?
|
||||
#:modules '((guix build gnu-build-system)
|
||||
(guix build utils))
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(delete 'configure)
|
||||
(add-after 'unpack 'install-vendor-directory
|
||||
(lambda _
|
||||
(let ((vendor-directory
|
||||
(if (string=? #$mod-root ".")
|
||||
"vendor"
|
||||
(string-append #$mod-root "/vendor"))))
|
||||
(when (file-exists? vendor-directory)
|
||||
(delete-file-recursively vendor-directory))
|
||||
(copy-recursively #+go-modules vendor-directory
|
||||
#:keep-mtime? #t))))
|
||||
(add-before 'build 'configure-go-environment
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let ((out (assoc-ref outputs "out")))
|
||||
(setenv "HOME" (string-append (getcwd) "/.home"))
|
||||
(setenv "XDG_CACHE_HOME" (string-append (getcwd) "/.cache"))
|
||||
(setenv "GOCACHE" (string-append (getcwd) "/go-cache"))
|
||||
(setenv "GOMODCACHE" (string-append (getcwd) "/go-mod-cache"))
|
||||
(setenv "GOPATH" (string-append (getcwd) "/go"))
|
||||
(setenv "GOBIN" (string-append out "/bin"))
|
||||
(setenv "GO111MODULE" "on")
|
||||
(setenv "GOTOOLCHAIN" "local")
|
||||
(setenv "GOPROXY" "off")
|
||||
(setenv "GOSUMDB" "off")
|
||||
(mkdir-p (getenv "HOME"))
|
||||
(mkdir-p (getenv "XDG_CACHE_HOME"))
|
||||
(mkdir-p (getenv "GOCACHE"))
|
||||
(mkdir-p (getenv "GOMODCACHE"))
|
||||
(mkdir-p (getenv "GOPATH"))
|
||||
(mkdir-p (getenv "GOBIN")))))
|
||||
(replace 'build
|
||||
(lambda _
|
||||
(with-directory-excursion
|
||||
(if (string=? #$mod-root ".")
|
||||
"."
|
||||
#$mod-root)
|
||||
(for-each
|
||||
(lambda (sub-package)
|
||||
(apply invoke "go" "install"
|
||||
(append
|
||||
'#$build-flags
|
||||
'#$ldflags-arguments
|
||||
(list sub-package))))
|
||||
'#$sub-packages))))
|
||||
(replace 'check
|
||||
(lambda _
|
||||
(when #$tests?
|
||||
(with-directory-excursion
|
||||
(if (string=? #$mod-root ".")
|
||||
"."
|
||||
#$mod-root)
|
||||
(apply invoke "go" "test"
|
||||
(append '("-mod=vendor")
|
||||
'#$test-flags
|
||||
'#$test-sub-packages))))))
|
||||
(replace 'install
|
||||
(lambda _
|
||||
#t)))))
|
||||
(home-page home-page)
|
||||
(synopsis synopsis)
|
||||
(description description)
|
||||
(license license))))
|
||||
|
||||
(define go-module-package build-go-module)
|
||||
114
tribes/packages/web.scm
Normal file
114
tribes/packages/web.scm
Normal file
@@ -0,0 +1,114 @@
|
||||
(define-module (tribes packages web)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module ((gnu packages web) #:prefix upstream:)
|
||||
#:use-module ((guix licenses) #:prefix license:)
|
||||
#:use-module (guix base32)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (tribes packages go)
|
||||
#:export (hitch
|
||||
vinyl
|
||||
lego))
|
||||
|
||||
(define-public hitch
|
||||
(package
|
||||
(inherit upstream:hitch)
|
||||
(version "1.8.0")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://hitch-tls.org/source/hitch-"
|
||||
version
|
||||
".tar.gz"))
|
||||
(sha256
|
||||
(base32 "0klg2pfsbhjdabjv52i0gfjfv23r45n4vs3965xa5zkzpj299jfz"))))))
|
||||
|
||||
(define-public vinyl
|
||||
(package
|
||||
(inherit upstream:varnish)
|
||||
(name "vinyl")
|
||||
(home-page "https://vinyl-cache.org/")
|
||||
(version "9.0.0")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append home-page "_downloads/vinyl-cache-"
|
||||
version
|
||||
".tgz"))
|
||||
(sha256
|
||||
(base32 "05xxhgs1r9zwanx5arafrd7hkjn3kmsnrbfh1zajfxm7q88c4h4p"))))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments upstream:varnish)
|
||||
((#:phases phases)
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'use-absolute-file-names
|
||||
(lambda _
|
||||
(substitute* '("bin/vinyltest/vtc_vinyl.c"
|
||||
"bin/vinyltest/vtest2/src/vtc_process.c"
|
||||
"bin/vinyltest/vtest2/src/vtc_haproxy.c"
|
||||
"bin/vinyltest/tests/u00014.vtc"
|
||||
"bin/vinyld/mgt/mgt_vcc.c")
|
||||
(("/bin/sh") (which "bash")))
|
||||
(let ((rm (which "rm")))
|
||||
(substitute* "bin/vinyld/mgt/mgt_shmem.c"
|
||||
(("rm -rf") (string-append rm " -rf")))
|
||||
(substitute* "bin/vinyltest/vtest2/src/vtc_main.c"
|
||||
(("/bin/rm") rm))
|
||||
(substitute* "bin/vinyld/mgt/mgt_main.c"
|
||||
(("rm -rf") (string-append rm " -rf"))))
|
||||
(substitute* "bin/vinyltest/tests/u00000.vtc"
|
||||
(("/bin/echo") (which "echo")))))
|
||||
(add-after 'unpack 'remove-failing-tests
|
||||
(lambda _
|
||||
;; This test still trips on name resolution in the build
|
||||
;; container.
|
||||
(delete-file "bin/vinyltest/tests/b00085.vtc")))
|
||||
(add-before 'install 'patch-Makefile
|
||||
(lambda _
|
||||
(substitute* "Makefile"
|
||||
(("^install-data-am: install-data-local")
|
||||
"install-data-am: "))))
|
||||
(add-after 'install 'wrap-vinyld
|
||||
;; Vinyl uses GCC to compile VCL, so wrap it with the required
|
||||
;; toolchain environment instead of propagating GCC globally.
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(wrap-program (string-append #$output "/sbin/vinyld")
|
||||
`("PATH" ":" prefix (,(dirname (which "as"))))
|
||||
`("LIBRARY_PATH" ":" prefix
|
||||
(,(dirname
|
||||
(search-input-file inputs "lib/libc.so")))))))))))
|
||||
(synopsis "Web application accelerator")
|
||||
(description
|
||||
"Vinyl Cache is a high-performance HTTP accelerator. It acts as a
|
||||
caching reverse proxy and load balancer. You install it in front of any
|
||||
server that speaks HTTP and configure it to cache content through an
|
||||
extensive configuration language.")
|
||||
(properties
|
||||
'((release-monitoring-url . "https://vinyl-cache.org/releases/")))))
|
||||
|
||||
(define-public lego
|
||||
(build-go-module
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/go-acme/lego")
|
||||
(commit "v4.33.0")))
|
||||
(file-name (git-file-name "lego" "4.33.0"))
|
||||
(sha256
|
||||
(base32 "0627wnwbh46fsra6b3l85n3wsv91v8ghrrvw69djbl8ir5w1lmk8")))
|
||||
#:name "lego"
|
||||
#:version "4.33.0"
|
||||
#:vendor-sha256 "0zsfb26lrsm7ch6avm3bhh55qjfys3m66y61k12546yky865lxmb"
|
||||
#:sub-packages '("./cmd/lego")
|
||||
#:ldflags '("-s" "-w" "-X" "main.version=4.33.0")
|
||||
#:tests? #f
|
||||
#:home-page "https://go-acme.github.io/lego/"
|
||||
#:synopsis "Let's Encrypt client and ACME library written in Go"
|
||||
#:description
|
||||
"Lego is an ACME client and library for Let's Encrypt and other ACME
|
||||
certificate authorities."
|
||||
#:license license:expat))
|
||||
Reference in New Issue
Block a user