|
|
- ;;; vlocitemacs.el --- Vlocity Build Tool :: Emacs integration
-
- ;;; Commentary:
- ;;
- ;; Essentially the following commands are abstracted into elisp and made dynamic:
- ;;
- ;; vlocity packDeploy -propertyfile build.properties -job job.yaml -key VlocityUITemplate/Test-test
- ;; vlocity packExport -propertyfile build.properties -job job.yaml -key VlocityUITemplate/Test-test
- ;;
- ;;
- ;;; Code:
-
- (require 'transient)
-
- (use-package json
- :ensure t
- :straight (:host github :repo "ryancrum/json.el" :branch "master"))
-
-
- (defun vlo/generate-sfdx-login-list ()
- "This function is used to give a list of choices (Orgs) to the user when deploying/exporting."
- ;; 1. make temp file to put the output of `sfdx force:org:list --json` in
- ;; 2. read that into the following
- ;;
- ;; let* means the variables can ref each other
- (let* ((json-object-type 'hash-table)
- (json-array-type 'list)
- (json-key-type 'string)
- (json (json-read-file "tempfile-location.json")))
- ;; this is how we access the first item of the "result" json member
- (car (gethash "result" json))
- )
- )
-
- (defvar vlo/orgs '(("build.properties" . "job.yaml"))
- "List of cons-es that relate a properties file to a job file.")
-
- (defvar vlo/project-file-name ".vemacs"
- "The name of the VlocitEmacs file.")
-
- (defvar vlo/store-user nil "Store SFDX user for current session.")
-
- (defun vlo/get-user ()
- "Prompt for sfdx username or use stored."
- (if vlo/store-user
- vlo/store-user
- (read-string
-
- ;; (defun vlo/get-propertyfile-name ()
- ;; "The name of the build.properties file."
- ;; (car (nth 0 vlo/orgs)))
-
- ;; (defun vlo/get-jobfile-name ()
- ;; "The name of the job.yaml file."
- ;; (cdr (nth 0 vlo/orgs)))
-
- (defun vlo/get-deployment-key ()
- "Return the \"key\" used by vlocity to specify what to deploy/export."
- (vlo/ensure-init-file)
- (let ((path-list (delete "" (split-string (file-name-directory (buffer-file-name)) "/"))))
- (format "%s/%s"
- (nth (- (length path-list) 2) path-list)
- (nth (- (length path-list) 1) path-list))))
-
- (defun vlo/project-path ()
- "Return path to the project file, or nil.
- If project file exists in the current working directory, or a
- parent directory recursively, return its path. Otherwise, return
- nil."
- (let ((dir (locate-dominating-file default-directory vlo/project-file-name)))
- (unless dir
- (error (concat "Error: cannot find " vlo/project-file-name)))
- dir))
-
- (defun vlo/ensure-init-file ()
- "Asserts that you're currently inside a vlocity project."
- (vlo/project-path))
-
- (defun leo/exec-process (cmd &optional comint)
- "Execute a process running CMD and optionally pass COMINT as t to put buffer in `comint-mode'."
- (let ((compilation-buffer-name-function
- (lambda (mode)
- (format "*exec-process*"))))
- (message (concat "Running " cmd))
- (compile cmd comint)))
-
-
-
-
- (defun vlo/packExport ()
- "Run the packExport command."
- (interactive)
- (if (and (file-exists-p (vlo/get-propertyfile-name))
- (file-exists-p (vlo/get-jobfile-name)))
- (leo/exec-process
- (format "cd %s; vlocity packExport -sfdx.username %s -job %s -key %s"
- (vlo/ensure-init-file)
- (vlo/get-user)
- (vlo/get-jobfile-name)
- (vlo/get-deployment-key)))
- (error (format "Error: cannot find either %s or %s" (vlo/get-propertyfile-name) (vlo/get-jobfile-name)))))
-
- (defun vlo/packDeploy ()
- "Run the packDeploy command."
- (interactive)
- (if (and (file-exists-p (vlo/get-propertyfile-name))
- (file-exists-p (vlo/get-jobfile-name)))
- (leo/exec-process
- (format "cd %s; vlocity packDeploy -sfdx.username %s -job %s -key %s"
- (vlo/ensure-init-file)
- (vlo/get-user)
- (vlo/get-jobfile-name)
- (vlo/get-deployment-key)))
- (error (format "Error: cannot find either %s or %s" (vlo/get-propertyfile-name) (vlo/get-jobfile-name)))))
-
- (define-transient-command vlo/transient-action ()
- "Vlocity Build Tool CLI Actions"
- ["Actions"
- ("e" "export" vlo/packExport)
- ("d" "deploy" vlo/packDeploy)])
-
-
-
-
-
- (provide 'vlocitemacs)
- ;;; vlocitemacs.el ends here
|