Submit timesheets to Jira from the command line

JiraTime

Tag and Release Coverage Status Go Report Card

jiratime makes it easy to submit worklog records to Jira quickly from the command line. It accepts timesheets on standard input so works well with any editor that lets you pipe chunks of text to external commands, such as (neo)vim.

jiratime only works with Atlassian Cloud hosted Jira, and does not support the deprecated self-hosted Jira server.


Get it

Download the latest release on github, or:

go install github.com/smlx/jiratime/cmd/jiratime@latest

How it works

Configuration

jiratime reads configuration from $XDG_CONFIG_HOME/jiratime/config.yml. This example config.yml has a list of regular expressions for implicitly identifying issues, and another list for matching timesheet entries to be ignored.

jiraURL: https://example.atlassian.net/
issues:
- id: XYZ-1
  defaultComment: email / slack
  regexes:
  - ^admin( .+)?$
- id: ABC-2
  defaultComment: Primary On-call
  regexes:
  - ^pd$
ignore:
- ^lunch$

Timesheet format

The timesheet format is minimal and opinionated.

Sample timesheet

0900-0945
admin - TPS report cover sheet
0945-1100
XYZ-123 - fighting fires
1100-1200
admin
1200-1300
lunch
1300-1400
ABC-987
- more meetings after...
lunch
1400-1430
ABC-988
will the meetings
ever stop?

Features

  • Each entry begins with a duration written as a 24-hour time range.
  • The comment body of a timesheet entry is anything on the first line following an issue match, and any lines below before the next duration or end of the timesheet.
  • Comment lines are trimmed of spaces and hyphens before being added to the comment body.
  • Jira issues may be identified explicitly by putting the name of the issue at the start of the first line of the comment body.
  • Jira issues may be identified implicitly by matching the first line against a configured list of regular expressions.
  • Regular expressions for implicitly identifying issues may have a capture group. In that case the capture group becomes part of the comment body.
  • Timesheet entries may be ignored by matching the first line against a configured list of regular expressions.
  • Implicitly matched issues can have a default comment configured which will be automatically added to the Jira worklog record if no comment is defined in the timesheet.

Timesheet entry processing examples

Each row in this table shows:

  1. a single timesheet entry
  2. configuration involved in processing the entry
  3. the worklog record generated by the entry
| Timesheet Entry                | Configuration                 | Jira Worklog Record              |
| ---                            | ---                           | ---                              |
| 0900-0945                      | issues:                       | Issue:    XYZ-1                  |
| admin - TPS report cover sheet | - id: XYZ-1                   | Start:    0900 (local TZ)        |
|                                | defaultComment: email / slack | Duration: 45 minutes             |
|                                | regexes:                      | Comment:  TPS report cover sheet |
|                                | - ^admin( .+)?$               |                                  |
| ---                            | ---                           | ---                              |
| 0945-1100                      | n/a (explicit issue)          | Issue:    XYZ-123                |
| XYZ-123 - fighting fires       |                               | Start:    0945 (local TZ)        |
|                                |                               | Duration: 1 hour, 15 minutes     |
|                                |                               | Comment:  fighting fires         |
| ---                            | ---                           | ---                              |
| 1100-1200                      | issues:                       | Issue:    XYZ-1                  |
| admin                          | - id: XYZ-1                   | Start:    1100 (local TZ)        |
|                                | defaultComment: email / slack | Duration: 1 hour                 |
|                                | regexes:                      | Comment:  email / slack          |
|                                | - ^admin( .+)?$               |                                  |
| ---                            | ---                           | ---                              |
| 1200-1300                      | ignore:                       | n/a (this entry is skipped)      |
| lunch                          | - ^lunch$                     |                                  |
| ---                            | ---                           | ---                              |
| 1300-1400                      | n/a (explicit issue)          | Issue:    ABC-987                |
| ABC-987                        |                               | Start:    1300 (local TZ)        |
| - more meetings after...       |                               | Duration: 1 hour                 |
| lunch                          |                               | Comment:  more meetings after... |
|                                |                               |           lunch                  |
| ---                            | ---                           | ---                              |
| 1400-1430                      | n/a (explicit issue)          | Issue:    ABC-988                |
| ABC-988                        |                               | Start:    1400 (local TZ)        |
| will the meetings              |                               | Duration: 30 minutes             |
| ever stop?                     |                               | Comment:  will the meetings      |
|                                |                               |           ever stop?             |

Design Philosophy

jiratime tries hard to submit timesheets atomically. That is, either all worklog records are submitted, or none are. It does this by checking that all issues identified are valid Jira issues before submitting any worklogs. Unfortunately there is no transactional batch API for Jira worklogs.

jiratime exits with a return code of zero and no output on success. On failure it will exit with a non-zero return code and a message on standard error.

Usage

Authorization Setup

jiratime authenticates to Jira as an OAuth2 client. This requires a one-time initial setup.

Configure jiratime app in Jira cloud

  1. Visit Atlassian's developer console, and log in.
  2. Create a new "OAuth 2.0 integration".
  3. Name the app jiratime, and agree to Atlassian's T&Cs.
Scopes
  1. Select "Permissions", then "Add", and "Configure" the "Jira platform REST API".
  2. The "View user profiles" scope will already be added. Add the "View Jira issue data" and "Create and manage issues" scopes too.
Authorization callback URL
  1. Select "Authorization", then "Configure" the "OAuth 2.0 (3LO)" authorization type.
  2. Set the callback URL to http://localhost:8080/oauth/redirect
Gather app Credentials
  1. Select "Settings".
  2. In "Authentication details", copy the "Client ID" and "Secret" values.

Complete OAuth2 authorization flow

Create $XDG_CONFIG_HOME/jiratime/auth.yml and add your app credentials:

oauth2:
  clientID: chiYahchob7xoThahvohH5quae6Di0Ee
  secret: HxHOiN3bD5l93X3qugp9bHI8EKEJ7xVV4vcj6tG3vr7GFqxtxruMrkLcgtZAOPrZ

Run jiratime authorize and open the generated URL in your browser. Once you click "Accept", you should see this message in your browser:

Authorization successful. You may now close this page.

$XDG_CONFIG_HOME/jiratime/auth.yml now contains a token that jiratime will use and automatically refresh as required.

Timesheet submission

Once configured and authorized, calling jiratime parses and submits timesheets read from standard input. It assumes all times are from the current local day.

Command line:

$ jiratime < timesheet

vim visual selection:

animation demonstrating visual selection

:'<,'>!jiratime

vim line selection:

animation demonstrating line selection

:130,135!jiratime

FAQ

Why does Tempo not show all the entries submitted by jiratime?

It seems to sometimes take a while for worklog entries submitted via API to show up in Tempo. Try refreshing after a few minutes.

Why do the entries have a weird time offset?

jiratime submits all times in your local timezone. Jira has a single timezone that it uses to display worklogs regardless of localisation settings. I can't see this timezone displayed anywhere in the UI, but you can see it via the API. Use the check-worklog.sh script to dump issue worklogs, including timezone.

How do I submit timesheets for yesterday?

jiratime submit --day-offset="-1" < timesheet

Options

Run jiratime --help to discover the command line options and contextual help.

Owner
Comments
  • One-liner worklog submissions?

    One-liner worklog submissions?

    Any chance you're planning to support imperative commands to submit a worklog entry such as this?: jiratime submit PROJECT-ISSUE TIME or jiratime submit PROJECT-ISSUE TIME -c "worklog entry"

  • chore(deps): bump github.com/alecthomas/kong from 0.5.0 to 0.6.0

    chore(deps): bump github.com/alecthomas/kong from 0.5.0 to 0.6.0

    Bumps github.com/alecthomas/kong from 0.5.0 to 0.6.0.

    Commits
    • edc47eb helpful error message when flag is missing values (#310)
    • 9d72e94 Update yaml v3 to v3.0.1 to fix CVE 2022 28948 (#309)
    • 195d56c Remove references to flag HelpProviders
    • 6042c4b Add example of HelpProvider + README
    • 1db2ea2 Move old shell/main to subdirectory
    • 0aaa4c1 fix: existing file/dir always checks default
    • 3c21644 fix linux build
    • 29685e7 treat \ as escape only before a separator
    • 5538b7f change help hook and call Reset later
    • 7c6ff10 fix: values that look like flags would not be parsed correctly
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps): bump golangci/golangci-lint-action from 2 to 3

    chore(deps): bump golangci/golangci-lint-action from 2 to 3

    Bumps golangci/golangci-lint-action from 2 to 3.

    Release notes

    Sourced from golangci/golangci-lint-action's releases.

    v3.0.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/golangci/golangci-lint-action/compare/v2...v3.0.0

    Bump version v2.5.2

    Bug fixes

    • 5c56cd6 Extract and don't mangle User Args. (#200)

    Dependencies

    • e3c53fe bump @​typescript-eslint/eslint-plugin (#194)
    • 3b9f80e bump @​typescript-eslint/parser from 4.18.0 to 4.19.0 (#195)
    • 9845713 bump @​types/node from 14.14.35 to 14.14.37 (#197)
    • e789ee1 bump eslint from 7.22.0 to 7.23.0 (#196)
    • f2e9a96 bump @​typescript-eslint/eslint-plugin (#188)
    • 818081a bump @​types/node from 14.14.34 to 14.14.35 (#189)
    • 6671836 bump @​typescript-eslint/parser from 4.17.0 to 4.18.0 (#190)
    • 526907e bump @​typescript-eslint/parser from 4.16.1 to 4.17.0 (#185)
    • 6b6ba16 bump @​typescript-eslint/eslint-plugin (#186)
    • 9cab4ef bump eslint from 7.21.0 to 7.22.0 (#187)
    • 0c76572 bump @​types/node from 14.14.32 to 14.14.34 (#184)
    • 0dfde21 bump @​typescript-eslint/parser from 4.15.2 to 4.16.1 (#182)
    • 9dcf389 bump typescript from 4.2.2 to 4.2.3 (#181)
    • 34d3904 bump @​types/node from 14.14.31 to 14.14.32 (#180)
    • e30b22f bump @​typescript-eslint/eslint-plugin (#179)
    • 8f30d25 bump eslint from 7.20.0 to 7.21.0 (#177)
    • 0b64a40 bump @​typescript-eslint/parser from 4.15.1 to 4.15.2 (#176)
    • 973b3a3 bump eslint-config-prettier from 8.0.0 to 8.1.0 (#178)
    • 6ea3de1 bump @​typescript-eslint/eslint-plugin (#175)
    • 6eec6af bump typescript from 4.1.5 to 4.2.2 (#174)

    v2.5.1

    Bug fixes:

    • d9f0e73 Check that go.mod exists in reading the version (#173)

    v2.5.0

    New Features:

    • 51485a4 Try to get version from go.mod file (#118)

    ... (truncated)

    Commits
    • c675eb7 Update all direct dependencies (#404)
    • 423fbaf Remove Setup-Go (#403)
    • bcfc6f9 build(deps-dev): bump eslint-plugin-import from 2.25.3 to 2.25.4 (#402)
    • d34ac2a build(deps): bump setup-go from v2.1.4 to v2.2.0 (#401)
    • e4b538e build(deps-dev): bump @​types/node from 16.11.10 to 17.0.19 (#400)
    • a288c0d build(deps): bump @​actions/cache from 1.0.8 to 1.0.9 (#399)
    • b7a34f8 build(deps): bump @​types/tmp from 0.2.2 to 0.2.3 (#398)
    • 129bcf9 build(deps-dev): bump @​types/uuid from 8.3.3 to 8.3.4 (#397)
    • 153576c build(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 (#396)
    • a9a9dff build(deps): bump ansi-regex from 5.0.0 to 5.0.1 (#395)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps): bump github.com/andygrunwald/go-jira from 1.14.0 to 1.15.0

    chore(deps): bump github.com/andygrunwald/go-jira from 1.14.0 to 1.15.0

    Bumps github.com/andygrunwald/go-jira from 1.14.0 to 1.15.0.

    Release notes

    Sourced from github.com/andygrunwald/go-jira's releases.

    v1.15.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/andygrunwald/go-jira/compare/v1.14.0...v1.15.0

    Commits
    • 8413325 Merge pull request #397 from Chhekur/chhekur-add-bearer-auth
    • 63d5e6d feat(auth): Bearer Auth Support (oauth 2.0)
    • 4ed46d0 Merge pull request #419 from james-cast/issue-418-accept-strings-as-serviceDe...
    • a657bc9 Merge pull request #438 from andygrunwald/dependabot/go_modules/github.com/go...
    • fe04db3 chore(deps): bump github.com/golang-jwt/jwt/v4 from 4.2.0 to 4.3.0
    • 3555edb adds missing struct omitempty tags to the Parent struct (#435)
    • 74ae2b9 Merge pull request #432 from andygrunwald/dependabot/go_modules/github.com/go...
    • 4b63320 Merge pull request #411 from madest92/update-remotelink
    • 17581f3 chore(deps): bump github.com/google/go-cmp from 0.5.6 to 0.5.7
    • f558a51 add missing min/max to BoardConfigurationColumn (#430)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps): bump github.com/alecthomas/kong from 0.2.20 to 0.2.22

    chore(deps): bump github.com/alecthomas/kong from 0.2.20 to 0.2.22

    Bumps github.com/alecthomas/kong from 0.2.20 to 0.2.22.

    Commits
    • 7533b11 Differentiate between omitted and empty default.
    • 9c9b8ab More enum fixes.
    • fa08e70 fix: overly enthusiastic validation of tags
    • ece1f6d Allow more flexible callback return error type.
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps): bump goreleaser/goreleaser-action from 3 to 4

    chore(deps): bump goreleaser/goreleaser-action from 3 to 4

    Bumps goreleaser/goreleaser-action from 3 to 4.

    Release notes

    Sourced from goreleaser/goreleaser-action's releases.

    v4.0.0

    What's Changed

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3...v4.0.0

    v3.2.0

    What's Changed

    • chore: remove workaround for setOutput by @​crazy-max (#374)
    • chore(deps): bump @​actions/core from 1.9.1 to 1.10.0 (#372)
    • chore(deps): bump yargs from 17.5.1 to 17.6.0 (#373)

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3.1.0...v3.2.0

    v3.1.0

    What's Changed

    • fix: dist resolution from config file by @​crazy-max (#369)
    • ci: fix workflow by @​crazy-max (#357)
    • docs: bump actions to latest major by @​crazy-max (#356)
    • chore(deps): bump crazy-max/ghaction-import-gpg from 4 to 5 (#360)
    • chore(deps): bump ghaction-import-gpg to v5 (#359)
    • chore(deps): bump @​actions/core from 1.6.0 to 1.8.2 (#358)
    • chore(deps): bump @​actions/core from 1.8.2 to 1.9.1 (#367)

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3.0.0...v3.1.0

    Commits
    • 8f67e59 chore: regenerate
    • 78df308 chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#383)
    • 66134d9 Merge remote-tracking branch 'origin/master' into flarco/master
    • 3c08cfd chore(deps): bump yargs from 17.6.0 to 17.6.2
    • 5dc579b docs: add example when using workdir along with upload-artifact (#366)
    • 3b7d1ba feat!: remove auto-snapshot on dirty tag (#382)
    • 23e0ed5 fix: do not override GORELEASER_CURRENT_TAG (#370)
    • 1315dab update build
    • b60ea88 improve install
    • 4d25ab4 Update goreleaser.ts
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps): bump github.com/alecthomas/kong from 0.7.0 to 0.7.1

    chore(deps): bump github.com/alecthomas/kong from 0.7.0 to 0.7.1

    Bumps github.com/alecthomas/kong from 0.7.0 to 0.7.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Improve the version command

    Improve the version command

    This makes the information returned from the version command structured (JSON encoded), and also adds info to the version output.

    It also overhauls the whole GoReleaser build workflow by aligning more closely with https://github.com/smlx/go-cli-github

  • fix: do not purge client ID from auth.yml

    fix: do not purge client ID from auth.yml

    Client ID is a required field. So keep that and just purge the secret.

    This fixes an issue where the Atlassian Jira API returned an error like:

    {"error":"invalid_request","error_description":"client_id may not be blank"}
    
  • chore(deps): bump github.com/alecthomas/kong from 0.6.1 to 0.7.0

    chore(deps): bump github.com/alecthomas/kong from 0.6.1 to 0.7.0

    Bumps github.com/alecthomas/kong from 0.6.1 to 0.7.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Destroy client secret after obtaining token

    Destroy client secret after obtaining token

    jiratime should remove the client ID and secret from auth.yaml after successfully obtaining a token, as those credentials are only required for jiratime authorize.

A tiny cli command/daemon for syncing toggl time entries with Jira

toggl-sync A tiny cli command/daemon for syncing toggl time entries with Jira Installation Install the app via brew package manager. brew tap timemate

Nov 30, 2021
Interactive CLI helper for creating git branches with JIRA Links and some text

bb (better-branch) Interactive CLI helper for creating git branches with JIRA Links and some text Still in development? Yes How it works? This tiny ut

Aug 18, 2022
jt is a CLI tool for viewing and manipulating JIRA issues.

jt - jira-tool jt is a CLI tool for viewing and manipulating JIRA issues. One common example usage to transition an issue to a new status: jt "In Prog

Aug 9, 2022
Helper tool to create and assign fix versions in Jira

Jira Helper Helper tool to interact with Jira from CI/CD scripts. Its main purpose is to create and assign version based on GitHub releases to Jira ti

Oct 22, 2022
An open-source GitLab command line tool bringing GitLab's cool features to your command line
An open-source GitLab command line tool bringing GitLab's cool features to your command line

GLab is an open source GitLab CLI tool bringing GitLab to your terminal next to where you are already working with git and your code without switching

Dec 30, 2022
A command line tool that builds and (re)starts your web application everytime you save a Go or template fileA command line tool that builds and (re)starts your web application everytime you save a Go or template file

# Fresh Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file. If the web framework yo

Nov 22, 2021
A command line tool to prompt for a value to be included in another command line.

readval is a command line tool which is designed for one specific purpose—to prompt for a value to be included in another command line. readval prints

Dec 22, 2021
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.

asciigraph Go package to make lightweight ASCII line graphs ╭┈╯. Installation go get github.com/guptarohit/asciigraph Usage Basic graph package main

Jan 8, 2023
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.

Table of contents Introduction Reference Contributing Introduction Overview git-xargs is a command-line tool (CLI) for making updates across multiple

Dec 31, 2022
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command

git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command. You give git-xargs:

Feb 5, 2022
Package command provide simple API to create modern command-line interface

Package command Package command provide simple API to create modern command-line interface, mainly for lightweight usage, inspired by cobra Usage pack

Jan 16, 2022
A command line tool for simplified docker volume command built with go

dockervol A command line tool for simplified docker volume command built with go. Features: Remove anonymous volume (beta) Remove volume by matching n

Dec 18, 2021
Watcher - A simple command line app to watch files in a directory for changes and run a command when files change!

Watcher - Develop your programs easily Watcher watches all the files present in the directory it is run from of the directory that is specified while

Mar 27, 2022
LINE account link: Sample code for LINE account link
LINE account link: Sample code for LINE account link

LINE account link: Sample code for LINE account link This is sample code to demostration LINE chatbot account link, refer to document https://develope

Dec 11, 2021
argv - Go library to split command line string as arguments array using the bash syntax.

Argv Argv is a library for Go to split command line string into arguments array. Documentation Documentation can be found at Godoc Example func TestAr

Nov 19, 2022
CLI - A package for building command line app with go
CLI - A package for building command line app with go

Command line interface Screenshot Key features Lightweight and easy to use. Defines flag by tag, e.g. flag name(short or/and long), description, defau

Dec 23, 2022
Simple and complete API for building command line applications in Go

Simple and complete API for building command line applications in Go Module cli provides a simple, fast and complete API for building command line app

Nov 23, 2022
Golang library with POSIX-compliant command-line UI (CLI) and Hierarchical-configuration. Better substitute for stdlib flag.
Golang library with POSIX-compliant command-line UI (CLI) and Hierarchical-configuration. Better substitute for stdlib flag.

cmdr cmdr is a POSIX-compliant, command-line UI (CLI) library in Golang. It is a getopt-like parser of command-line options, be compatible with the ge

Oct 28, 2022
Automatically sets up command line flags based on struct fields and tags.
Automatically sets up command line flags based on struct fields and tags.

Commandeer Commandeer sets up command line flags based on struct fields and tags. Do you... like to develop Go apps as libraries with tiny main packag

Dec 1, 2022