Skip to main content

Contributing to Gluecraft JPD

Thank you for your interest in contributing! This document provides guidelines and instructions for contributing to the project.

Table of Contents​

Code of Conduct​

This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to the project maintainers.

Getting Started​

  1. Fork the repository on GitHub
  2. Clone your fork locally:
    git clone https://github.com/your-username/gluecraft.git
    cd gluecraft
  3. Add the upstream repository:
    git remote add upstream https://github.com/thecraftlab/gluecraft.git

Development Setup​

Prerequisites​

  • Node.js 20+
  • pnpm 10+
  • JIRA/JPD account with API access
  • GitHub account with personal access token

Installation​

# Install dependencies
pnpm install

# Copy environment template
cp .env.example .env

# Edit .env with your credentials
# (Never commit .env file!)

Running Tests​

# Run all tests
pnpm test

# Run specific test suite
pnpm test:e2e
pnpm test:unit

# Run tests in watch mode
pnpm test -- --watch

Local Development​

# Run in dry-run mode (no changes made)
pnpm run dev -- --dry-run

# Run actual sync
pnpm run dev

# Test health check
pnpm run health-check

# Discover fields
pnpm run discover-fields YOUR_PROJECT_KEY

Making Changes​

Branching Strategy​

  • main - Production-ready code
  • develop - Integration branch (if used)
  • feature/your-feature - New features
  • fix/your-fix - Bug fixes
  • docs/your-docs - Documentation updates

Creating a Branch​

# Sync with upstream
git fetch upstream
git checkout main
git merge upstream/main

# Create feature branch
git checkout -b feature/your-feature-name

Commit Messages​

Use the Conventional Commits format:

feat(scope): add new feature
fix(scope): fix bug in component
docs(scope): update documentation
test(scope): add tests
refactor(scope): refactor code
chore(scope): update dependencies

Examples:

feat(transforms): add RICE score calculation
fix(sync-engine): handle null field values
docs(examples): add e-commerce roadmap example
test(integration): add error handling tests

Testing​

Test Requirements​

All pull requests must include tests:

  • Unit tests for new functions/utilities
  • Integration tests for API interactions
  • E2E tests for complete sync workflows
  • Tests must be idempotent (can run multiple times safely)

Writing Tests​

// tests/unit/your-feature.test.ts
import { describe, it, expect } from 'vitest';
import { yourFunction } from '../src/your-feature';

describe('yourFunction', () => {
it('should handle normal input', () => {
const result = yourFunction('input');
expect(result).toBe('expected output');
});

it('should handle edge cases', () => {
expect(() => yourFunction(null)).toThrow();
});
});

Running Test Scripts​

Use the provided test scripts:

# Quick validation tests (no API calls)
./tests/scripts/test-generic-setup.sh

# Integration tests (requires .env)
./tests/scripts/test-sync-integration.sh

# Specific example test
CONFIG_PATH=examples/mtt/config/mtt-clean.yaml pnpm test

Submitting Changes​

Before Submitting​

  1. Run tests: pnpm test
  2. Check linting: pnpm run lint (if configured)
  3. Build successfully: pnpm run build
  4. Update documentation if adding features
  5. Add examples for new transform patterns

Creating a Pull Request​

  1. Push your branch:

    git push origin feature/your-feature-name
  2. Create PR on GitHub with:

    • Clear title following conventional commits
    • Description of changes made
    • Motivation for the change
    • Testing performed
    • Screenshots if UI/output changes
    • Breaking changes if any
  3. Link related issues: "Fixes #123" or "Relates to #456"

PR Review Process​

  • Maintainers will review within 3-5 business days
  • Address review feedback by pushing new commits
  • Keep discussion focused and professional
  • CI must pass before merging

Style Guide​

TypeScript​

  • Use TypeScript for all new code
  • Follow existing code style (use Prettier if configured)
  • Use async/await over promises
  • Prefer const over let, avoid var
  • Use meaningful variable names
// Good
const jpdClient = new JpdClient(config);
const syncedIssues = await jpdClient.searchIssues(jql);

// Avoid
const c = new JpdClient(config);
const data = await c.search(jql);

Documentation​

  • Add JSDoc comments for all exported functions
  • Include examples in documentation
  • Keep README updated with new features
  • Add inline comments for complex logic
/**
* Synchronize a JPD issue to GitHub
*
* @param jpdIssue - The JPD issue object
* @param config - Sync configuration
* @returns The GitHub issue number, or null if skipped
*
* @example
* ```typescript
* const githubNumber = await syncToGitHub(jpdIssue, config);
* ```
*/
async function syncToGitHub(jpdIssue: any, config: Config): Promise<number | null> {
// Implementation
}

Configuration Files​

  • Use YAML for config files
  • Add comments explaining options
  • Provide examples for each pattern
  • Keep minimal configs simple

Adding Examples​

Examples are crucial for showing different use cases. To add a new example:

  1. Create directory structure:

    mkdir -p examples/your-example/config
  2. Add config file: examples/your-example/config/config.yaml

    • Start from config/sync-config.minimal.yaml
    • Add project-specific fields
    • Document all custom field IDs
    • Include setup instructions
  3. Add README: examples/your-example/README.md

    • Describe the use case
    • List features demonstrated
    • Provide setup steps
    • Include customization ideas
    • Add troubleshooting section
  4. Update main README with link to new example

  5. Test the example thoroughly

See existing examples for reference:

  • examples/jira-software-basic/ - Minimal setup
  • examples/ecommerce-roadmap/ - Product management
  • examples/bug-tracking/ - Bug workflows
  • examples/mtt/ - Advanced JPD features

Areas for Contribution​

High Priority​

  • Performance improvements - Optimize API calls, caching
  • Error handling - Better error messages, recovery strategies
  • Monitoring - Metrics, logging, observability
  • Documentation - Tutorials, troubleshooting guides
  • Examples - More real-world use cases

Feature Ideas​

  • Field type support - More JPD field types
  • Bi-directional comments - Rich comment sync
  • Attachment sync - File attachment support
  • Webhook support - Real-time sync
  • Multi-project sync - Handle multiple projects
  • GitHub Discussions - Sync to discussions
  • Custom field validators - Runtime validation

Good First Issues​

Look for issues tagged good-first-issue or help-wanted on GitHub.

Questions?​

  • Documentation: Check docs/ directory
  • Examples: Browse examples/ directory
  • Issues: Search existing issues on GitHub
  • Discussions: Start a discussion on GitHub

License​

By contributing, you agree that your contributions will be licensed under the MIT License.

Thank you for contributing! 🎉