|
|
@ -0,0 +1,127 @@ |
|
|
|
;;; 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 |