{"id":47902828,"url":"https://github.com/tempoxyz/changelogs","last_synced_at":"2026-04-04T04:17:45.106Z","repository":{"id":334992987,"uuid":"1141722002","full_name":"tempoxyz/changelogs","owner":"tempoxyz","description":"Universal Changelogs","archived":false,"fork":false,"pushed_at":"2026-03-12T14:19:05.000Z","size":78853,"stargazers_count":8,"open_issues_count":8,"forks_count":5,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-12T20:35:50.699Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://changelogs.sh","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tempoxyz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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},"funding":{"github":["wevm"],"custom":["drips.network/wevm.eth"]}},"created_at":"2026-01-25T10:07:25.000Z","updated_at":"2026-03-04T23:26:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tempoxyz/changelogs","commit_stats":null,"previous_names":["wevm/changelogs-rs","wevm/changelogs","tempoxyz/changelogs"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/tempoxyz/changelogs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fchangelogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fchangelogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fchangelogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fchangelogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tempoxyz","download_url":"https://codeload.github.com/tempoxyz/changelogs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tempoxyz%2Fchangelogs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31387476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T01:22:39.193Z","status":"online","status_checked_at":"2026-04-04T02:00:07.569Z","response_time":60,"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":[],"created_at":"2026-04-04T04:17:44.413Z","updated_at":"2026-04-04T04:17:45.098Z","avatar_url":"https://github.com/tempoxyz.png","language":"Rust","funding_links":["https://github.com/sponsors/wevm","drips.network/wevm.eth"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\".github/banner-dark.svg\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\".github/banner-light.svg\"\u003e\n    \u003cimg alt=\"changelogs\" src=\".github/banner-light.svg\" width=\"100%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Changelog management for Rust, Python, and TypeScript¹ workspaces.\n  \u003cbr\u003e\n  \u003csub\u003e¹ TypeScript support is coming soon.\u003c/sub\u003e\n\u003c/p\u003e\n\n## Quick Start\n\n```bash\n# Install changelogs\ncurl -sSL changelogs.sh | sh\n\n# Initialize changelogs in your workspace\nchangelogs init\n\n# Add a changelog for your changes\nchangelogs add\n\n# See what would be released\nchangelogs status\n\n# Apply version bumps and generate changelogs\nchangelogs version\n```\n\n## Workflows\n\n```mermaid\nflowchart LR\n    subgraph Development\n        A[Make Changes] --\u003e B[Open PR]\n        B --\u003e C{Bot comments\u003cbr/\u003ewith changelog link}\n        C --\u003e D[Add changelog]\n        D --\u003e E[Merge PR]\n    end\n    subgraph Release\n        E --\u003e F[/RC PR created/]\n        F --\u003e G[Merge RC PR]\n        G --\u003e H[/📦 Packages released/]\n    end\n```\n\n### Development\n\n| # | Step | Description |\n|:-:|:-----|:------------|\n| 1 | Make changes \u0026 open PR | Implement your feature or fix |\n| 2 | Bot comments on PR | Links to add/edit changelog (AI pre-fills if enabled) |\n| 3 | Add changelog \u0026 merge | Changelog gets staged in `.changelog/` |\n\n### Release\n\n| # | Step | Description |\n|:-:|:-----|:------------|\n| 1 | Push to main | Triggers release workflow |\n| 2 | RC PR created | Version bumps and changelog updates |\n| 3 | Merge RC PR | Packages published, GitHub releases created |\n\n## Installation\n\n### Pre-built binaries (recommended)\n\n```bash\ncurl -sSL https://changelogs.sh | sh\n```\n\nOr download directly from [GitHub Releases](https://github.com/wevm/changelogs/releases):\n\n| Platform | Download |\n|----------|----------|\n| Linux (x86_64) | [changelogs-linux-amd64](https://github.com/wevm/changelogs/releases/latest/download/changelogs-linux-amd64) |\n| macOS (Intel) | [changelogs-darwin-amd64](https://github.com/wevm/changelogs/releases/latest/download/changelogs-darwin-amd64) |\n| macOS (Apple Silicon) | [changelogs-darwin-arm64](https://github.com/wevm/changelogs/releases/latest/download/changelogs-darwin-arm64) |\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `init` | Initialize `.changelog/` directory |\n| `add` | Create a new changelog interactively |\n| `add --ai \"\u003ccommand\u003e\"` | Generate changelog using AI (see [Supported AI Providers](#supported-ai-providers)) |\n| `status` | Show pending changelogs and releases |\n| `version` | Apply version bumps and update changelogs |\n| `publish` | Publish unpublished packages to crates.io |\n\n## Configuration\n\n`.changelog/config.toml`:\n\n```toml\n# How to bump packages that depend on changed packages\ndependent_bump = \"patch\"  # patch, minor, or none\n\n[changelog]\nformat = \"per-crate\"  # or \"root\"\n\n# Fixed groups: all always share the same version\n[[fixed]]\nmembers = [\"crate-a\", \"crate-b\"]\n\n# Linked groups: versions sync when released together  \n[[linked]]\nmembers = [\"sdk-core\", \"sdk-macros\"]\n\n# Packages to ignore\nignore = []\n```\n\n## Changelog Format\n\n`.changelog/brave-lions-dance.md`:\n\n```markdown\n---\nmy-crate: minor\nother-crate: patch\n---\n\nAdded new feature X that does Y.\n\nFixed bug Z in the parser.\n```\n\n## Supported AI Providers\n\nThe `--ai` flag and GitHub Action `ai` input accept any CLI command that reads from stdin and outputs text. The diff is piped to the command, and the output becomes the changelog entry.\n\n| Provider | Command | Required Secret | Install |\n|----------|---------|-----------------|---------|\n| Amp | `amp -x` | `AMP_API_KEY` | `npm install -g @sourcegraph/amp` |\n| Claude Code | `claude -p` | `ANTHROPIC_API_KEY` | `npm install -g @anthropic-ai/claude-code` |\n| OpenAI | `openai api chat.completions.create -m gpt-4o` | `OPENAI_API_KEY` | `pip install openai` |\n| Gemini | `gemini` | `GOOGLE_API_KEY` | `npm install -g @anthropic-ai/gemini-cli` |\n\n\n### Examples\n\n```bash\n# Using Amp\nchangelogs add --ai \"amp -x\"\n\n# Using Claude\nchangelogs add --ai \"claude -p\"\n\n```\n\n## GitHub Actions\n\n### Check Changelogs on PRs\n\nComments on PRs with changelog status. If no changelog exists and `ai` is provided, generates one and pre-fills the \"Add changelog\" link.\n\n```yaml\nname: Changelog\n\non:\n  pull_request:\n    types: [opened, synchronize]\n\njobs:\n  changelog:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - uses: actions/checkout@v4\n\n      - run: npm install -g @sourcegraph/amp\n\n      - uses: wevm/changelogs/check@master\n        with:\n          ai: 'amp -x'\n        env:\n          AMP_API_KEY: ${{ secrets.AMP_API_KEY }}\n```\n\n### Create RC PR or Release\n\nCreates a release candidate PR when changelogs exist, or publishes packages when the RC PR is merged.\n\n```yaml\nname: Release\n\non:\n  push:\n    branches: [main]\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: wevm/changelogs@master\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**The release action automatically handles both versioning and publishing:**\n\n1. **If changelogs exist** → Creates/updates a \"Version Packages\" PR\n2. **If no changelogs** (PR was just merged) → Publishes unpublished packages to crates.io\n\n### Action Inputs\n\n| Input | Description | Default |\n|-------|-------------|---------|\n| `branch` | Branch name for the version PR | `changelog-release/main` |\n| `commit` | Commit message for version bump | `Version Packages` |\n| `conventional-commit` | Use conventional commit format | `false` |\n| `crate-token` | Crates.io API token for publishing (Rust) | - |\n| `pypi-token` | PyPI API token for publishing (Python) | - |\n\n### Action Outputs\n\n| Output | Description |\n|--------|-------------|\n| `hasChangelogs` | Whether there are pending changelogs |\n| `pullRequestNumber` | The PR number if created/updated |\n| `published` | Whether packages were published |\n| `publishedPackages` | JSON array of published packages |\n\n## Ecosystem Notes\n\n### Python\n\nChangelogs supports Python packages using PEP 621 `pyproject.toml` files.\n\n**Requirements:**\n- `pyproject.toml` with `[project]` section containing `name` and `version`\n- Static version (dynamic versions not supported)\n- Semantic versioning (no PEP 440 epochs or local versions)\n- `python -m build` and `twine` installed (`pip install build twine`)\n\n**Limitations:**\n- Single-package repos only (no Python monorepo support)\n- PEP 621 only (no `setup.py` or `setup.cfg`)\n\n## License\n\nMIT OR Apache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftempoxyz%2Fchangelogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftempoxyz%2Fchangelogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftempoxyz%2Fchangelogs/lists"}