{"id":14530631,"url":"https://github.com/dhth/punchout","last_synced_at":"2025-08-18T09:30:52.238Z","repository":{"id":227176554,"uuid":"770680100","full_name":"dhth/punchout","owner":"dhth","description":"punchout takes the suck out of logging time on JIRA","archived":false,"fork":false,"pushed_at":"2024-11-21T19:02:02.000Z","size":313,"stargazers_count":14,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-21T20:18:18.493Z","etag":null,"topics":["bubbletea","jira","tui"],"latest_commit_sha":null,"homepage":"https://tools.dhruvs.space/punchout","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dhth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-12T00:58:43.000Z","updated_at":"2024-11-21T19:02:07.000Z","dependencies_parsed_at":"2024-04-09T00:28:12.366Z","dependency_job_id":"0c3e32ce-4840-453e-9774-de9ab0ceabe2","html_url":"https://github.com/dhth/punchout","commit_stats":null,"previous_names":["dhth/punchout"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fpunchout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fpunchout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fpunchout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fpunchout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhth","download_url":"https://codeload.github.com/dhth/punchout/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230220151,"owners_count":18192224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","jira","tui"],"created_at":"2024-09-05T00:01:08.703Z","updated_at":"2025-08-18T09:30:52.231Z","avatar_url":"https://github.com/dhth.png","language":"Go","funding_links":[],"categories":["Applications"],"sub_categories":["Productivity and Organization"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003epunchout\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/dhth/punchout/actions/workflows/main.yml\"\u003e\u003cimg alt=\"Build Status\" src=\"https://img.shields.io/github/actions/workflow/status/dhth/punchout/main.yml?style=flat-square\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/dhth/punchout/actions/workflows/vulncheck.yml\"\u003e\u003cimg alt=\"Vulnerability Check\" src=\"https://img.shields.io/github/actions/workflow/status/dhth/punchout/vulncheck.yml?style=flat-square\u0026label=vulncheck\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/dhth/punchout/releases/latest\"\u003e\u003cimg alt=\"Latest release\" src=\"https://img.shields.io/github/release/dhth/punchout.svg?style=flat-square\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/dhth/punchout/releases/latest\"\u003e\u003cimg alt=\"Commits since latest release\" src=\"https://img.shields.io/github/commits-since/dhth/punchout/latest?style=flat-square\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n`punchout` takes the suck out of logging time on JIRA.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://tools.dhruvs.space/images/punchout/punchout.gif\" alt=\"Usage\" /\u003e\n\u003c/p\u003e\n\n💾 Installation\n---\n\n**homebrew**:\n\n```sh\nbrew install dhth/tap/punchout\n```\n\n**go**:\n\n```sh\ngo install github.com/dhth/punchout@latest\n```\n\n⚡️ Usage\n---\n\n`punchout` can receive its configuration via command line flags, or a config\nfile.\n\n### Using a config file\n\nCreate a toml file that looks like the following. The default location for this\nfile is `~/.config/punchout/punchout.toml`. The configuration needed for\nauthenticating against your JIRA installation (on-premise or cloud) will depend\non the kind of the installation.\n\n```toml\n[jira]\njira_url = \"https://jira.company.com\"\n\n# for on-premise installations\ninstallation_type = \"onpremise\"\njira_token = \"your personal access token\"\n\n# for cloud installations\ninstallation_type = \"cloud\"\njira_token = \"your API token\"\njira_username = \"example@example.com\"\n\n# put whatever JQL you want to query for\njql = \"assignee = currentUser() AND updatedDate \u003e= -14d ORDER BY updatedDate DESC\"\n\n# I don't know how many people will find use for this.\n# I need this, since the JIRA on-premise server I use runs 5 hours behind\n# the actual time, for whatever reason 🤷\njira_time_delta_mins = 300\n\n# this comment will be used for worklogs when you don't provide one; optional\"\nfallback_comment = \"comment\"\n```\n\n### Basic usage\n\nUse `punchout -h` for help.\n\n```bash\npunchout \\\n    -db-path='/path/to/punchout/db/file.db' \\\n    -jira-url='https://jira.company.com' \\\n    -jira-installation-type 'onpremise' \\\n    -jira-token='XXX' \\\n    -jql='assignee = currentUser() AND updatedDate \u003e= -14d ORDER BY updatedDate DESC'\n\npunchout \\\n    -db-path='/path/to/punchout/db/file.db' \\\n    -jira-url='https://jira.company.com' \\\n    -jira-installation-type 'cloud' \\\n    -jira-token='XXX' \\\n    -jira-username='example@example.com' \\\n    -jql='assignee = currentUser() AND updatedDate \u003e= -14d ORDER BY updatedDate DESC'\n```\n\nBoth the config file and the command line flags can be used in conjunction, but\nthe latter will take precedence over the former.\n\n```bash\npunchout \\\n    -config-file-path='/path/to/punchout/config/file.toml' \\\n    -jira-token='XXX' \\\n    -jql='assignee = currentUser() AND updatedDate \u003e= -14d ORDER BY updatedDate DESC'\n```\n\n🖥️ Screenshots\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://tools.dhruvs.space/images/punchout/punchout-1.png\" alt=\"Usage\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://tools.dhruvs.space/images/punchout/punchout-2.png\" alt=\"Usage\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://tools.dhruvs.space/images/punchout/punchout-3.png\" alt=\"Usage\" /\u003e\n\u003c/p\u003e\n\n📋 Reference Manual\n---\n\n```\npunchout Reference Manual\n\npunchout has 5 panes:\n  - Issues List View                      Shows you issues matching your JQL query\n  - Worklog List View                     Shows you your worklog entries; you sync these entries\n                                          to JIRA from here\n  - Worklog Entry View                    You enter/update a worklog entry from here\n  - Synced Worklog Entry View             You view the worklog entries synced to JIRA\n\n  - Help View (this one)\n\nKeyboard Shortcuts\n\nGeneral\n\n  1                                       Switch to Issues List View\n  2                                       Switch to Worklog List View\n  3                                       Switch to Synced Worklog List View\n  \u003ctab\u003e                                   Go to next view/form entry\n  \u003cshift+tab\u003e                             Go to previous view/form entry\n  q/\u003cctrl+c\u003e                              Go back/reset filtering/quit\n  \u003cesc\u003e                                   Cancel form/quit\n  ?                                       Show help view\n\nGeneral List Controls\n\n  k/\u003cUp\u003e                                  Move cursor up\n  j/\u003cDown\u003e                                Move cursor down\n  h\u003cLeft\u003e                                 Go to previous page\n  l\u003cRight\u003e                                Go to next page\n  /                                       Start filtering\n\nIssue List View\n\n  s                                       Toggle recording time on the currently selected issue,\n                                              will open up a form to record a comment on the second\n                                              \"s\" keypress\n  S                                       Quick switch recording; will save a worklog entry without\n                                              a comment for the currently active issue, and start\n                                              recording time for another issue\n  \u003cctrl+s\u003e                                Update active worklog entry (when tracking active), or add\n                                              manual worklog entry (when not tracking)\n  \u003cctrl+t\u003e                                Go to currently tracked item\n  \u003cctrl+x\u003e                                Discard currently active recording\n  \u003cctrl+b\u003e                                Open issue in browser\n\nWorklog List View\n\n  \u003cctrl+s\u003e/u                              Update worklog entry\n  \u003cctrl+d\u003e                                Delete worklog entry\n  s                                       Sync all visible entries to JIRA\n  \u003cctrl+r\u003e                                Refresh list\n\nWorklog Entry View\n\n  enter                                   Save worklog entry\n  k                                       Move timestamp backwards by one minute\n  j                                       Move timestamp forwards by one minute\n  K                                       Move timestamp backwards by five minutes\n  J                                       Move timestamp forwards by five minutes\n  h                                       Move timestamp backwards by a day\n  l                                       Move timestamp forwards by a day\n\nSynced Worklog Entry View\n\n  \u003cctrl+r\u003e                                Refresh list\n\n```\n\nAcknowledgements\n---\n\n`punchout` is built using the awesome TUI framework [bubbletea][1].\n\n[1]: https://github.com/charmbracelet/bubbletea\n[2]: https://community.atlassian.com/t5/Atlassian-Migration-Program/Product-features-comparison-Atlassian-Cloud-vs-on-premise/ba-p/1918147\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhth%2Fpunchout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhth%2Fpunchout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhth%2Fpunchout/lists"}