Skip to main content

Python + CLI helpers for GitHub Projects task ownership

Project description

gh-task

Python + CLI helpers for taking, moving, and releasing GitHub Project (v2) issues using a lightweight ownership label protocol.

Install (local)

pip install -e .

Prerequisites

gh must be installed and authenticated (the library uses it to fetch a token if no GH_TOKEN/GITHUB_TOKEN is set).

Auth

Uses GH_TOKEN or GITHUB_TOKEN if set, otherwise falls back to gh auth token. Ensure the token has the project scope for Project v2 access.

Python usage

from gh_task import Project

project = Project(
    project="https://github.com/users/yieldthought/projects/3/views/1",
    name="my-name",
    has_label=["bug", "help wanted"],
)

# list status columns (project can be a short ref or full URL)
print(project.list())

# list issue numbers in Backlog
print(project.list("Backlog"))

# take a specific issue (number, URL, or owner/repo#number)
issue_id = project.take(2)

# take the first available issue in Backlog that matches the label filter
issue_id = project.take("Backlog")

# move and release
project.move(2, "In review")
project.release(2)

# context-managed lease (auto-release on exit)
with project.lease("Backlog") as issue:
    print(issue.number)

# create a new issue and add it to the project
issue = project.create(
    title="Investigate latency spikes",
    description="See logs from Jan 24",
    status="Backlog",
    repo="yieldthought/gh-task",  # optional if the project has a single repo
    label="bug",
)

CLI

# list status columns
 gh-task list -p yieldthought/projects/3 -n my-name

# list issues in Backlog
 gh-task list -p yieldthought/projects/3 -n my-name Backlog

# take a specific issue
 gh-task take -p yieldthought/projects/3 -n my-name -i 2

# take the first available issue in Backlog
 gh-task take -p yieldthought/projects/3 -n my-name -l "bug,help wanted" Backlog

# move and release
 gh-task move -p yieldthought/projects/3 -n my-name -i 2 -s "In review"
 gh-task release -p yieldthought/projects/3 -n my-name -i 2

# create a new issue and add it to the project (repo inferred if possible)
 gh-task create -p yieldthought/projects/3 -r yieldthought/gh-task -t "Fix retry logic" -d "Add jitter + cap"
 gh-task create -p yieldthought/projects/3 -t "Investigate latency spikes" -s Backlog --label bug

Label filtering

has_label (or --label/-l) restricts .list() and .take() to issues that carry at least one of the provided labels. When taking a specific issue, a TakeError is raised if it does not match the filter.

Ownership protocol

take() performs the following:

  1. Verify there is no label starting with owner:.
  2. Add a comment Taking: <name>.
  3. Wait 1s (configurable) and fetch all comments beginning with Taking:.
  4. If the earliest Taking: comment is yours, add owner: <name> label.
  5. Remove your Taking: comment (best-effort).

If any step fails, the comment is removed and a TakeError is raised.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gh_task-0.1.6.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gh_task-0.1.6-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file gh_task-0.1.6.tar.gz.

File metadata

  • Download URL: gh_task-0.1.6.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gh_task-0.1.6.tar.gz
Algorithm Hash digest
SHA256 fca6ab7342e74cc1956dd7bf56cbc50bafe4ec548087c5f003ecf053878335e4
MD5 996ccf54b35826704ce09b5387ac7806
BLAKE2b-256 3f5d888e7c5836a13f6596c4c75a4bd5ee58fa2a2300db588111fb0069ee9e27

See more details on using hashes here.

Provenance

The following attestation bundles were made for gh_task-0.1.6.tar.gz:

Publisher: workflow.yml on yieldthought/gh-task

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gh_task-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: gh_task-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gh_task-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 3328cfddbef4f80fcedb51d63e5b45e0ba2ba85add22a68b83d1572ac871bfaf
MD5 12a5cbc632e7946ac959a6c6070ec27f
BLAKE2b-256 30c531eea53668324633c273bcf666178984d7dbee080528ec86d24c35b94efa

See more details on using hashes here.

Provenance

The following attestation bundles were made for gh_task-0.1.6-py3-none-any.whl:

Publisher: workflow.yml on yieldthought/gh-task

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page