{"id":28208430,"url":"https://github.com/krzko/jiragitfluence","last_synced_at":"2026-02-27T15:41:54.898Z","repository":{"id":285475151,"uuid":"958264237","full_name":"krzko/jiragitfluence","owner":"krzko","description":"🔄 JiraGitFluence is a command-line tool that aggregates data from Jira and GitHub, generates structured reports, and publishes them to Confluence.","archived":false,"fork":false,"pushed_at":"2025-06-06T08:23:38.000Z","size":78,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-09T23:38:32.825Z","etag":null,"topics":["atlassian","atlassian-confluence","atlassian-jira","confluence","github","jira","kanban","roadmap","sync"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krzko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-31T23:09:38.000Z","updated_at":"2025-05-08T23:39:08.000Z","dependencies_parsed_at":"2025-04-01T00:26:34.981Z","dependency_job_id":"8fd32770-065d-43f3-91b3-666b0902d80f","html_url":"https://github.com/krzko/jiragitfluence","commit_stats":null,"previous_names":["krzko/jiragitfluence"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/krzko/jiragitfluence","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krzko%2Fjiragitfluence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krzko%2Fjiragitfluence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krzko%2Fjiragitfluence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krzko%2Fjiragitfluence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krzko","download_url":"https://codeload.github.com/krzko/jiragitfluence/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krzko%2Fjiragitfluence/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259429694,"owners_count":22856103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atlassian","atlassian-confluence","atlassian-jira","confluence","github","jira","kanban","roadmap","sync"],"created_at":"2025-05-17T14:12:23.558Z","updated_at":"2026-02-27T15:41:54.466Z","avatar_url":"https://github.com/krzko.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JiraGitFluence\n\nJiraGitFluence is a command-line tool that aggregates data from Jira and GitHub, generates structured reports, and publishes them to Confluence. This document provides detailed usage instructions and examples.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Commands](#commands)\n  - [fetch](#fetch)\n  - [generate](#generate)\n  - [publish](#publish)\n- [Use Cases](#use-cases)\n- [Examples](#examples)\n\n## Installation\n\nInstalling `jiragitfluence` is possible via several methods. It can be insatlled via `brew`, an binary downloaded from GitHub [Releases](https://github.com/krzko/jiragitfluence/releases), or running it as a distroless multi-arch docker image.\n\n### brew\n\nInstall [brew](https://brew.sh/) and then run:\n\n```sh\nbrew install krzko/tap/jiragitfluence\n```\n\n### Download Binary\n\nDownload the latest version from the [Releases](https://github.com/krzko/jiragitfluence/releases) page.\n\n### Docker\n\nTo see all the tags view the [Packages](https://github.com/krzko/jiragitfluence/pkgs/container/jiragitfluence) page.\n\nRun the container via the following command:\n\n```sh\ndocker run --rm ghcr.io/krzko/jiragitfluence:latest -h\n```\n\n## Configuration\n\nJiraGitFluence requires configuration for API access to Jira, GitHub, and Confluence. You can configure it using:\n\n1. A YAML configuration file (default: `config.yaml`)\n2. Environment variables\n\n### Configuration File\n\nCreate a `config.yaml` file in the root directory (see `config.example.yaml` for reference):\n\n```yaml\njira:\n  url: \"https://your-company.atlassian.net\"\n  username: \"your-email@example.com\"\n  api_token: \"your-jira-api-token\"\n\ngithub:\n  token: \"your-github-personal-access-token\"\n\nconfluence:\n  url: \"https://your-company.atlassian.net/wiki\"\n  username: \"your-email@example.com\"\n  api_token: \"your-confluence-api-token\"\n```\n\n### Environment Variables\n\nAlternatively, you can use environment variables:\n\n```bash\n# Jira\nexport JIRA_URL=\"https://your-company.atlassian.net\"\nexport JIRA_USERNAME=\"your-email@example.com\"\nexport JIRA_API_TOKEN=\"your-jira-api-token\"\n\n# GitHub\nexport GITHUB_TOKEN=\"your-github-personal-access-token\"\n\n# Confluence\nexport CONFLUENCE_URL=\"https://your-company.atlassian.net/wiki\"\nexport CONFLUENCE_USERNAME=\"your-email@example.com\"\nexport CONFLUENCE_API_TOKEN=\"your-confluence-api-token\"\n```\n\n## Commands\n\nJiraGitFluence operates in three main steps:\n\n1. Retrieve data from Jira and GitHub (using one of the fetch commands)\n2. `generate`: Transform data into a structured format\n3. `publish`: Upload the generated content to Confluence\n\nThe tool provides five main commands:\n\n### fetch\n\nThe `fetch` command retrieves issues from Jira and issues/PRs from GitHub, then saves them to a JSON file.\n\n```\njiragitfluence fetch [options]\n```\n\n#### Options\n\n| Flag | Alias | Description | Required | Default |\n|------|-------|-------------|----------|---------|\n| `--jira-projects` | `-j` | Jira projects to query (e.g., 'Foo', 'Bar') | Yes | - |\n| `--jira-jql` | `-q` | Advanced filtering in Jira using JQL | No | - |\n| `--github-repos` | `-g` | GitHub repositories to scan (e.g., 'foo/qax-infra') | Yes | - |\n| `--github-labels` | `-l` | Only fetch GitHub issues/PRs with these labels (comma-separated for multiple labels) | No | - |\n| `--github-content-filter` | `-f` | Filter GitHub issues/PRs by text content in titles and descriptions | No | - |\n| `--github-creator` | `-u` | Filter GitHub issues/PRs by creator username | No | - |\n| `--output` | `-o` | Path to save the raw aggregated data | No | `aggregated_data.json` |\n| `--config` | `-c` | Path to config file | No | `config.yaml` |\n| `--verbose` | `-v` | Enable verbose logging | No | `false` |\n\n### generate\n\nThe `generate` command transforms the fetched data into a structured format suitable for Confluence. It can read data from either a combined file (created by `fetch`) or separate files (created by `fetch-jira` and `fetch-github`).\n\n```\njiragitfluence generate [options]\n```\n\n#### Examples\n\n```bash\n# Generate from a combined data file\njiragitfluence generate --input \"aggregated_data.json\" --format \"table\"\n\n# Generate from separate Jira and GitHub data files\njiragitfluence generate --jira-input \"jira_data.json\" --github-input \"github_data.json\" --format \"kanban\"\n\n# Generate from Jira data only\njiragitfluence generate --jira-input \"jira_data.json\" --format \"table\"\n\n# Generate from GitHub data only\njiragitfluence generate --github-input \"github_data.json\" --format \"table\"\n```\n\n#### Options\n\n| Flag | Alias | Description | Required | Default |\n|------|-------|-------------|----------|---------|\n| `--input` | `-i` | Input file created by the fetch command (combined data) | No | - |\n| `--jira-input` | `-ji` | Input file created by the fetch-jira command | No | - |\n| `--github-input` | `-gi` | Input file created by the fetch-github command | No | - |\n| `--format` | `-f` | Presentation format (table, kanban, custom) | No | `table` |\n| `--output` | `-o` | Path to save the generated Confluence markup | No | `confluence_output.html` |\n| `--group-by` | `-g` | How to cluster or group issues (status, assignee, label) | No | `status` |\n| `--include-metadata` | `-m` | Include metadata like creation timestamps | No | `false` |\n| `--version-label` | `-v` | Tag to embed in the final content | No | - |\n| `--verbose` | `-v` | Enable verbose logging | No | `false` |\n\n### publish\n\nThe `publish` command uploads the generated content to Confluence.\n\n```\njiragitfluence publish [options]\n```\n\n#### Options\n\n| Flag | Alias | Description | Required | Default |\n|------|-------|-------------|----------|---------|\n| `--space` | `-s` | Confluence space key | Yes | - |\n| `--title` | `-t` | Page title | Yes | - |\n| `--parent` | `-p` | Parent page ID or title | No | - |\n| `--content-file` | `-c` | Generated file from the generate command | Yes | - |\n| `--version-comment` | `-v` | Comment for Confluence's version control | No | - |\n| `--archive-old-versions` | `-a` | Automatically archive older versions | No | `false` |\n| `--config` | `-c` | Path to config file | No | `config.yaml` |\n| `--verbose` | `-v` | Enable verbose logging | No | `false` |\n\n## Use Cases\n\n### 1. Weekly Project Status Report\n\nGenerate a weekly status report for upper management showing all active work across multiple projects and repositories.\n\n```bash\n# Fetch data from multiple Jira projects and GitHub repositories\njiragitfluence fetch \\\n  --jira-projects \"Foo,Bar\" \\\n  --jira-jql \"status != Done AND updated \u003e= -7d\" \\\n  --github-repos \"foo/qax-infra,foo/qax-data\"\" \\\n  --github-labels \"approved,pitch\" \\\n  --github-content-filter \"qax\" \\\n  --output \"weekly_data.json\"\n\n# Generate a table format report grouped by status\njiragitfluence generate \\\n  --input \"weekly_data.json\" \\\n  --format \"table\" \\\n  --group-by \"status\" \\\n  --include-metadata \\\n  --version-label \"Week $(date +%V), $(date +%Y)\" \\\n  --output \"weekly_report.html\"\n\n# Publish to Confluence\njiragitfluence publish \\\n  --space \"PROJ\" \\\n  --title \"Weekly Status Report - $(date +%Y-%m-%d)\" \\\n  --parent \"Team Dashboard\" \\\n  --content-file \"weekly_report.html\" \\\n  --version-comment \"Weekly update $(date +%Y-%m-%d)\"\n```\n\n### 2. Separate Data Collection and Combined Reporting\n\nCollect Jira and GitHub data separately and then combine them for reporting:\n\n```bash\n# Fetch Jira data with specific JQL\njiragitfluence fetch-jira \\\n  --jira-projects \"Foo,Bar\" \\\n  --jira-jql \"status != Done AND updated \u003e= -14d\" \\\n  --output \"jira_sprint_data.json\"\n\n# Fetch GitHub data with specific filters\njiragitfluence fetch-github \\\n  --github-repos \"foo/qax-infra,foo/qax-data\"\" \\\n  --github-labels \"enhancement,bug\" \\\n  --github-creator \"krzko\" \\\n  --github-content-filter \"api\" \\\n  --output \"github_api_issues.json\"\n\n# Generate a combined report from both data sources\njiragitfluence generate \\\n  --jira-input \"jira_sprint_data.json\" \\\n  --github-input \"github_api_issues.json\" \\\n  --format \"kanban\" \\\n  --group-by \"status\" \\\n  --include-metadata \\\n  --version-label \"Sprint Report $(date +%Y-%m-%d)\" \\\n  --output \"combined_sprint_report.html\"\n\n# Publish to Confluence\njiragitfluence publish \\\n  --space \"TEAM\" \\\n  --title \"Combined Sprint Report - $(date +%Y-%m-%d)\" \\\n  --parent \"Sprint Dashboard\" \\\n  --content-file \"combined_sprint_report.html\" \\\n  --version-comment \"Sprint update with API focus\"\n```\n\nThis approach allows you to collect data with different filters and criteria, then combine them into a single report.\n\n### 3. Team Sprint Board\n\nCreate a Kanban-style board showing the current sprint's work for a specific team.\n\n```bash\n# Fetch data for a specific team's sprint\njiragitfluence fetch \\\n  --jira-projects \"Bar\" \\\n  --jira-jql \"sprint in openSprints() AND team = 'Platform'\" \\\n  --github-repos \"foo/qax-platform\" \\\n  --output \"sprint_data.json\"\n\n# Generate a kanban format report\njiragitfluence generate \\\n  --input \"sprint_data.json\" \\\n  --format \"kanban\" \\\n  --group-by \"assignee\" \\\n  --output \"sprint_board.html\"\n\n# Publish to Confluence\njiragitfluence publish \\\n  --space \"TEAM\" \\\n  --title \"Platform Team - Current Sprint\" \\\n  --content-file \"sprint_board.html\" \\\n  --archive-old-versions\n```\n\n### 3. Release Notes\n\nGenerate release notes for a specific version by aggregating all completed work.\n\n```bash\n# Fetch data for a specific version\njiragitfluence fetch \\\n  --jira-projects \"Foo\" \\\n  --jira-jql \"fixVersion = '2.1.0' AND status = Done\" \\\n  --github-repos \"foo/qax-service\" \\\n  --github-labels \"release/2.1.0\" \\\n  --output \"release_data.json\"\n\n# Generate a custom format report\njiragitfluence generate \\\n  --input \"release_data.json\" \\\n  --format \"custom\" \\\n  --output \"release_notes.html\"\n\n# Publish to Confluence\njiragitfluence publish \\\n  --space \"DOCS\" \\\n  --title \"Release Notes v2.1.0\" \\\n  --parent \"Product Documentation\" \\\n  --content-file \"release_notes.html\" \\\n  --version-comment \"Initial release notes for v2.1.0\"\n```\n\n## Examples\n\n### Multiple GitHub Labels\n\nYou can specify multiple GitHub labels in several ways:\n\n```bash\n# Method 1: Comma-separated in a single flag\njiragitfluence fetch \\\n  --jira-projects \"AR\" \\\n  --github-repos \"foo/qax\" \\\n  --github-labels \"approved,pitch,bug\" \\\n  --output \"filtered_data.json\"\n\n# Method 2: Multiple flag instances\njiragitfluence fetch \\\n  --jira-projects \"AR\" \\\n  --github-repos \"foo/qax\" \\\n  --github-labels \"approved\" --github-labels \"pitch\" --github-labels \"bug\" \\\n  --output \"filtered_data.json\"\n\n# Method 3: Using the short alias\njiragitfluence fetch \\\n  -j \"AR\" \\\n  -g \"foo/qax\" \\\n  -l \"approved\" -l \"pitch\" -l \"bug\" \\\n  -o \"filtered_data.json\"\n```\n\n### Content Filtering\n\nYou can filter GitHub issues and pull requests by their content (title, body):\n\n```bash\n# Find all issues related to security\njiragitfluence fetch \\\n  --jira-projects \"AR\" \\\n  --github-repos \"foo/qax\" \\\n  --github-content-filter \"security\" \\\n  --output \"security_issues.json\"\n\n# Combine content filtering with labels\njiragitfluence fetch \\\n  --jira-projects \"AR\" \\\n  --github-repos \"foo/qax\" \\\n  --github-labels \"bug\" \\\n  --github-content-filter \"qax\" \\\n  --output \"qax_bugs.json\"\n\n# Using the short alias for content filtering\njiragitfluence fetch \\\n  -j \"AR\" \\\n  -g \"foo/qax\" \\\n  -f \"performance\" \\\n  -o \"performance_issues.json\"\n\n# Advanced filtering with multiple labels and content filter\njiragitfluence fetch \\\n  --jira-projects \"AR,Foo\" \\\n  --github-repos \"foo/qax,foo/qax-infra\" \\\n  --github-labels \"enhancement,feature\" \\\n  --github-content-filter \"api\" \\\n  --output \"api_features.json\"\n```\n\nThe content filter performs a case-insensitive search in both the title and body of issues and pull requests. This gives you more flexibility in finding relevant GitHub issues beyond just label filtering.\n\n### Creator Filtering\n\nYou can filter GitHub issues and pull requests by their creator (the user who opened them):\n\n```bash\n# Find all issues created by a specific user\njiragitfluence fetch \\\n  --jira-projects \"AR\" \\\n  --github-repos \"foo/qax\" \\\n  --github-creator \"krzko\" \\\n  --output \"foo_issues.json\"\n\n# Combine creator filtering with labels and content\njiragitfluence fetch \\\n  --jira-projects \"AR\" \\\n  --github-repos \"foo/qax\" \\\n  --github-labels \"enhancement\" \\\n  --github-creator \"krzko\" \\\n  --github-content-filter \"api\" \\\n  --output \"krzko_api_enhancements.json\"\n\n# Using the short alias for creator filtering\njiragitfluence fetch \\\n  -j \"AR\" \\\n  -g \"foo/qax\" \\\n  -u \"krzko\" \\\n  -o \"foo_issues.json\"\n```\n\nThe creator filter uses the GitHub username exactly as it appears on GitHub. This is useful for finding all issues or pull requests created by specific team members.\n\n### fetch-jira\n\nThe `fetch-jira` command retrieves issues from Jira only, then saves them to a JSON file.\n\n```\njiragitfluence fetch-jira [options]\n```\n\n#### Options\n\n| Flag | Alias | Description | Required | Default |\n|------|-------|-------------|----------|----------|\n| `--jira-projects` | `-j` | Jira projects to query (e.g., 'Foo', 'Bar') | Yes | - |\n| `--jira-jql` | `-q` | Advanced filtering in Jira using JQL | No | - |\n| `--output` | `-o` | Path to save the raw aggregated data | No | `jira_data.json` |\n| `--config` | `-c` | Path to config file | No | `config.yaml` |\n| `--verbose` | `-v` | Enable verbose logging | No | `false` |\n\n### fetch-github\n\nThe `fetch-github` command retrieves issues and PRs from GitHub only, then saves them to a JSON file.\n\n```\njiragitfluence fetch-github [options]\n```\n\n#### Options\n\n| Flag | Alias | Description | Required | Default |\n|------|-------|-------------|----------|----------|\n| `--github-repos` | `-g` | GitHub repositories to scan (e.g., 'foo/qax-infra') | Yes | - |\n| `--github-labels` | `-l` | Only fetch GitHub issues/PRs with these labels (comma-separated for multiple labels) | No | - |\n| `--github-content-filter` | `-f` | Filter GitHub issues/PRs by text content in titles and descriptions | No | - |\n| `--github-creator` | `-u` | Filter GitHub issues/PRs by creator username | No | - |\n| `--output` | `-o` | Path to save the raw aggregated data | No | `github_data.json` |\n| `--config` | `-c` | Path to config file | No | `config.yaml` |\n| `--verbose` | `-v` | Enable verbose logging | No | `false` |\n\n### Basic Workflow\n\nThe most common workflow follows these steps:\n\n```bash\n# Step 1: Fetch data (choose one of the following approaches)\n\n# Option A: Combined fetch from both Jira and GitHub\njiragitfluence fetch --jira-projects \"Project1\" --github-repos \"org/repo1\"\n\n# Option B: Fetch from Jira only\njiragitfluence fetch-jira --jira-projects \"Project1\"\n\n# Option C: Fetch from GitHub only\njiragitfluence fetch-github --github-repos \"org/repo1\"\n\n# Step 2: Generate report (choose one of the following approaches)\n\n# Option A: Using combined data from fetch command\njiragitfluence generate --input \"aggregated_data.json\" --format \"table\"\n\n# Option B: Using separate data files from fetch-jira and fetch-github commands\njiragitfluence generate --jira-input \"jira_data.json\" --github-input \"github_data.json\" --format \"table\"\n\n# Option C: Generate a roadmap view\njiragitfluence generate --input \"aggregated_data.json\" --format \"roadmap\" --roadmap-view \"epicgantt\" --roadmap-timeframe \"6months\" --output \"roadmap_output.html\"\n\n# Step 3: Publish to Confluence\njiragitfluence publish --space \"TEAM\" --title \"Status Report\" --content-file \"confluence_output.html\"\n```\n\n### Roadmap Format\n\nThe roadmap format provides a visual representation of your project timeline, allowing you to see upcoming work organized in different ways. It's particularly useful for planning and tracking progress across multiple issues and epics.\n\n```bash\n# Generate a timeline roadmap view\njiragitfluence generate \\\n  --input \"weekly_data.json\" \\\n  --format \"roadmap\" \\\n  --roadmap-view \"timeline\" \\\n  --roadmap-timeframe \"6months\" \\\n  --output \"roadmap_output.html\"\n\n# Generate an epic-based Gantt roadmap view\njiragitfluence generate \\\n  --input \"weekly_data.json\" \\\n  --format \"roadmap\" \\\n  --roadmap-view \"epicgantt\" \\\n  --roadmap-timeframe \"Q1-Q4 2025\" \\\n  --roadmap-include-dependencies \\\n  --output \"roadmap_output.html\"\n\n# Generate a strategic roadmap view grouped by theme\njiragitfluence generate \\\n  --input \"weekly_data.json\" \\\n  --format \"roadmap\" \\\n  --roadmap-view \"strategic\" \\\n  --roadmap-grouping \"theme\" \\\n  --output \"roadmap_output.html\"\n```\n\n#### Roadmap Options\n\n| Flag | Description | Default | Example Values |\n|------|-------------|---------|----------------|\n| `--roadmap-timeframe` | Timeframe for roadmap | `6months` | `Q1-Q4 2025`, `6months`, `1year` |\n| `--roadmap-grouping` | How to group items | `theme` | `epic`, `theme`, `team`, `quarter` |\n| `--roadmap-view` | Type of roadmap view | `timeline` | `timeline`, `strategic`, `release`, `epicgantt` |\n| `--roadmap-include-dependencies` | Show dependencies between items | `false` | - |\n\n#### Roadmap View Types\n\n- **timeline**: Shows issues along a timeline with quarters or months\n- **strategic**: Higher-level view focused on themes and initiatives\n- **release**: Organizes items by planned release versions\n- **epicgantt**: Gantt-style view organized by epics, showing issues in swimlanes\n\n### Using Make Targets\n\nThe project includes make targets for convenience:\n\n```bash\n# Run fetch command\nmake fetch\n\n# Run generate command\nmake generate\n\n# Run publish command\nmake publish\n```\n\nFor development with hot-reload:\n\n```bash\n# Run with hot-reload using air\nmake dev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrzko%2Fjiragitfluence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrzko%2Fjiragitfluence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrzko%2Fjiragitfluence/lists"}