gitlab 상태를 휴가로 바꾸는 emacs lisp 대화형(interactive) 함수
휴가일 때, slack status를 :palm_tree: 휴가
로 바꾸고 있다. 멘션을 하려고 아이디를 타이핑하다 보면 휴가 상태가 바로 보여서 압박감을 준다. 진짜 급한 일이 아니면 휴가 중에 멘션을 받지 않는 좋은 효과가 있어서 휴가를 쓰면 꼭 설정한다.
gitlab에도 현재 상태를 설정할 수 있는 기능이 있다. 휴가인지 아닌지 해당 팀원의 slack 상태를 보는 게 암묵적인 룰이긴 한데, gitlab에도 휴가 중인 걸 세팅할 수 있다면 팀원이 편할 것 같아서 세팅하기 시작했다.
slack, gitlab 따로 휴가를 세팅하고 복귀하면 풀어주고를 해야 한다. 이걸 한 번에 할 수 있는 방법을 찾아봤다. 결론부터 말하면 gitlab은 성공했고 slack은 실패했다. slack은 users.profile.set API를 사용하면 되는데, user 레벨 토큰이 필요하다. 그 말은 봇을 만든다면 user 별로 활성화해야 한다. 휴가 설정 하나 때문에 봇을 만들고 워크스페이스에 입장까지 시켜야 한다. 너무 번거롭다.
gitlab은 사용자 토큰으로 /user/status REST API를 사용하면 손쉽게 설정할 수 있다. slack과 다르게 템플릿이 없어서 :palm_tree:
이모지를 세팅하고 상태를 적을 수 있는 텍스트 박스에 휴가
를 적어야 한다. slack이랑 gitlab을 한 번에 변경하는 건 힘들지만 gitlab이라도 하자면서 작업을 했다.
curl을 호출하는 bash 스크립트를 만들까? 노노 emacs lisp로 짜면 되는데, 왜 그러나요.
(use-package request)
emacs lisp HTTP 라이브러리인 emacs-request를 설치했다.
(defun my-gitlab-status-vacation ()
(interactive)
(my-gitlab--set-status "palm_tree" "휴가")
)
(defun my-gitlab-status-clear ()
(interactive)
(my-gitlab--set-status "" "")
)
(defun my-gitlab--set-status (emoji message)
(when (not (boundp 'gitlab-api-url)) (throw 'gitlab-api-url "not bound")) #<--- 1
(when (not (boundp 'gitlab-private-key)) (throw 'gitlab-private-key "not bound")) <#--- 2
(request
(format "%s/user/status?private_token=%s" gitlab-api-url gitlab-private-key)
:type "PUT"
:data (json-encode `(("emoji" . ,emoji) ("message" . ,message)))
:headers '(("Content-Type" . "application/json"))
:sync t
:parser 'json-read
:encoding 'utf-8
:complete (cl-function
(lambda (&key response &allow-other-keys)
(message "Done: %s" (request-response-status-code response)))))
)
emacs 기본 라이브러리를 사용하면 속 터지는데 emacs-request 라이브러리는 엄청 편하다. 휴가 상태를 설정하는 my-gitlab-status-vacation
함수와 업무로 복귀한 후 상태를 지우는 my-gitlab-status-clear
함수를 대화형(interactive) 함수로 등록했다. gitlab-api-url
변수와 gitlab-private-key
변수는 버전 컨트롤하지 않고 로컬에만 저장한다. 그래서 1번 코드와 2번 코드로 설정을 안 했을 때, 빠르게 실패하게 한다.
M-x my-gitlab-status-vacation
다음날이 휴가면 이 함수를 호출하고
M-x my-gitlab-status-clear
출근하면 이 함수를 호출한다.
emacs lisp 함수를 호출해 slack과 gitlab을 한 방에 변경하는 게 목표였는데, gitlab만 성공했다. 휴가 설정을 gitlab에서 하는 게 조금이라도 더 편해져서 만족한다.
C-x C-s C-x C-c