Thanks for your interest in contributing! This project welcomes contributions from everyone.
git clone https://github.com/remenoscodes/git-native-issue.git
cd git-native-issue
make test # Run all 282 tests- Git 2.17+ (for
git interpret-trailers --parsesupport) - POSIX shell (sh, bash, zsh, dash all work)
- Standard POSIX tools (sed, awk, grep, etc.)
- For GitHub bridge:
ghCLI andjq
# All tests (153 total: 76 core + 36 bridge + 20 merge + 21 QoL)
make test
# Specific test file
sh t/test-issue.sh
sh t/test-merge.sh
sh t/test-qol.sh
sh t/test-bridge.sh
# Individual test (edit the test file to run only one)All tests must pass before merging PRs.
- POSIX shell only - No bashisms, no zsh-isms
- shellcheck passing - CI enforces this
- 2-space indentation for shell scripts
- Tab indentation for Makefiles
Run linter before committing:
make lint # Runs shellcheck on all scriptsgh repo fork remenoscodes/git-native-issue
git checkout -b feature/your-feature-name- Follow POSIX shell conventions
- Add tests for new features
- Update documentation if needed
make test # All tests must pass
make lint # All checks must passWrite clear commit messages:
Add support for issue templates
Implements #42. Users can now create .git/issue-template.md
for default issue body content.
- Add read_template() function
- Update git-issue-create with --template flag
- Add tests in t/test-issue.sh lines 450-475
Important: We do not use Co-Authored-By trailers in this project.
git push origin feature/your-feature-name
gh pr createbin/
git-issue # Main dispatcher
git-issue-create # Create command
git-issue-ls # List command
git-issue-show # Show command
... # Other subcommands
t/
test-issue.sh # Core functionality tests
test-merge.sh # Merge/fsck tests
test-qol.sh # Quality-of-life features
test-bridge.sh # GitHub bridge tests
doc/
git-issue.1 # Man pages
...
ISSUE-FORMAT.md # The format specification
README.md # User documentation
- Bug fixes - Always welcome
- Test coverage - Improve existing tests
- Documentation - Clarify unclear sections
- Performance - Optimize slow operations
- New features - Discuss in an issue first
- Bridge implementations - GitLab, Gitea, Forgejo
- Package managers - Help with Nix, Snap, etc.
- Format changes - ISSUE-FORMAT.md is a spec, changes have wide impact
- Breaking changes - Discuss first, plan migration path
- Large refactors - Create RFC issue before starting
We track issues using git-issue itself:
git clone https://github.com/remenoscodes/git-native-issue.git
cd git-native-issue
git fetch origin 'refs/issues/*:refs/issues/*' # Get existing issues
git issue ls # List issues
git issue create "Your bug report" -l bug
git push origin 'refs/issues/*' # Share your issueIf you prefer, GitHub Issues work too. We sync bidirectionally.
Tests use shell's built-in test framework:
run_test() {
TESTS_RUN=$((TESTS_RUN + 1))
}
pass() {
TESTS_PASSED=$((TESTS_PASSED + 1))
printf "${GREEN} PASS${NC} %s\n" "$1"
}
fail() {
TESTS_FAILED=$((TESTS_FAILED + 1))
printf "${RED} FAIL${NC} %s\n" "$1"
}
# Example test
run_test
setup_repo
git issue create "Test issue" >/dev/null
output="$(git issue ls 2>&1)"
case "$output" in
*"Test issue"*)
pass "create command works"
;;
*)
fail "create command works" "got: $output"
;;
esac- Isolated tests - Each test creates its own repo in /tmp
- Clean up - Use
trap 'rm -rf "$TEST_DIR"' EXIT - No side effects - Tests should not affect system state
- Deterministic - Same input = same output, always
- CI must pass - All tests, shellcheck, installation validation
- Maintainer review - Usually within 2-3 days
- Feedback addressed - Make requested changes
- Approval - Maintainer approves PR
- Merge - Squash and merge to main
Releases happen when:
- Bug fixes accumulate (patch release)
- New features complete (minor release)
- Breaking changes (major release)
Maintainers handle releases. Contributors don't need to worry about versioning.
- Open an issue (git-issue or GitHub)
- Start a discussion on GitHub Discussions
- Ask on the PR itself
By contributing, you agree that your contributions will be licensed under GPL-2.0 (same as Git itself).
Be respectful, collaborative, and professional. We're all here to make distributed issue tracking better.
Thank you for contributing! 🚀