{"id":28687551,"url":"https://github.com/hashmap-kz/relimpact","last_synced_at":"2026-04-06T09:03:13.703Z","repository":{"id":297967886,"uuid":"998440260","full_name":"hashmap-kz/relimpact","owner":"hashmap-kz","description":"Release Impact Analyzer for Go projects - make every pull request review easy with automated changelogs for APIs, docs \u0026 files.","archived":false,"fork":false,"pushed_at":"2025-09-15T08:40:17.000Z","size":146,"stargazers_count":8,"open_issues_count":12,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-15T10:31:18.910Z","etag":null,"topics":["changelog","ci","devops","go","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hashmap-kz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-08T16:03:19.000Z","updated_at":"2025-09-15T08:40:13.000Z","dependencies_parsed_at":"2025-06-08T17:20:48.336Z","dependency_job_id":"c1934b4e-3948-46c5-bb01-4cbf979935a3","html_url":"https://github.com/hashmap-kz/relimpact","commit_stats":null,"previous_names":["hashmap-kz/relimpact"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/hashmap-kz/relimpact","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hashmap-kz%2Frelimpact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hashmap-kz%2Frelimpact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hashmap-kz%2Frelimpact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hashmap-kz%2Frelimpact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hashmap-kz","download_url":"https://codeload.github.com/hashmap-kz/relimpact/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hashmap-kz%2Frelimpact/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279177059,"owners_count":26119875,"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","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["changelog","ci","devops","go","golang"],"created_at":"2025-06-14T04:10:45.585Z","updated_at":"2026-04-06T09:03:13.695Z","avatar_url":"https://github.com/hashmap-kz.png","language":"Go","readme":"# relimpact\n\n**Release Impact Analyzer for Go projects - catch breaking API changes, docs updates \u0026 important file diffs - fast.**\n\n[![License](https://img.shields.io/github/license/hashmap-kz/relimpact)](https://github.com/hashmap-kz/relimpact/blob/master/LICENSE)\n[![Go Report Card](https://goreportcard.com/badge/github.com/hashmap-kz/relimpact)](https://goreportcard.com/report/github.com/hashmap-kz/relimpact)\n[![Go Reference](https://pkg.go.dev/badge/github.com/hashmap-kz/relimpact.svg)](https://pkg.go.dev/github.com/hashmap-kz/relimpact)\n[![Workflow Status](https://img.shields.io/github/actions/workflow/status/hashmap-kz/relimpact/ci.yml?branch=master)](https://github.com/hashmap-kz/relimpact/actions/workflows/ci.yml?query=branch:master)\n[![codecov](https://codecov.io/gh/hashmap-kz/relimpact/branch/master/graph/badge.svg)](https://codecov.io/gh/hashmap-kz/relimpact)\n[![GitHub Issues](https://img.shields.io/github/issues/hashmap-kz/relimpact)](https://github.com/hashmap-kz/relimpact/issues)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/hashmap-kz/relimpact)](https://github.com/hashmap-kz/relimpact/blob/master/go.mod#L3)\n[![Latest Release](https://img.shields.io/github/v/release/hashmap-kz/relimpact)](https://github.com/hashmap-kz/relimpact/releases/latest)\n\n\u003c!-- omit in toc --\u003e\n## Table of Contents\n\n\u003c!-- TOC tocDepth:2..3 chapterDepth:2..6 --\u003e\n\n- [relimpact](#relimpact)\n  - [Features](#features)\n  - [Quickstart](#quickstart)\n    - [Run on a GitHub PR](#run-on-a-github-pr)\n    - [Example Output](#example-output)\n  - [GitHub Action](#github-action)\n  - [Installation](#installation)\n    - [Manual Installation](#manual-installation)\n    - [Installation script for Unix-Based OS _(requires: tar, curl, jq)_](#installation-script-for-unix-based-os-requires-tar-curl-jq)\n    - [Homebrew installation](#homebrew-installation)\n    - [Package-Based installation (suitable in CI/CD)](#package-based-installation-suitable-in-cicd)\n      - [Debian](#debian)\n      - [Alpine Linux](#alpine-linux)\n  - [Design Notes](#design-notes)\n    - [1. Go Source API Changes](#1-go-source-api-changes)\n    - [2. Markdown Docs Changes](#2-markdown-docs-changes)\n    - [3. Other Files Changes](#3-other-files-changes)\n  - [License](#license)\n\n\u003c!-- /TOC --\u003e\n\n---\n\n## Features\n\n- **API Diff** – Track breaking public API changes (structs, interfaces, functions, constants, variables) to prevent\n  surprises for your users.\n- **Docs Diff** – Section-aware, heading-aware Markdown diff to highlight meaningful content changes, not noisy line\n  diffs.\n- **Other Files Diff** – Group file changes by extension (.sh, .sql, .json, etc.) to surface important migrations,\n  scripts, and auxiliary file updates.\n- **Designed for Release PR reviews** – Helps reviewers quickly see the real impact of changes at a glance.\n- **Human-friendly Markdown Reports** – Ready to paste into GitHub Releases, Slack, or changelogs.\n- **Works in GitHub Actions, GitLab CI, or locally** – Integrates easily into your CI pipelines or local release\n  process.\n- **No server required** – Pure CLI tool. No services to deploy or manage - works entirely from your Git repo and\n  terminal.\n\n---\n\n## Quickstart\n\n**[`^        back to top        ^`](#table-of-contents)**\n\n### Run on a GitHub PR\n\n```bash\nrelimpact --old=v1.0.0 --new=HEAD \u003e release-impact.md\n```\n\n### Example Output\n\n![Basic Changelog](https://github.com/hashmap-kz/assets/blob/main/relimpact/examples/basic-changelog.png)\n\n**Expanded sections**\n\n![Expanded Changelog](https://github.com/hashmap-kz/assets/blob/main/relimpact/examples/basic-changelog-expanded.png)\n\n**PR Comment Generated**\n\n![PR Comment](https://github.com/hashmap-kz/assets/blob/main/relimpact/examples/pr-comment.png)\n\n--- \n\n## GitHub Action\n\n**[`^        back to top        ^`](#table-of-contents)**\n\n```yaml\nname: Release Impact on PR\n\non:\n  pull_request:\n    branches: [ master ]\n    types: [ opened, synchronize, reopened ]\n\njobs:\n  release-impact:\n    name: Generate Release Impact Report\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - name: Determine previous tag\n        id: prevtag\n        run: |\n          git fetch --tags\n          TAG_LIST=$(git tag --sort=-version:refname)\n          PREV_TAG=$(echo \"$TAG_LIST\" | head -n2 | tail -n1)\n          echo \"Previous tag: $PREV_TAG\"\n          # Fallback to first tag if no previous\n          if [ -z \"$PREV_TAG\" ]; then\n            PREV_TAG=$(echo \"$TAG_LIST\" | head -n1)\n            echo \"Fallback to first tag: $PREV_TAG\"\n          fi\n          echo \"prev_tag=$PREV_TAG\" \u003e\u003e $GITHUB_OUTPUT\n\n      - name: Determine new ref\n        id: newref\n        run: |\n          if [ \"${{ github.event_name }}\" = \"pull_request\" ]; then\n            echo \"new_ref=${{ github.event.pull_request.head.sha }}\" \u003e\u003e $GITHUB_OUTPUT\n          else\n            echo \"new_ref=HEAD\" \u003e\u003e $GITHUB_OUTPUT\n          fi\n\n      # Cache restore for old ref\n      - name: Cache API snapshot (old ref)\n        uses: actions/cache/restore@v4\n        id: cache-old\n        with:\n          path: .cache/relimpact-api-cache\n          key: relimpact-api-${{ steps.prevtag.outputs.prev_tag }}\n          restore-keys: |\n            relimpact-api-\n\n      # Cache restore for new ref\n      - name: Cache API snapshot (new ref)\n        uses: actions/cache/restore@v4\n        id: cache-new\n        with:\n          path: .cache/relimpact-api-cache\n          key: relimpact-api-${{ steps.newref.outputs.new_ref }}\n          restore-keys: |\n            relimpact-api-\n\n      # Run your relimpact-action (this runs SnapshotAPI and writes cache)\n      - uses: hashmap-kz/relimpact-action@main\n        with:\n          old-ref: ${{ steps.prevtag.outputs.prev_tag }}\n          new-ref: ${{ steps.newref.outputs.new_ref }}\n          output: release-impact.md\n        env:\n          RELIMPACT_API_CACHE_DIR: ${{ github.workspace }}/.cache/relimpact-api-cache\n\n      # Cache save for old ref — only if not already restored\n      - name: Save API snapshot cache (old ref)\n        if: steps.cache-old.outputs.cache-hit != 'true'\n        uses: actions/cache/save@v4\n        with:\n          path: .cache/relimpact-api-cache\n          key: relimpact-api-${{ steps.prevtag.outputs.prev_tag }}\n\n      # Cache save for new ref — only if not already restored\n      - name: Save API snapshot cache (new ref)\n        if: steps.cache-new.outputs.cache-hit != 'true'\n        uses: actions/cache/save@v4\n        with:\n          path: .cache/relimpact-api-cache\n          key: relimpact-api-${{ steps.newref.outputs.new_ref }}\n\n      # Upload the release impact report\n      - name: Upload Release Impact Report\n        uses: actions/upload-artifact@v4\n        with:\n          name: release-impact-${{ github.run_id }}-${{ github.run_attempt }}\n          path: release-impact.md\n\n      # Post release impact to PR comment\n      - name: Post Release Impact to PR\n        if: github.event_name == 'pull_request'\n        uses: marocchino/sticky-pull-request-comment@v2\n        with:\n          recreate: true\n          path: release-impact.md\n```\n\n---\n\n## Installation\n\n**[`^        back to top        ^`](#table-of-contents)**\n\n### Manual Installation\n\n1. Download the latest binary for your platform from\n   the [Releases page](https://github.com/hashmap-kz/relimpact/releases).\n2. Place the binary in your system's `PATH` (e.g., `/usr/local/bin`).\n\n### Installation script for Unix-Based OS _(requires: tar, curl, jq)_\n\n```bash\n(\nset -euo pipefail\n\nOS=\"$(uname | tr '[:upper:]' '[:lower:]')\"\nARCH=\"$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')\"\nTAG=\"$(curl -s https://api.github.com/repos/hashmap-kz/relimpact/releases/latest | jq -r .tag_name)\"\n\ncurl -L \"https://github.com/hashmap-kz/relimpact/releases/download/${TAG}/relimpact_${TAG}_${OS}_${ARCH}.tar.gz\" |\ntar -xzf - -C /usr/local/bin \u0026\u0026 \\\nchmod +x /usr/local/bin/relimpact\n)\n```\n\n### Homebrew installation\n\n```bash\nbrew tap hashmap-kz/homebrew-tap\nbrew install relimpact\n```\n\n### Package-Based installation (suitable in CI/CD)\n\n#### Debian\n\n```bash\nsudo apt update -y \u0026\u0026 sudo apt install -y curl\ncurl -LO https://github.com/hashmap-kz/relimpact/releases/latest/download/relimpact_linux_amd64.deb\nsudo dpkg -i relimpact_linux_amd64.deb\n```\n\n#### Alpine Linux\n\n```bash\napk update \u0026\u0026 apk add --no-cache bash curl\ncurl -LO https://github.com/hashmap-kz/relimpact/releases/latest/download/relimpact_linux_amd64.apk\napk add relimpact_linux_amd64.apk --allow-untrusted\n```\n\n---\n\n## Design Notes\n\n**[`^        back to top        ^`](#table-of-contents)**\n\n`relimpact` helps you understand **what really changed** between Git refs, in a way that is:\n\n\u003e **Human-friendly** / **Structured** / **Noise-free** / **Release-ready**\n\n### 1. Go Source API Changes\n\n- Tracks changes to your **public exported API**:\n    - `struct` fields\n    - `interfaces` and their methods\n    - `functions`\n    - `methods`\n    - `constants`\n    - `variables`\n\n- Built on top of **Go type system and AST parsing**:\n    - Uses `golang.org/x/tools/go/packages` to understand the real API, not just text diffs.\n    - **Ignores formatting changes**, reordering, comments -\u003e only tracks semantic API impact.\n    - Detects **breaking changes**, such as:\n        - method signature changes\n        - removed fields\n        - removed types\n        - changed constants\n        - new API elements.\n\n### 2. Markdown Docs Changes\n\n- Tracks changes in **Markdown files**:\n    - any `.md` in your repo.\n\n- Uses **Markdown AST parsing**:\n    - Based on `goldmark` parser.\n    - Understands:\n        - Headings (added / removed)\n        - Links (added / removed)\n        - Images (added / removed)\n        - **Section-level word count diffs** -\u003e detect real content changes -\u003e not noisy line diffs.\n\n- Provides a **highly readable report**:\n    - No messy raw `git diff` output.\n    - Clear \"Section X: 142 -\u003e 155 words\" style diffs.\n    - Great for docs-heavy projects and libraries.\n\n### 3. Other Files Changes\n\n- Tracks other file changes, grouped by extension:\n    - `.sh`, `.sql`, `.json`, `.yaml`, `.conf`, `.ini`, `.txt`, etc.\n\n- Built on top of **Git diff**:\n    - Uses `git diff --name-status` under the hood.\n    - Groups files per extension -\u003e clean, easy to review.\n\n---\n\n## License\n\nMIT License. See [LICENSE](./LICENSE) for details.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhashmap-kz%2Frelimpact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhashmap-kz%2Frelimpact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhashmap-kz%2Frelimpact/lists"}