piknik

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README | LICENSE

commit 4d32b92ee847a49d08899567b1d2a5b595e60e46
parent 44822d102b1ef6907e63bc43bbd73a1dd3bc02f3
Author: lash <dev@holbrook.no>
Date:   Sun, 30 Apr 2023 14:18:28 +0100

Add man page

Diffstat:
MCHANGELOG | 2++
Aman/man1/piknik.1 | 355+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msetup.cfg | 4++--
Msetup.py | 1+
4 files changed, 360 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,3 +1,5 @@ +- 0.3.15: + * Add man page - 0.3.14: * Make remaining basket methods work with aliases - 0.3.13: diff --git a/man/man1/piknik.1 b/man/man1/piknik.1 @@ -0,0 +1,355 @@ +.TH piknik 1 + + +.SH NAME +piknik \- Issue tracking using CLI + + +.SH SYNOPSIS + +.SY piknik +add [ -d store_dir ] [ --alias issue_alias ] caption +.YS + +.SY piknik +show [ -i issue_id ] [ -d store_dir ] [ -r renderer ] [ --state state ] +.YS + +.SY piknik +show [ -d store_dir ] -r html [ -o output_dir ] +.YS + +.SY piknik +mod < -i issue_id > [ -d store_dir ] [ --state state ] [ -t tag ] [ -u tag ] [ --dep issue_id ] [ --undep issue_id ] [ --assign id ] [ --unassign id ] +.YS + +.SY piknik +mod < -i issue_id > [ -d store_dir ] [ --block ] +.YS + +.SY piknik +mod < -i issue_id > [ -d store_dir ] [ --unblock ] +.YS + +.SY piknik +comment < -i issue_id > [ -d store_dir ] [ [ -x "text content" ... ] [ -y file ... ] ... ] +.YS + + +.SH DESCRIPTION +.P +This tool enables issue tracking by command line interface. + +After an issue has been created it can move through different pre-defined, kanban-like states. They can also be tagged, assigned and commented on. + + +.SH COMMANDS + +The following commands are available: + +.IP +\fBshow\fP \- Output all issues for all or selected issue states. +.IP +\fBadd\fP \- Propose a new issue. +.IP +\fBmod\fP \- Tag, assign, set dependencies and modify state of an existing issue. +.IP +\fBcomment\fP \- Add comment to an existing issue. + + +.SS Common options + +.TP +\fB-d\fP +Issue state store directory. + +.TP +.TQ +.B -h +.TQ +.B --help +Command help summary. + +.TP +.TQ +.BI -i issue_id +.TQ +.BI --issue-id issue_id +Issue to operate on. Argument can be issue alias or full issue uuid. Only available with \fBmod\fP and \fBcomment\fP. + +.TP +.TQ +.BI -s state +.TQ +.BI --state state +Limit output to issue having the given \fIstate\fP. (Only valid with \fBshow\fP or \fBmod\fP). + +.TP +-v +Write debugging log to standard error. + +.SS Options for add + +.TP +\fB--alias\fP +Specify alias used to refer to issue when using \fB-i\fP. If not specified, an alias will be auto-generated. See \fBALIAS\fP. Only available with \fBadd\fP. + + +.SS Options for show + +.TP +.TQ +.B -f +.TQ +.B --files +Save attachments to filesystem. Can be used in the context of viewing details of a single issue, or in conjunction with \fB-r html -o\fP. Only available with \fBshow\fP. + +.TP +.TQ +.BI -o dir +.TQ +.BI --files-dir dir +Output issue details to individual files in \fIdir\fP. Only available with \fBshow -r html ...\fP. + +.TP +.TQ +.BI -r format +.TQ +.BI --renderer format +Output format. Valid values are \fIplain\fP and \fIhtml\fP. + +.TP +.B -reverse +Sort comments with oldest first. Only available with \fBshow\fP. + +.TP +.B --show-finished +Include issues with state \fBFINISHED\fP in output. Only available with \fBshow\fP. + + +.SS Options for mod + +.TP +.BI --assign key_id +Assign the issue to entity defined by \fIkey_id\fP. If it is the first assignment for an issue, the assigned will become the issue \fIowner\fP (see \fB--owner\fP and \fBACTIONS/Assignment\fP below. Only available with \fBmod\fP. + +.TP +.BI --block +Set the \fBBLOCKED\fP state on the issue. Preserves the previous state; a following \fB--unblock\fP instruction will return the issue to the pre-blocked state. Only available with \fBmod\fP. + +.TP +.BI --dep issue_id +Make the current issue (identified by \fB-i\fP dependent on \fIissue_id\fP. Only available with \fBmod\fP. + +.TP +.BI --owner key_id +Set the entity represented by \fIkey_id\fP as issue owner. + + +.TP +.TQ +.BI -t tag +.TQ +.BI --tag tag +Add the given tag to the issue. Only available with \fBmod\fP. + +.TP +.BI --unassign key_id +Remove the assignment of the issue to entity defined by \fIkey_id\fP. Only available with \fBmod\fP. + +.TP +.BI --unblock +Remove block on issue. Will return the issue to its previous state (before the block). Only available with \fBmod\fP. + + +.TP +.BI --undep issue_id +Remove dependency on \fIissue_id\fP. Only available with \fBmod\fP. + +.TP +.TQ +.BI -u tag +.TQ +.BI --untag tag +Remove the given tag from the issue. Only available with \fBmod\fP. + + +.SS Options for comment + +.TP +.TQ +.BI -s pgp_key_fingerprint +.TQ +.BI --sign-as pgp_key_fingerprint +Use the private key matching the fingerprint to sign (instead of the default key). Only available with \fBcomment\fP. + +.TP +.TQ +.BI -x "text" +.TQ +.BI --text "text" +Add a text content part to the comment. Must be enclosed by double quotes. Only available with \fBcomment\fP. + +.TP +.TQ +.BI -y file +.TQ +.BI --file file +Add file as content part to the comment. Can be any type of file. Only available with \fBcomment\fP. See the \fBCOMMENT\fP section for more information. + + + +.SH STATES + +The tracking of the issue lifetime is organized using a pre-defined set of kanban-like states. + +.TP +.B PROPOSED +The initial state of an issue after being created by \fBpiknik add\fP. Is intended for review by issue board moderator. + +.TP +.B BACKLOG +The initial state of an issue after being "accepted" by a moderator. + +.TP +.B PENDING +An issue has been queued for imminent processing. + +.TP +.B DOING +An issue is currently being worked on. + +.TP +.B REVIEW +Work that was done on an issue is currently in review. + +.TP +.B BLOCKED +Progress on a \fBPENDING\fP issue is currently not possible. + +.TP +.B FINISHED +Processing of an issue has been completed. + + +.SH ACTIONS +.P + +.SS Assignment +.P +Indicates an individual or entity that is responsible for processing the issue. +.P +Currently assigments are defined as hexadecimal values. By convention, the value should correspond to e.g. a public key or a key fingerprint (e.g. PGP). \fBpiknik\fP will check that the value is hexadecimal, but will not do additional verification. +.P +The first assigned entity to an issue automatically becomes the issue owner. The issue ownership may be changed using \fB--owner\fP, but ownership cannot be removed entirely after the initial assignment. + +.SS Tagging +.P +Any issue may be assigned any number of tags. Tags may be added and removed individually. + + +.SS Dependencies +.P +Any issue may be set as dependent on another issue. Dependencies may be set or unset. Dependencies must be manually managed, and will not be magically removed as a side-effect of state transitions. + + +.SH COMMENTING +.P +Comments are stored as email-like Multipart MIME message logs. They may include any number of plaintext and file attachment parts intermingled. + +All comments must be \fBsigned\fP using a PGP key. Unless the \fB-s\fP flag is used, the default signing key will be used. It is currently not possible to comment without a PGP key. + + +.SH RENDERING +.P +There are currently two rendering options for displaying issue indices and individual issue details, \fIplain\fP (plain text) and \fIhtml\fP. +Ideosyncracies for each are described below. + +.SS PLAIN +.P +When listing the issue index, output will be in the form: + +.EX +[STATE] +<caption> <tags> <uuid> [(alias)] +.EE + +Per-issue render should be self-explanatory. + +.SS HTML +.P +If rendered with \fB-o\fP \fIoutdir\fP it creates a browseable version of individual issues from the issue index in the specified directory. +.P +Some image types will by default be displayed inline. There is currently no way to toggle this behavior. + + +.SH EXAMPLE +.P +This example illustrates a possible lifetime of an issue. + +.EX +# propose new issue +piknik add Title describing the issue --alias myissue + +# accept proposed issue (move to backlog state) +piknik mod -i myissue --accept + +# move the issue to state "DOING" +piknik mod -i myissue --state doing + +# tag the issue as a "BUG" +piknik mod -i myissue --tag bug + +# Add a signed text comment to the issue +piknik comment -i myissue -x "This is a text comment" + +# Add a comment with intermixed text and attachment contents to the issue +piknik comment -i myissue -x "This is a text comment with two attachments " -y attachment.png -y another.pdf -x "This text follows the attachments" + +# Write index of all issues as plain text to standard output +piknik show + +# Write issue details as plain text to standard output +piknik show -i myissue + +# Write index of all issues as html to standard output +piknik show --render html + +# Write index and individual issue as browseable html to directory "outdir" +piknik show --render html -o outdir + +# Mark issue as finished +piknik mod -i myissue --finish +.EE + + +.SH KNOWN ISSUES +Currently issues are tracked using - in fact - \fBpiknik\fP. An HTML (read-only) render can be found at +.UR https://holbrook.no/issues/piknik +.UE https://holbrook.no/issues/piknik +.IP + + +.SH LICENSE + +This documentation and its source is licensed under the Creative Commons Attribution-Sharealike 4.0 International license. + +The source code of the tool this documentation describes is licensed under the GNU General Public License 3.0. + + +.SH COPYRIGHT AND CONTACT + +.MT dev@holbrook.no +Louis Holbrook +.ME + +.UR https://holbrook.no +.UE https://holbrook.no + +.P +PGP: 59A844A484AC11253D3A3E9DCDCBD24DD1D0E001 + + +.SH SOURCE CODE + +https://git.defalsify.org/piknik diff --git a/setup.cfg b/setup.cfg @@ -1,10 +1,10 @@ [metadata] name = piknik -version = 0.3.14 +version = 0.3.15 description = CLI issue tracker author = Louis Holbrook author_email = dev@holbrook.no -url = https://git.defalsify.org/piknik +url = https://git.defalsify.org/eth-cache keywords = bugs issues diff --git a/setup.py b/setup.py @@ -31,4 +31,5 @@ f.close() setup( install_requires=requirements, tests_require=test_requirements, + data_files=[("man/man1", ["man/man1/piknik.1"],)], )