Export GitHub issues to individual JSON files with incremental updates and credential management
Project description
GitHub Issue Exporter
A command-line tool that exports GitHub issues to individual JSON files, with incremental updates and credential management. Supports multiple repositories with per-repo configuration.
Authored by Claude Code.
Features
- Incremental Updates: Only exports issues that have been modified since last export
- Multiple Repositories: Process multiple repositories concurrently
- Secure Credential Storage: Encrypted storage of GitHub tokens
- Rich Progress Display: Beautiful progress bars and status updates
- Flexible Configuration: Per-repository settings and global configuration
- Comprehensive Export: Includes issue metadata, comments, labels, and assignees
Installation
# Install with uv
uv tool install github-issue-exporter
# Or install in development mode
uv pip install -e .
Quick Start
# Export issues from a single repository
github-issue-exporter owner/repo
# Export from multiple repositories
github-issue-exporter owner/repo1,owner/repo2,owner/repo3
# Custom output directory
github-issue-exporter owner/repo --output /path/to/exports
# Force re-export (ignore timestamps)
github-issue-exporter owner/repo --force
# Export only open issues
github-issue-exporter owner/repo --state open
Authentication
The tool will automatically prompt for a GitHub Personal Access Token when needed. You can create one at: https://github.com/settings/tokens
Required scopes:
repo(for private repositories)public_repo(for public repositories)
Tokens are stored securely using encryption and can be managed per-repository.
Configuration
# View current configuration
github-issue-exporter config --show
# Clear stored authentication
github-issue-exporter config --clear-auth owner/repo
# Set default output directory
github-issue-exporter config --set-output /path/to/exports
Output Format
Issues are exported as individual JSON files with the following structure:
{
"repository": {
"owner": "string",
"name": "string",
"full_name": "string"
},
"issue": {
"id": "number",
"number": "number",
"author": "string",
"state": "string",
"title": "string",
"body": "string",
"labels": ["string"],
"assignee": "string|null",
"assignees": ["string"],
"milestone": "string|null",
"created_date": "iso_string",
"updated_date": "iso_string",
"closed_date": "iso_string|null"
},
"comments": [
{
"id": "number",
"author": "string",
"body": "string",
"created_date": "iso_string",
"updated_date": "iso_string"
}
],
"export_metadata": {
"exported_at": "iso_string",
"tool_version": "string"
}
}
File Organization
Files are organized by repository and issue state:
exports/
owner1/
repo1/
open/
1-first-issue-title.json
3-another-open-issue.json
...
closed/
2-closed-issue-title.json
4-resolved-issue.json
...
owner2/
repo2/
open/
1-some-open-issue.json
closed/
2-some-closed-issue.json
Key Features:
- Issues are organized into
openandclosedsubdirectories based on their current state - Filenames use the issue number (not internal ID) for easier identification
- When an issue state changes, the file is automatically moved to the appropriate directory
Commands
export
Export GitHub issues to JSON files.
github-issue-exporter export [OPTIONS] REPOSITORIES
Options:
--output, -o: Output directory (default: ./exports)--force, -f: Force re-export, ignoring timestamps--state, -s: Issue state (open, closed, all)--no-comments: Skip exporting comments--concurrent, -c: Max concurrent repositories (1-10)
cleanup
Remove files for issues that no longer exist.
github-issue-exporter cleanup [OPTIONS] REPOSITORY
config
Manage configuration and credentials.
github-issue-exporter config [OPTIONS]
--version
Show version information.
github-issue-exporter --version
Requirements
- Python 3.11+
- GitHub Personal Access Token (for private repos or higher rate limits)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file github_issue_exporter-0.0.1.tar.gz.
File metadata
- Download URL: github_issue_exporter-0.0.1.tar.gz
- Upload date:
- Size: 39.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0a699cfa3bc1a7270e53e88c1e47023c6c5dc34c44568088139981ae11dd691
|
|
| MD5 |
5546bc042bd83e9a32c8b72865ea0a63
|
|
| BLAKE2b-256 |
43f6c6cd21a8d7b503102dac7f66d8bba981cc57b2dc61f8db8f8be6b692c801
|
Provenance
The following attestation bundles were made for github_issue_exporter-0.0.1.tar.gz:
Publisher:
publish.yml on Beep-Boop-Digital/github-issue-exporter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
github_issue_exporter-0.0.1.tar.gz -
Subject digest:
f0a699cfa3bc1a7270e53e88c1e47023c6c5dc34c44568088139981ae11dd691 - Sigstore transparency entry: 232672554
- Sigstore integration time:
-
Permalink:
Beep-Boop-Digital/github-issue-exporter@90c6f15186e33f47a0b92cb3b24c5827df49c7d3 -
Branch / Tag:
refs/tags/0.0.1 - Owner: https://github.com/Beep-Boop-Digital
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@90c6f15186e33f47a0b92cb3b24c5827df49c7d3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file github_issue_exporter-0.0.1-py3-none-any.whl.
File metadata
- Download URL: github_issue_exporter-0.0.1-py3-none-any.whl
- Upload date:
- Size: 23.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17eee423a89c6c295ede2b0d757cff398286ed7edc631e753f46481935805b82
|
|
| MD5 |
e4089edcae19b05dafbd6cb3c220a897
|
|
| BLAKE2b-256 |
6fc8562ba048c803ba792247d3e5a26ca4152caff546761c71a0cfb31e6bea93
|
Provenance
The following attestation bundles were made for github_issue_exporter-0.0.1-py3-none-any.whl:
Publisher:
publish.yml on Beep-Boop-Digital/github-issue-exporter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
github_issue_exporter-0.0.1-py3-none-any.whl -
Subject digest:
17eee423a89c6c295ede2b0d757cff398286ed7edc631e753f46481935805b82 - Sigstore transparency entry: 232672555
- Sigstore integration time:
-
Permalink:
Beep-Boop-Digital/github-issue-exporter@90c6f15186e33f47a0b92cb3b24c5827df49c7d3 -
Branch / Tag:
refs/tags/0.0.1 - Owner: https://github.com/Beep-Boop-Digital
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@90c6f15186e33f47a0b92cb3b24c5827df49c7d3 -
Trigger Event:
release
-
Statement type: