# sampo-core

## 0.13.2 — 2026-04-10

### Patch changes

- [40c7c6d](https://github.com/bruits/sampo/commit/40c7c6decfcd39a1dc7c37681ca54785d385a048) In Cargo projects, fixed valid dev-dependency cycles incorrectly being rejected as dependency cycles during release. — Thanks @Princesseuh!
- [c00b72b](https://github.com/bruits/sampo/commit/c00b72bb0b13e24ec264e9df78f9e62e3ac9bd4e) Fixed incorrect stable version computation when stabilizing a prerelease package (e.g. `0.2.7-alpha.6` + patch now correctly produces `0.2.7` instead of `0.2.8`). Fixed the stabilize PR not being created after merging a prerelease PR. — Thanks @rickmartensnl!

## 0.13.1 — 2026-04-02

### Patch changes

- [9f69d99](https://github.com/bruits/sampo/commit/9f69d99ae79d9cf5769941cc1211a860ca8a1c27) Fixed prerelease versioning to advance the base version before incrementing prerelease counters, and to only preserve prerelease-targeted changesets. — Thanks @rickmartensnl!
- [3819bb4](https://github.com/bruits/sampo/commit/3819bb44c0d29e5d431815d04d656e95fbc85057) In Cargo (Rust) projects, fixed a bug overwriting `version.workspace = true` in member crates. Sampo now preserves workspace version inheritance, and updates the root manifest's `[workspace.package].version` and `[workspace.dependencies]` correctly. — Thanks @goulvenclech!

## 0.13.0 — 2026-03-05

### Minor changes

- [6678ecd](https://github.com/bruits/sampo/commit/6678ecd70695bc4e16417719c3628ad457b758a3) Added ecosystem-specific `--*-args` inputs to the CLI and `*-args` inputs to the GitHub Action (e.g. `--cargo-args` or `npm-args`), allowing users to forward extra arguments to specific package managers. The existing `-- <args>` syntax continues to forward arguments to all ecosystems. — Thanks @goulvenclech!

### Patch changes

- [c8b2389](https://github.com/bruits/sampo/commit/c8b2389e7d55da858d11218cbed942a96806ba92) Fixed an endless loop where the release PR would be continuously reopened for projects using prerelease versions. — Thanks @rickmartensnl!
- [e16b737](https://github.com/bruits/sampo/commit/e16b737412f4159d11b22c5836eba394a4f12f5a) Added `--bump` / `-b` and `--tag` / `-t` flags to `sampo add`, enabling fully non-interactive changeset creation when combined with `--package` and `--message`:
  
  ```sh
  sampo add -p my-crate -b minor -t Added -m "Added foo support"
  ```
   — Thanks @goulvenclech!
- [edabdac](https://github.com/bruits/sampo/commit/edabdac14bc4ee464f51a2d83f3140e21d525365) Fixed publish command failing on Windows when package managers (npm, pnpm, yarn, composer, mix) are installed as .cmd/.bat scripts. — Thanks @goulvenclech!

## 0.12.0 — 2026-01-31

### Minor changes

- [b33b71c](https://github.com/bruits/sampo/commit/b33b71ce0b9fe8962774b80320eea517b066f621) In Elixir (Hex) projects, added support for `@version` module attribute definitions in `mix.exs`. — Thanks @rafaeelaudibert!
- [19e112a](https://github.com/bruits/sampo/commit/19e112ae1d0e33b6f330bd227716280bb8994dd7) **PHP packages are now supported!** Sampo now automatically detects PHP packages managed by `composer.json` (for Packagist), and handles versioning and changelogs. Publishing works via Git tags rather than registry upload. — Thanks @rafaeelaudibert!
- [4655864](https://github.com/bruits/sampo/commit/465586474fc8f487ab9ff470ca06bc6e1bbd2b44) Added `git.short_tags` configuration option to create short version tags (`vX.Y.Z`) for a single package. In PHP (Packagist) projects, this enables Composer-compatible releases, with the limitation of not supporting monorepos with multiple publishable PHP packages. — Thanks @goulvenclech!

### Patch changes

- [aa52383](https://github.com/bruits/sampo/commit/aa523834cec193268b773e6f2c4847f2d72d2039) In Rust (Cargo) projects, fixed version detection for packages using `version.workspace = true`. — Thanks @goulvenclech!
- [f2b24a1](https://github.com/bruits/sampo/commit/f2b24a17c8241ebc78772e69d76c8922ad474c91) Improved error consistency by unifying missing-manifest errors across all ecosystem adapters. — Thanks @goulvenclech!

## 0.11.0 — 2026-01-12

### Minor changes

- [1dcc188](https://github.com/bruits/sampo/commit/1dcc188f7cf1d9867dd074f2f6da06f179002dc2) **Python packages are now supported!** Sampo now automatically detects Python packages managed by `pyproject.toml` and `uv` (for publishing to PyPI), and handles versioning, changelogs, and publishing—even in mixed workspaces. — Thanks @rafaeelaudibert for your first contribution 🎉!

### Patch changes

- [26aed7e](https://github.com/bruits/sampo/commit/26aed7ec7994e92f8d6f4392e36cd73b37d2ac70) Changelog entries now correctly credit the original changeset author, even if the file was later edited by someone else. — Thanks @goulvenclech!
- [2a403f1](https://github.com/bruits/sampo/commit/2a403f13a17a2b2b9b7c98876bef57e1d6b48c2a) Dry-run mode now skips already-published packages before validation, and no longer pushes tags or creates GitHub releases. — Thanks @goulvenclech!

## 0.10.0 — 2025-12-08

### Minor changes

- [8552e90](https://github.com/bruits/sampo/commit/8552e905285d539ad80870cf75b0a20a4a025a26) Introducing `changesets.tags` configuration option, an optional array of custom changelog section names (default: `[]`). When configured, changesets can use the `bump (Tag)` format to categorize entries under custom headings instead of the default bump-based sections. For example, `tags = ["Added", "Changed", "Deprecated", "Removed", "Fixed", "Security"]` enables [Keep a Changelog](https://keepachangelog.com/) style formatting where `cargo/my-crate: minor (Added)` appears under `### Added` while still applying a minor version bump. — Thanks @goulvenclech!

### Patch changes

- [b90bbaa](https://github.com/bruits/sampo/commit/b90bbaa066274ad7b0c752b27bb062667101d1cf) Workspace discovery now locates the `.sampo/` directory instead of walking up to find manifests. New `find_sampo_root` and `discover_packages_at` functions are exported. Returns `NotInitialized` when `.sampo/` is missing, and `NoPackagesFound` when `.sampo/` exists but no packages are detected. — Thanks @goulvenclech!

## 0.9.2 — 2025-11-18

### Patch changes

- [b6fe0c2](https://github.com/bruits/sampo/commit/b6fe0c2365156c3acaa1fec8269b3346db261c67) Private packages now receive git version tags during `sampo publish`, ensuring the GitHub Action's published output correctly triggers subsequent workflow steps, even for projects that don't publish to package registries. — Thanks @goulvenclech!

## 0.9.1 — 2025-11-18

### Patch changes

- [253334b](https://github.com/bruits/sampo/commit/253334be5285a79ae3cc411f1c5eab3a3d346c14) Elixir packages without a `package()` function in `mix.exs` are now correctly identified as private and excluded from publishing. — Thanks @goulvenclech!
- [d7979c5](https://github.com/bruits/sampo/commit/d7979c5e720398bf18fc2d1af042ee0b7621699f) When the ecosystem allows it, `sampo publish` now performs a dry-run publish for each package, before proceeding with the actual publish. If any package fails the dry-run, the publish process is aborted, avoiding partial releases. — Thanks @goulvenclech!
- [7b95c43](https://github.com/bruits/sampo/commit/7b95c4368e43596f7d9b539cf200c3112a2cbbcf) Sampo now supports single-package Rust repositories, in addition to Cargo workspaces. — Thanks @goulvenclech!

## 0.9.0 — 2025-10-23

### Minor changes

- [3703dfa](https://github.com/bruits/sampo/commit/3703dfa5c93190ca46d60e1a9e4a96e180f0c3d2) **Elixir packages are now supported!** Sampo now automatically detects Hex packages managed by `mix` (Elixir), and handles versioning, changelogs, and publishing—even in mixed workspaces. — Thanks @goulvenclech!

### Patch changes

- [a83904b](https://github.com/bruits/sampo/commit/a83904bf59f25291b78b466335baec28d8044c94) Npm packages marked `private: true` no longer block Sampo publish when their manifest omits `version`. — Thanks @goulvenclech!

## 0.8.0 — 2025-10-16

### Minor changes

- [8d4e0e0](https://github.com/bruits/sampo/commit/8d4e0e0b4f076d0679525480539f3cfc170f0ede) **npm packages are now supported!** Sampo now automatically detects npm packages, and handles versioning, changelogs, and publishing—even in mixed Rust/JS workspaces. — Thanks @goulvenclech!

## 0.7.0 — 2025-10-12

### Minor changes

- [a4bcf23](https://github.com/bruits/sampo/commit/a4bcf230586f6643dd5a75f8c4fe38b0c70b2905) To avoid ambiguity between packages in different ecosystems (e.g. a Rust crate and an npm package both named `example`), Sampo now assigns canonical identifiers to all packages using `<ecosystem>/<name>`, such as `cargo/example` for Rust crates or `npm/example` for JavaScript packages.
  
  Changesets, the CLI, and the GitHub Action now accept and emit ecosystem-qualified package names. Plain package names (without ecosystem prefix) are still supported when there is no ambiguity. — Thanks @goulvenclech!

## 0.6.0 — 2025-10-03

### Minor changes

- [7fe1d43](https://github.com/bruits/sampo/commit/7fe1d43da5aa3e809b5a4ab44900efdfbf474936) Add prerelease management helpers that toggle Cargo manifests between stable and labeled versions, validate custom identifiers, update internal dependency requirements, and regenerate `Cargo.lock` with dedicated error reporting. — Thanks @goulvenclech!
- [ee1cdaa](https://github.com/bruits/sampo/commit/ee1cdaad4672de0cbe62231e3c840f921414b312) Add a release timestamp in changelog headers (e.g., `## 1.0.0 - 2024-06-20`), with configuration options to toggle visibility, pick the format, or force a timezone. — Thanks @goulvenclech!
- [3e0f9ad](https://github.com/bruits/sampo/commit/3e0f9ad64f461aa03f00ebf29f2362583252bf49) While in pre-release mode, you can continue to add changesets and run `sampo release` and `sampo publish` as usual, Sampo preserves the consumed changesets in `.sampo/prerelease/`. When exiting pre-release mode or switching to a different label (for example, from `alpha` to `beta`), any preserved changesets are restored back to `.sampo/changesets/`, so the next release keeps the full history. — Thanks @goulvenclech!
- [fff8a3d](https://github.com/bruits/sampo/commit/fff8a3d2e23861878b05124449888414aac65e55) Add a `[git]` configuration section that defines the default release branch (default to `"main"`) and the full set of branch names allowed to run `sampo release` or `sampo publish`. The CLI and GitHub Action now detect the current branch (or respect `SAMPO_RELEASE_BRANCH`) and abort early when the branch is not whitelisted, enabling parallel maintenance lines such as `main` and `3.x` without cross-contamination. — Thanks @goulvenclech!
- [74b94c6](https://github.com/bruits/sampo/commit/74b94c6623a6096bd501d1d8ae2c1b095bcc20fd) Added support for pre-release identifiers such as `1.8.0-alpha` or `2.0.0-rc.3`. While a pre-release stays within its implied level (patch for `x.y.z-prerelease`, minor for `x.y.0-prerelease`, major for `x.0.0-prerelease`), we only bump the numeric suffix (`alpha` → `alpha.1` -> `alpha.2` -> etc). If a higher bump is required, we advance the base version first and reset the numeric suffix (`1.8.0-alpha.2` + major → `2.0.0-alpha`). Purely numeric tags like `1.0.0-1` are rejected. — Thanks @goulvenclech!

### Patch changes

- [a290985](https://github.com/bruits/sampo/commit/a29098505b3a93392b971995ffc601646e77f706) Fix release workflow so root `Cargo.toml` refreshes semver versions for member dependencies declared in `[workspace.dependencies]`, while leaving wildcard or path-only entries untouched. — Thanks @goulvenclech!
- [4afd1dd](https://github.com/bruits/sampo/commit/4afd1dddf5c5b0b318fc5d3ba94e2dce5d017802) When updating changelogs, Sampo now preserves any intro content or custom main header before the first `##` section. You can also manually edit previously released entries, and Sampo will keep them intact. — Thanks @goulvenclech!

## 0.5.0

### Minor changes

- [46d5af6](https://github.com/bruits/sampo/commit/46d5af6fb22a312cf7175cc25e05675e64038343) Allow `render_changeset_markdown` to accept per-package bump entries so callers can record different levels in a single changeset. — Thanks @goulvenclech!

### Patch changes

- [6c431c4](https://github.com/bruits/sampo/commit/6c431c4a93c9195e7a9f0eee4e82b88d945a1a47) Releases now bump the right crate even if the package name is quoted. — Thanks @goulvenclech!
- [6c431c4](https://github.com/bruits/sampo/commit/6c431c4a93c9195e7a9f0eee4e82b88d945a1a47) Sampo's CLI should not add quotes around package names in changesets. — Thanks @goulvenclech!


## 0.4.0

### Minor changes

- [0936318](https://github.com/bruits/sampo/commit/0936318b145d1265bf4a2e9128ce333336a0f7ff) **⚠️ breaking change:** Sampo now uses standardized changeset format, thanks to [knope-dev/changesets](https://github.com/knope-dev/changesets) crate.
  
  ```md
  ---
  "package-a": minor
  ---
  
  Some description of the change.
  ```
   — Thanks @goulvenclech!

### Patch changes

- [0936318](https://github.com/bruits/sampo/commit/0936318b145d1265bf4a2e9128ce333336a0f7ff) Regenerate lockfiles at release, so it does not leave the repo dirty. — Thanks @goulvenclech!
- [0936318](https://github.com/bruits/sampo/commit/0936318b145d1265bf4a2e9128ce333336a0f7ff) Refactor error handling to improve context and consistency. — Thanks @goulvenclech!


## 0.3.1

### Patch changes

- [061a5f3](https://github.com/bruits/sampo/commit/061a5f368f6409a868d94dc60f39f0fc1c138727) `packages.ignore` and `packages.ignore_unpublished` configuration options now work as intended for release and publishing steps. — Thanks @goulvenclech!


## 0.3.0

### Minor changes

- [66a075b](https://github.com/bruits/sampo/commit/66a075b33aed9d7e00498c541b79fbb7fcf4eb09) ⚠️ **breaking change:** Rename dependent package options from `fixed_dependencies` and `linked_dependencies` to `fixed` and `linked`.
  
  ```diff
  // .sampo/config.toml
  [packages]
  -  fixed_dependencies = [["pkg-a", "pkg-b"], ["pkg-c", "pkg-d", "pkg-e"]]
  -  linked_dependencies = [["pkg-f", "pkg-g"]]
  +  fixed = [["pkg-a", "pkg-b"], ["pkg-c", "pkg-d", "pkg-e"]]
  +  linked = [["pkg-f", "pkg-g"]]
  ```
   — Thanks @goulvenclech!
- [3736d06](https://github.com/bruits/sampo/commit/3736d06afedfa80f09e635d15e0e32c141889a1d) Add support for ignoring packages during releases and in CLI package lists. You can now exclude unpublishable packages or specific packages by name/path patterns from Sampo operations.
  
  ```toml
  [packages]
  # Skip packages that aren't publishable to crates.io
  ignore_unpublished = true
  # Skip packages matching these patterns
  ignore = [
    "internal-*",     # Ignore by name pattern
    "examples/*",     # Ignore by workspace path
    "benchmarks/*"
  ]
  ```
   — Thanks @goulvenclech!

### Patch changes

- [37b006b](https://github.com/bruits/sampo/commit/37b006b96d6bc78d5a9cda661d8b28fa5d0fcd0c) `sampo init` now generates a more up-to-date configuration file and README snippet. — Thanks @goulvenclech!
- [b4a7ea6](https://github.com/bruits/sampo/commit/b4a7ea6c0bfb693ccbe77d0ffc6b72d540a164ff) Fixed a formatting issue in release notes when a block of code was followed immediately by the contributor acknowledgment text. — Thanks @goulvenclech!
- [b4a7ea6](https://github.com/bruits/sampo/commit/b4a7ea6c0bfb693ccbe77d0ffc6b72d540a164ff) Nesting should be preserved in release notes, even for nested lists. — Thanks @goulvenclech!
- [5255617](https://github.com/bruits/sampo/commit/5255617685f9ab71fd2af336536758fd16e547df) Fix `workspace = true` dependencies handling, whether for internal monorepo dependencies or monorepo-wide external dependencies. — Thanks @goulvenclech!


## 0.2.1

### Patch changes

- [1c47715](https://github.com/bruits/sampo/commit/1c47715b40df61d4768f371826858c6d5f7fda71) Bump `sampo-core` version to propagate an unpublished fix to `sampo-github-action` and `sampo` CLI. Should definitely fix the malformed `Cargo.toml` issue in release PRs. — Thanks @goulvenclech!


## 0.2.0

### Minor changes

- [20ea306](https://github.com/bruits/sampo/commit/20ea306ce5e913a90c64b19544820f2503625df7) New `release` and `publish` API endpoints in the core library, to be used by the GitHub Action and CLI. — Thanks @Princesseuh!


## 0.1.1

### Patch changes

- [6062083](https://github.com/bruits/sampo/commit/6062083ae20e3bcea6c1f4f00d6b58cf790cd9f1) Fix deploys and publishing. — Thanks @goulvenclech!


## 0.1.0

### Minor changes

- [78515cc](https://github.com/bruits/sampo/commit/78515ccfbf53dcd952dc7f7e7716c0f0a5fc82b6) Initial release of `sampo-core`, a foundational crate providing core logic, common types, and internal utilities shared across all Sampo crates. — Thanks Goulven Clec'h!

