;;; jira.el --- Jira interface -*- lexical-binding: t -*- ;; This file is not part of GNU Emacs ;; This program 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. ;; This program 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 this program. If not, see . ;;; Commentary: ;; commentary ;;; Code: (use-package org-jira) (setq org-jira-working-dir "~/.org/tasks/projects") (defcustom jira-active-projects '() "Active Jira projects for custom JQLs." :type '(repeat string) :group 'jira :group 'theurgy) (defun jira-project-list->string () "Format `jira-active-projects' for use with JQL." (concat "(" (string-join (mapcar (lambda (s) (concat "\"" s "\"")) jira-active-projects) ", ") ")")) (setq org-jira-custom-jqls `((:jql ,(concat "project in " (jira-project-list->string) " and sprint in openSprints()") :limit 100 :filename "kanban"))) (defun jira () "Sign in to Jira and fetch issues." (interactive) ;; On MacOS I store the API key with security, and retrieve it like this. ;; Auth-source is buggy on MacOS. (when (equal system-type 'darwin) (kill-new (string-trim-right (shell-command-to-string (concat "security find-generic-password -a \"" jiralib-user "\" -s \"jira\" -w"))))) (call-interactively #'org-jira-get-issues) (call-interactively #'org-jira-get-issues-from-custom-jql)) (defcustom jira-key-directory-alist '() "Directories associated with a particular project --- git repositories. For example, (\"CBM\" . \"~/build/etc\") will use ~/build/etc for ticket-specific commands in the CBM project." :type 'alist :group 'jira :group 'theurgy) (defun jira-branch-ticket () "Create a branch from the current ticket, in the repository specified by `jira-key-directory-alist'." (interactive) (let* ((issue-key (progn (org-jira-copy-current-issue-key) (substring-no-properties (car kill-ring)))) (project-code (car (split-string issue-key "-"))) (project-dir (cdr (assoc project-code jira-key-directory-alist)))) (magit-status project-dir) (kill-new issue-key) (call-interactively #'magit-branch-create))) (provide 'jira) ;;; jira.el ends here