#!/usr/bin/sbcl --script
(require :sb-posix)
(load #p"~/quicklisp/setup.lisp")
(eval-when (:load-toplevel :compile-toplevel :execute)
(push (truename ".") asdf:*central-registry*)
(ql:quickload :ubiquitous)
(sb-posix:setenv "CC" "gcc" 1)
(ql:quickload :net.didierverna.clon)
(ql:quickload :jira-api))
(defpackage #:jira-api.client
(:use #:cl #:serapeum #:alexandria #:fw.lu #:jira-api.cli #:jira-api #:net.didierverna.clon))
(in-package #:jira-api.client)
(defparameter *version* (format nil "0.1-init"))
(defparameter *endpoint-template* "https://~a.atlassian.net/rest/api/2/")
(eval-when (:compile-toplevel :load-toplevel :execute)
(ubiquitous:restore :jira-api))
(defsynopsis (:postfix "ARGUMENTS...")
(text :contents "A command line client for Jira issues")
(group (:header "Main actions")
(flag :short-name "lp" :long-name "list-projects"
:description "List available JIRA projects")
(flag :short-name "is"
:long-name "get-issues"
:description "list issues")
(flag :short-name "i"
:long-name "get-issue"
:description "show an issue")
(flag :short-name "pi" :long-name "post-issue"
:description "post and issue"))
(group (:header "JIRA options")
(stropt :long-name "jira-account"
:description "The jira account to use."
:argument-name "URL-SUBDOMAIN"
:default-value (ubiquitous:value :jira :account)))
(group (:header "Filtering Issues")
(stropt :short-name "s" :long-name "status"
:description "Only show issues with a certain status"))
(group (:header "Other options")
(flag :short-name "h" :long-name "help"
:description "Show this help")
(flag :short-name "v" :long-name "version"
:description "Show the program version")))
(defvar *auth*)
(defun main ()
(ubiquitous:restore :jira-api)
(setf *auth* (ubiquitous:value :jira :creds))
(make-context)
(let ((jira-api::*endpoint* (format nil *endpoint-template* (getopt :long-name "jira-account"))))
(cond
((getopt :long-name "help") (help))
((getopt :long-name "version") (format t "~&~a~%" *version*))
((getopt :long-name "get-issue") (let ((options (remainder)))
|