Flexible automation in Racket
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 lines
933 B

#lang racket
(require remote-shell/ssh)
(require "execute.rkt")
(define cwd
(make-parameter "~"))
(define host
(make-parameter #f))
(define hostname
(make-parameter #f))
(define user
(make-parameter #f))
(define commands
(make-parameter #f))
(define executor
(make-parameter #f))
(define-syntax-rule
(plan expr ...)
(parameterize
([commands (list)])
(begin expr ...)))
(define-syntax-rule
(with-cwd dir expr ...)
(parameterize
([cwd
(match (substring dir 0 1)
["/" dir]
[_ (format "~a/~a" (cwd) dir)])])
(begin expr ...)))
(define-syntax-rule
(with-host remote expr ...)
(parameterize
([host remote]
[hostname (remote-host remote)]
[executor (make-exec (remote-host remote))])
(begin expr ...)))
(define-syntax-rule
(become username expr ...)
(parameterize
([user username])
(begin expr ...)))
(provide
(all-defined-out))