Skip to content

Releases: remenoscodes/git-native-issue

v1.3.3

Choose a tag to compare

@github-actions github-actions released this 16 Feb 04:11
7cda508

What's Changed

  • Prepare release v1.3.3 (7cda508)
  • Fix import-github missing lib source and update asdf CI test (1f1f604)
  • Fix git-issue-import-github missing git-issue-lib source (c1c903e)
  • Update PKGBUILD sha256sum for v1.3.2 release tarball (211b76b)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.3/git-native-issue-v1.3.3.tar.gz | tar xz
cd git-native-issue-v1.3.3
sudo make install

From Tarball

Download git-native-issue-v1.3.3.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.3.tar.gz
cd git-native-issue-v1.3.3
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

b4fb6f48e7aff280c624e93741f0337c3cdc8011fde37769602609a7aa7c9bf5

v1.3.2

Choose a tag to compare

@github-actions github-actions released this 16 Feb 03:54
b9b4c47

What's Changed

  • Prepare release v1.3.2 (b9b4c47)
  • Add workflow file to test-install path trigger (ac5d9b6)
  • Mark asdf plugin test as non-blocking (3801223)
  • Update PKGBUILD to v1.3.1 (54d18d5)
  • Fix CI, lint, and test-install workflow failures (cb4209c)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.2/git-native-issue-v1.3.2.tar.gz | tar xz
cd git-native-issue-v1.3.2
sudo make install

From Tarball

Download git-native-issue-v1.3.2.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.2.tar.gz
cd git-native-issue-v1.3.2
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

40b1cb3f92c457452e201e23e7327d53896bba1c09da8519467c7f402f35075e

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 16 Feb 02:05
b187a17

What's Changed

  • Prepare release v1.3.1 (24cc82d)
  • Improve GitHub assignee resolution for private emails (5ca5062)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.1/git-native-issue-v1.3.1.tar.gz | tar xz
cd git-native-issue-v1.3.1
sudo make install

From Tarball

Download git-native-issue-v1.3.1.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.1.tar.gz
cd git-native-issue-v1.3.1
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

8848a70eb146d6f9695a4b78e8d36804026d95ab77658682b3e343c82440a5d1

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 16 Feb 01:37
abba516

What's Changed

  • Prepare release v1.3.0 (75ccc87)
  • Add bidirectional assignee sync across all platform bridges (5ae3372)
  • Add assignee email validation and comprehensive test coverage (9f3cf6e)
  • Add concurrency retry mechanism and error handling (cc8d359)
  • Add label validation and normalization (71a0866)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.0/git-native-issue-v1.3.0.tar.gz | tar xz
cd git-native-issue-v1.3.0
sudo make install

From Tarball

Download git-native-issue-v1.3.0.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.0.tar.gz
cd git-native-issue-v1.3.0
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

329e77b6266bec3f62103eb8dd580e0620b99c0583b908cdb57bceee318fbe71

v1.2.2 - Fix init remote coupling

Choose a tag to compare

@remenoscodes remenoscodes released this 09 Feb 07:06
d209c9f

Release Notes: git-native-issue v1.2.2

Release Date: 2026-02-09
Type: Patch Release (Bug Fix)


🎯 What's Fixed

The Problem (Discovered via Dogfooding)

When using git-native-issue in a local-only repository (no remote configured), users encountered confusing errors:

$ git issue init
error: remote 'origin' does not exist
       available remotes:

This contradicted git-native-issue's distributed/offline-first philosophy — core commands should work perfectly without any remote configuration.

Root Causes

  1. Hardcoded "origin" assumption in git issue init

    • Failed immediately if no "origin" remote existed
    • Didn't handle repos with non-standard remote names (upstream, fork, etc.)
  2. Unclear messaging about init being optional

    • Users might assume init is required
    • No documentation explaining core commands work without init
  3. Coupling appeared to exist between core functionality and remotes

    • Actually, core commands were fine!
    • But init failures blocked workflow

✨ What's New

1. Intelligent Remote Auto-Detection

git issue init now auto-detects remotes intelligently:

Scenario Behavior
No remotes Explains init is optional, exits gracefully (exit 0)
1 remote (any name) Auto-detects and uses it
Multiple remotes + "origin" Prefers "origin" (common convention)
Multiple remotes, no "origin" Lists options, asks user to specify
Explicit: init <remote> Always respects user choice

Before:

$ git issue init
error: remote 'origin' does not exist
       available remotes: upstream,fork

After:

$ git issue init
git-issue: Multiple remotes found. Please specify which one to use:
  - fork
  - upstream

Usage:
  git issue init <remote-name>

Example:
  git issue init fork

2. Local-Only Repository Support

No remotes? No problem!

$ git issue init
git-issue: No remotes configured.

Note: git issue init is OPTIONAL. You can use git-issue without any remote:
  - All core commands (create, ls, show, comment, edit, state) work locally
  - To sync with a remote later, use manual push/fetch:
    git push <remote> 'refs/issues/*'
    git fetch <remote> 'refs/issues/*:refs/issues/*'

To configure automatic fetch when you add a remote, run:
  git issue init <remote-name>

3. Comprehensive Test Coverage

30 new tests validating local-only workflows:

  • t/test-local-only-repo.sh (17 tests)

    • Core commands work 100% without remote
    • Init handles no-remote gracefully
    • Bridge commands fail clearly (as expected)
    • Issues stored correctly in refs/issues/*
  • t/test-init-auto-detect.sh (13 tests)

    • All auto-detection scenarios
    • Error message clarity
    • Remote preference logic

Test Results: 106/106 tests passing (76 core + 30 new)


🔍 Technical Details

What git issue init Actually Does

ONLY adds convenience for automatic fetch:

# Without init - manual fetch required:
git fetch origin 'refs/issues/*:refs/issues/*'

# With init - adds to .git/config:
[remote "origin"]
    fetch = +refs/issues/*:refs/issues/*

# Then you can just:
git fetch origin  # issues fetched automatically

Init is 100% OPTIONAL — all core commands work without it.

Changes Made

Modified files:

  • bin/git-issue-init (+64 lines) - Auto-detection logic
  • bin/git-issue (VERSION bump to 1.2.2)
  • t/test-issue.sh (version test updated)

New files:

  • t/test-local-only-repo.sh (+315 lines)
  • t/test-init-auto-detect.sh (+270 lines)

Total: 3 files changed, 649 insertions(+), 3 deletions(-)


📦 Installation

Upgrade via Homebrew

brew update
brew upgrade git-native-issue

Install from Source

git clone https://github.com/remenoscodes/git-native-issue.git
cd git-native-issue
git checkout v1.2.2
make install

Verify Installation

git issue version
# git-issue version 1.2.2

✅ Validation

Tested scenarios:

  • ✅ Local-only repos (no remote)
  • ✅ Repos with single non-origin remote
  • ✅ Repos with multiple remotes (with/without origin)
  • ✅ Explicit remote specification
  • ✅ All core commands work independently

Backwards compatibility:

  • ✅ Existing workflows unchanged
  • ✅ Explicit git issue init origin still works
  • ✅ No breaking changes

🙏 Credits

Discovered by: Emerson Soares (dogfooding in production)
Root cause analysis: Complete investigation of coupling between core and bridges
Fix: Intelligent auto-detection + comprehensive test coverage


📚 Documentation


🐛 Reporting Issues

Found a bug? Please report it:


Previous release: v1.2.1 - Gitea/Forgejo bridge fixes
Next release: TBD


🚀 Happy distributed issue tracking!

v1.2.1

Choose a tag to compare

@github-actions github-actions released this 09 Feb 00:56
03da7d5

git-native-issue v1.2.1 Release Notes

🐛 Critical Bug Fix Release

v1.2.1 fixes 10 critical bugs discovered during comprehensive integration testing of the Gitea/Forgejo bridge released in v1.2.0. All bugs have been fixed and validated with real-world testing across GitHub, GitLab, and Gitea.

Recommendation: All v1.2.0 users should upgrade immediately to v1.2.1.


What's Fixed

🔴 Critical Import Bugs (5 bugs)

1. Router Argument Passing

Problem: Import router wasn't passing --url and --token flags to provider-specific scripts.
Impact: Could not specify custom Gitea/Forgejo instance URLs or tokens.
Fix: Router now passes all arguments via "$@".

# This now works correctly:
git issue import gitea:owner/repo --url https://gitea.company.com --token abc123

2. Pagination Integer Validation

Problem: Missing validation before integer arithmetic caused "integer expression expected" errors.
Impact: Import failed when API returned invalid/empty responses.
Fix: Added proper integer validation with error messages.

3. Authentication Requirements

Problem: Hard requirement for API token prevented importing from public repositories.
Impact: Could not import from public Gitea/Forgejo repos without token.
Fix: Token now optional with warning for private repo access.

# Public repos now work without token:
git issue import gitea:gitea/tea --url https://gitea.com --state all
# Imported 50 issues from gitea/tea ✅

4. Error Handling (curl -f)

Problem: curl -f flag hid actual API error messages.
Impact: Debugging failed imports was nearly impossible.
Fix: Removed -f, added JSON validation, show actual API errors.

Before:

error: failed to connect to https://gitea.com

After:

error: API error: Repository 'owner/repo' not found
       response: {"message":"Repository 'owner/repo' not found","url":"..."}

5. Empty Author Names

Problem: Some Gitea users have empty full_name field, causing git commit failures.
Impact: Import failed with "empty ident name not allowed" error.
Fix: Fallback to username when full_name is empty.


🔴 Critical Export Bugs (4 bugs)

6. Router Argument Passing

Problem: Same as import - export router didn't pass --url flag.
Fix: Same fix - pass all arguments via "$@".

7. Label Handling (Gitea-specific) ⭐ MAJOR FIX

Problem: Gitea API expects label IDs (integers), but we sent label names (strings).
Impact: Export failed with: "cannot unmarshal number into Go struct field"
Fix: Implemented smart label auto-creation:

Smart Features:

  • ✅ Fetches all existing labels from target repository
  • ✅ Auto-creates missing labels with intelligent color defaults
  • ✅ Returns label IDs for API calls
  • ✅ Caches labels for performance

Smart Color Defaults:

bug, fix          → red (#d73a4a)
enhancement, feature → light blue (#a2eeef)
documentation, docs  → blue (#0075ca)
question          → purple (#d876e3)
duplicate         → gray (#cfd3d7)
help*             → green (#008672)
default           → blue (#84b6eb)

Example:

# Create local issue with labels
git issue create "Bug fix needed" -l bug,help-wanted

# Export to Gitea (labels auto-created!)
git issue export gitea:owner/repo --url https://gitea.com
# Exported 1 issues
# Created labels: bug (#d73a4a), help-wanted (#84b6eb) ✅

8. Token Verification

Problem: Token check with curl -f blocked dry-run mode.
Fix: Skip token verification in dry-run, removed -f flag.

9. Dry-run Mode

Problem: Dry-run still attempted API calls.
Fix: Dry-run now skips all API calls, works without credentials.

# Dry-run works without token:
git issue export gitea:owner/repo --url https://gitea.com --dry-run
# [dry-run] Would export 5 issues ✅

🔴 GitLab Comment Sync Bug (1 bug)

10. GitLab Comment Import

Problem: glab issue view --output json doesn't include notes/comments (glab CLI limitation).
Impact: Comments added on GitLab weren't syncing to local git-issue.
Fix: Use direct API call: glab api "projects/{path}/issues/{iid}/notes"

Now works:

# Add comment on GitLab (via web UI or glab CLI)
# Then sync it:
git issue import gitlab:owner/project --state all
# Updated abc1234 with 1 new comment(s) ✅

Testing & Validation

✅ Comprehensive Integration Testing

Test Coverage:

  • 97/97 tests passing (76 core + 21 QoL features)
  • 14/14 cross-platform tests passing
  • All 3 platforms validated: GitHub, GitLab, Gitea

Real-World Testing:

  • ✅ 50 issues imported from gitea.com/gitea/tea
  • ✅ Cross-platform migration tested (GitHub→GitLab, GitHub→Gitea, GitLab→Gitea)
  • ✅ Bidirectional sync verified on all platforms
  • ✅ Label auto-creation tested with 10+ different label names
  • ✅ Unicode & emoji preservation: 你好 🚀 🌍 🔧 across all platforms
  • ✅ Markdown preservation: bold, italic, code blocks
  • ✅ Smart duplicate prevention: Provider-ID tracking works correctly

Test Results Summary

Test Category Tests Passed Failed
Core functionality 76 ✅ 76 0
QoL features 21 ✅ 21 0
Cross-platform import 4 ✅ 4 0
Cross-platform export 2 ✅ 2 0
Bidirectional sync 3 ✅ 3 0
Smart features 5 ✅ 5 0
TOTAL 111 ✅ 111 0

Migration Guide

From v1.2.0 to v1.2.1

No breaking changes. Simply upgrade and all existing functionality continues to work, but better.

Via Homebrew:

brew update
brew upgrade git-native-issue
git issue version  # Should show 1.2.1

Via install script:

cd /path/to/git-native-issue
git pull
sudo make install

What changes:

  • Import/export now work with custom URLs and tokens
  • Public repository imports no longer require tokens
  • Label auto-creation makes Gitea exports seamless
  • Error messages are actually helpful
  • GitLab comment sync works properly

Files Changed

Modified Scripts (9 files)

Routers:

  • bin/git-issue-import - Pass all arguments to provider scripts
  • bin/git-issue-export - Pass all arguments to provider scripts

Gitea/Forgejo Bridge:

  • bin/git-issue-import-gitea - Fixed 5 bugs (pagination, auth, errors, authors, token)
  • bin/git-issue-export-gitea - Fixed 3 bugs + added label auto-creation (70 lines added)

GitLab Bridge:

  • bin/git-issue-import-gitlab - Fixed comment sync (direct API call)

Documentation:

  • CHANGELOG.md - Added v1.2.1 entry with all bug fixes
  • RELEASE-NOTES-v1.2.1.md - This file

Version:

  • All scripts updated to version 1.2.1

Known Limitations

None! All features working as designed across all platforms.


Platform Support Matrix

Platform Import Export Sync Comments Labels Status
GitHub ✅ ✅ ✅ ✅ ✅ Production
GitLab ✅ ✅ ✅ ✅ ✅ Production
Gitea ✅ ✅ ✅ ✅ ✅ auto-create Production
Forgejo ✅ ✅ ✅ ✅ ✅ auto-create Production

Credits

Testing & Bug Discovery: Comprehensive integration testing across all platforms
Bug Fixes: All 10 bugs fixed in single patch release
Validation: Real-world testing with gitea.com, gitlab.com, github.com


Links


Next Steps After Upgrading

  1. Test your workflows - existing imports/exports continue to work
  2. Try label auto-creation - export to Gitea with labels
  3. Import public repos - no token needed for public Gitea/Forgejo repos
  4. Use dry-run - test exports safely without credentials
  5. Check error messages - now actually helpful for debugging

Thank you for using git-native-issue! 🎉

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 08 Feb 23:52
d89400f

What's Changed

  • Prepare v1.2.0 release (7b9bae2)
  • Fix Gitea bridge test Provider-ID format (eaba0d1)
  • Add Gitea/Forgejo bridge for v1.2.0 (9b5b24e)
  • Fix GitLab bridge documentation to use glab CLI (d4345d8)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.2.0/git-native-issue-v1.2.0.tar.gz | tar xz
cd git-native-issue-v1.2.0
sudo make install

From Tarball

Download git-native-issue-v1.2.0.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.2.0.tar.gz
cd git-native-issue-v1.2.0
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

7392cbd3359b4bbb909e7451b69034a9203f6acbdea8ec505c1bf72feacb3b92

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Feb 23:25
1cf4be1

What's Changed

  • Add release notes for v1.1.0 (74ce064)
  • Finalize CHANGELOG for v1.1.0 release (67b3dd9)
  • Fix critical bug: GitLab import UUID generation (1452149)
  • Add integration tests and fix version checks (6b20423)
  • Update CHANGELOG for v1.1.0 release (74f2d6b)
  • Add GitLab bridge and migration documentation (9c0d79e)
  • Add comprehensive GitLab bridge test suite (2ad4bf6)
  • Complete GitHub bridge refactoring (7230de8)
  • Refactor GitLab export to use glab CLI (47d493c)
  • Fix critical bugs in GitLab import and export router (47a97c0)
  • Add GitLab import support and update router (820f39b)
  • Add [Unreleased] section for v1.1.0 planning (dbf4d5b)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.1.0/git-native-issue-v1.1.0.tar.gz | tar xz
cd git-native-issue-v1.1.0
sudo make install

From Tarball

Download git-native-issue-v1.1.0.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.1.0.tar.gz
cd git-native-issue-v1.1.0
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

fe66c2eb4894e5bf451f48739a5d83363716498a59e4396d3c281682364cb80f

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 08 Feb 22:24
71c0d32

What's Changed

  • Bump version to 1.0.3 (160549a)
  • Remove Claude Code references (a53a900)
  • Update release workflow to trigger tap formula updates (dda8d6d)
  • Remove redundant Formula directory (f991be3)
  • Update Homebrew formula for v1.0.2 (31cfe99)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.0.3/git-native-issue-v1.0.3.tar.gz | tar xz
cd git-native-issue-v1.0.3
sudo make install

From Tarball

Download git-native-issue-v1.0.3.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.0.3.tar.gz
cd git-native-issue-v1.0.3
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

e02cdb15cbc69146cb5fe973b273a0e59fd167c980f6fe1ea642f86abf3bd0d7

v1.0.2 - Bidirectional Comment Sync & Critical Bug Fix

Choose a tag to compare

@remenoscodes remenoscodes released this 08 Feb 22:05
f701569

Changelog

All notable changes to git-native-issue will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

1.0.2 - 2026-02-11

Added

  • Bidirectional comment synchronization for GitHub bridge
    • Comments added on GitHub are now imported to local issues
    • Comments added locally are exported to existing GitHub issues
    • Fully idempotent: running sync multiple times is safe
  • Provider-Comment-ID tracking to prevent duplicate comments
  • Exported-Commit trailer links metadata to original commit SHAs
  • Edge case test suite (11 tests covering unicode, long comments, special chars, state conflicts, rapid syncs, concurrent operations, markdown)
  • Platform migration use case documentation in ANNOUNCEMENT.md

Fixed

  • Critical bug: Comments were duplicated on each sync (#7481188)
    • Root cause: Export didn't track which commits were already exported
    • Solution: Exported-Commit trailer associates metadata with original commits
    • Impact: sync is now fully idempotent with zero duplication
  • GitHub bridge now handles deleted/closed issues gracefully
  • State conflicts resolved correctly (local wins on simultaneous changes)
  • Markdown code blocks preserved during export/import

Changed

  • Export now creates metadata commits with both Provider-Comment-ID and Exported-Commit trailers
  • Sync detection logic uses commit SHA list instead of timestamp comparison
  • Test suite expanded from 153 to 160 tests (7 new bidirectional sync tests)

Testing

  • 160/160 tests passing (76 core + 36 bridge + 20 merge + 21 QoL + 7 comment-sync)
  • Edge cases validated: unicode, emojis, special characters, long comments (5000+ chars)
  • Idempotency verified: 3 consecutive syncs produce identical results
  • State conflict resolution tested and validated

Documentation

  • Added migration use case (GitHub ↔ GitLab) to announcement
  • Updated roadmap: C/Rust implementation → contrib/git-issue/ → git builtin
  • Created GitLab bridge specification for v1.1.0

1.0.1 - 2026-02-07

Added

  • Initial public release
  • Core commands: create, ls, show, comment, edit, state
  • GitHub bridge: import, export, sync
  • Distributed merge with field-specific rules
  • POSIX shell implementation
  • 153 comprehensive tests
  • Multiple installation methods (Homebrew, asdf, install.sh)

Security

  • Trailer injection protection
  • Command injection prevention
  • Input sanitization for all user-provided data

Performance

  • Tested with 10,000+ issues
  • Optimized for large repositories
  • Efficient Git plumbing usage