summaryrefslogtreecommitdiff
path: root/forge/webhook.scm
diff options
context:
space:
mode:
Diffstat (limited to 'forge/webhook.scm')
-rw-r--r--forge/webhook.scm193
1 files changed, 0 insertions, 193 deletions
diff --git a/forge/webhook.scm b/forge/webhook.scm
deleted file mode 100644
index 737b9e6..0000000
--- a/forge/webhook.scm
+++ /dev/null
@@ -1,193 +0,0 @@
-;;; guix-forge --- Guix software forge meta-service
-;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net>
-;;;
-;;; This file is part of guix-forge.
-;;;
-;;; guix-forge is free software: you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published
-;;; by the Free Software Foundation, either version 3 of the License,
-;;; or (at your option) any later version.
-;;;
-;;; guix-forge is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;;; General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with guix-forge. If not, see
-;;; <https://www.gnu.org/licenses/>.
-
-(define-module (forge webhook)
- #:use-module (srfi srfi-1)
- #:use-module ((gnu packages admin) #:select (shadow))
- #:use-module ((gnu packages guile) #:select (guile-json-4))
- #:use-module (gnu services)
- #:use-module (gnu services shepherd)
- #:use-module (gnu system accounts)
- #:use-module (gnu system shadow)
- #:use-module (guix gexp)
- #:use-module (guix modules)
- #:use-module (guix records)
- #:use-module (guix packages)
- #:use-module (guix git-download)
- #:use-module (guix build-system go)
- #:use-module ((guix licenses) #:prefix license:)
- #:export (webhook-service-type
- webhook-configuration
- webhook-configuration?
- webhook-configuration-package
- webhook-configuration-port
- webhook-configuration-log-directory
- webhook-configuration-hooks
- webhook-hook
- webhook-hook?
- webhook-hook-id
- webhook-hook-run))
-
-(define webhook
- (package
- (name "webhook")
- (version "2.8.0")
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/adnanh/webhook")
- (commit version)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0n03xkgwpzans0cymmzb0iiks8mi2c76xxdak780dk0jbv6qgp5i"))))
- (build-system go-build-system)
- (arguments
- `(#:import-path "github.com/adnanh/webhook"
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'configure
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "src/github.com/adnanh/webhook/webhook_test.go"
- (("/bin/echo")
- (string-append (assoc-ref inputs "coreutils")
- "/bin/echo"))))))))
- (home-page "https://github.com/adnanh/webhook")
- (synopsis "Lightweight incoming webhook server")
- (description "webhook is a lightweight configurable tool written
-in Go, that allows you to easily create HTTP endpoints (hooks) on your
-server, which you can use to execute configured commands. You can also
-pass data from the HTTP request (such as headers, payload or query
-variables) to your commands. webhook also allows you to specify rules
-which have to be satisfied in order for the hook to be triggered.
-
-For example, if you're using Github or Bitbucket, you can use webhook
-to set up a hook that runs a redeploy script for your project on your
-staging server, whenever you push changes to the master branch of your
-project.
-
-If you use Mattermost or Slack, you can set up an \"Outgoing webhook
-integration\" or \"Slash command\" to run various commands on your
-server, which can then report back directly to you or your channels
-using the \"Incoming webhook integrations\", or the appropriate
-response body.
-
-webhook aims to do nothing more than it should do, and that is:
-
-@itemize
-@item receive the request,
-@item parse the headers, payload and query variables,
-@item check if the specified rules for the hook are satisfied,
-@item and finally, pass the specified arguments to the specified
-command via command line arguments or via environment variables.
-@end itemize
-
-Everything else is the responsibility of the command's author.")
- (license license:expat)))
-
-(define-record-type* <webhook-configuration>
- webhook-configuration make-webhook-configuration
- webhook-configuration?
- (package webhook-configuration-package
- (default webhook))
- (ip webhook-configuration-ip
- (default "127.0.0.1"))
- (port webhook-configuration-port
- (default 9000))
- (log-directory webhook-configuration-log-directory
- (default "/var/log/webhook"))
- (hooks webhook-configuration-hooks
- (default '())))
-
-(define-record-type* <webhook-hook>
- webhook-hook make-webhook-hook
- webhook-hook?
- (id webhook-hook-id)
- (run webhook-hook-run))
-
-(define (webhook-activation config)
- ;; Create log directory.
- #~(mkdir-p #$(webhook-configuration-log-directory config)))
-
-(define (hooks-json-gexp config)
- (with-extensions (list guile-json-4)
- #~(begin
- (use-modules (srfi srfi-26)
- (json))
-
- (call-with-output-file #$output
- (cut scm->json
- ;; We convert from list to vector on the build-side
- ;; because a vector cannot be lowered correctly into a
- ;; G-expression.
- (list->vector
- ;; We build a true dotted association list in this
- ;; roundabout way because a true dotted association
- ;; list cannot be lowered correctly into a
- ;; G-expression.
- (map (cut map (cut apply cons <>) <>)
- '#$(map (lambda (hook)
- `(("id" ,(webhook-hook-id hook))
- ("execute-command" ,(program-file (webhook-hook-id hook)
- (webhook-hook-run hook)))))
- (webhook-configuration-hooks config))))
- <>)))))
-
-(define webhook-shepherd-service
- (lambda (config)
- (shepherd-service
- (documentation "Run webhook.")
- (provision '(webhook))
- (requirement '(networking))
- (modules '((gnu build shepherd)
- (gnu system file-systems)))
- (start (with-imported-modules (source-module-closure
- '((gnu build shepherd)
- (gnu system file-systems)))
- #~(make-forkexec-constructor/container
- (list #$(file-append (webhook-configuration-package config)
- "/bin/webhook")
- "-hooks" #$(computed-file "hooks.json"
- (hooks-json-gexp config))
- "-ip" #$(webhook-configuration-ip config)
- "-port" #$(number->string (webhook-configuration-port config))
- "-logfile" #$(string-append (webhook-configuration-log-directory config)
- "/webhook.log"))
- #:mappings (list (file-system-mapping
- (source #$(webhook-configuration-log-directory config))
- (target source)
- (writable? #t)))
- #:log-file "/var/log/webhook.log")))
- (stop #~(make-kill-destructor)))))
-
-(define webhook-service-type
- (service-type
- (name 'webhook)
- (description "Run webhook.")
- (extensions (list (service-extension activation-service-type
- webhook-activation)
- (service-extension shepherd-root-service-type
- (compose list webhook-shepherd-service))))
- (compose concatenate)
- (extend (lambda (config hook-extensions)
- (webhook-configuration
- (inherit config)
- (hooks (append (webhook-configuration-hooks config)
- hook-extensions)))))
- (default-value (webhook-configuration))))