Current section

Files

Jump to
workspace CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [v0.3.2](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.3.2) (2026-08-05)
### Added
* Add `--include` / `-i` option for union-based filtering
The `--include` option allows you to add projects back to the filtered set,
even if they were filtered out by other flags. This acts as a union operation,
enabling powerful filtering combinations.
Available in `workspace.run` and `workspace.list` tasks.
Example use cases:
- Run tests on affected projects but always include critical services:
```bash
mix workspace.run -t test --affected --include auth --include payment
```
- Get all dependencies of a project plus the project itself:
```bash
mix workspace.list --dependent my_api --include my_api --format json
```
Note: `--exclude` always has the highest priority - excluded projects cannot
be re-included with `--include`.
* Add `--recursive` option for transitive dependency filtering
The `--recursive` option enables deep dependency traversal when used with
`--dependency` or `--dependent` flags, allowing you to work with all
transitive dependencies instead of just first-level ones.
Available in `workspace.run` and `workspace.list` tasks.
Example use cases:
- Get all projects that transitively depend on a shared library:
```bash
mix workspace.list --dependency shared_utils --recursive
```
- Run tests on all transitive dependencies of an API service:
```bash
mix workspace.run -t test --dependent my_api --recursive
```
- Find all projects affected by changes to a core dependency:
```bash
mix workspace.list --dependency core_lib --recursive --format json
```
By default (without `--recursive`), `--dependency` and `--dependent` only
consider direct (first-level) dependencies to maintain backward compatibility.
### Fixed
* Fix `--exclude-tag` having no effect
The tags provided through the command line were not normalized to atoms
(or `{scope, tag}` tuples for scoped tags), so they never matched the
projects' tags and no project was excluded. This affected all tasks
supporting the option, e.g. `workspace.run`, `workspace.list`,
`workspace.check` and `workspace.test.coverage`.
## [v0.3.1](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.3.1) (2025-10-24)
### Fixed
* Fix type violation warnings on Elixir 1.19
## [v0.3.0](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.3.0) (2025-10-13)
### Added
* Add `:affected_by` option for explicit project dependencies
Enables projects to declare dependencies on files outside their directory
structure, addressing common monorepo scenarios where projects depend
on shared resources that cannot be detected through mix dependencies.
In order to explicitly declare dependencies, you can now add in your
`:workspace` config in the project's `mix.exs`:
```elixir
def project do
[
app: :web,
# ... other config
workspace: [
affected_by: [
"../shared/config.ex",
"../docs/**/*.md",
"../rust/foo/"
]
]
]
end
```
Use cases include
- Cross-language dependencies (e.g., Rust NIFs depending on Rust crates)
- Shared configuration files across multiple projects
- Documentation changes that affect project builds
### Deprecated
* Add `--format` option to `workspace.list` with support for `json` and `pretty` output formats
The new `--format` option provides a more flexible way to control output format:
- `--format json` outputs JSON data (replaces the deprecated `--json` flag)
- `--format pretty` outputs human-readable format (default)
The `--json` option is now deprecated and will be removed in version 0.4.0.
Use `--format json` with `--output` instead for the same functionality.
## [v0.2.2](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.2.2) (2025-07-10)
### Added
* `workspace.run`: store task output in the exported `json`.
* `workspace.run`: include the task duration in milliseconds in the exported `json`.
* `workspace.list`: support `--base`, `--head`, `--affected` and `---modified` options.
* `workspace.test.coverage`: allow filtering by package path.
## [v0.2.1](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.2.1) (2025-03-14)
* Allow having multiple workspaces under the same git repo.
## [v0.2.0](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.2.0) (2025-02-07)
**This version requires at least elixir v1.16**
### Added
* `workspace.run`: support specifying execution order through the `--option` flag.
Till now `workspace.run` was executing the tasks in alphabetical order. A new `--order`
cli option is added that support setting it to `preorder`. This will perform a
depth first search on the project graph and return the projects in post-order, e.g.
outer leaves are returned first respecting the topology of your workspace.
* `workspace.run`: support filtering by root paths through the `--path` flag.
* `workspace.run`: support filtering by `--dependency` and `--dependent` similarly
to `workspace.list`.
* Support passing most repeated CLI arguments as a comma separated list, for
example you can now do:
```bash
$ mix workspace.run -t format -p p1,p2,p3
```
* `workspace.check`: support running specific checks through the `--check` option
* `workspace.check`: support grouping checks.
You can now configure the group of each check in your workspace config, with the
`group` option. Checks with the same group will be printed together on the CLI output,
under a group header.
Additionally you can specify `groups_for_checks` with which you can modify the default
look and feel of each check group, for example:
```elixir
groups_for_checks: [
package: [
style: [:light_blue_background, :black],
title: " 📦 Package checks"
],
documentation: [
style: [:yellow_background, :black],
title: " 📚 Documentation checks"
]
]
```
* `workspace.list`: support filtering by root paths through the `--path` flag.
* Promoted helper testing utilities to a `Workspace.Test` module.
### Deprecated
* Check definitions without an `id` is deprecated. ids can be used for filtering
the checks that will be executed.
### Removed
* `Workspace.Utils.Path.relative_to/2` has been removed. After requiring at least
elixir 1.16 you can now use `Path.relative_to/3` instead with the `force: true`
option.
### Fixed
* Escape base and head references in git commands.
* `workspace.test.coverage`: respect `ignore_modules` from coverage report
## [v0.1.2](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.1.2) (2024-09-30)
### Added
* `workspace.list`: support filtering by dependents through the `--dependent` flag. You
can now list all projects that are direct dependencies of a given project:
```bash
mix workspace.list --dependent my_project
```
* `workspace.list`: support filtering by dependencies through the `--dependency`. Using this
flag you can list only those projects that have the given direct dependency:
```bash
mix workspace.list --dependency a_project
```
* `workspace.list`: add `--maintainer` for filtering projects with the given maintainer
## [v0.1.1](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.1.1) (2024-07-04)
### Added
* `workspace.run`: add `--export` option for exporting execution results as a `json`
file
* `workspace.run`: log execution time per project
* `workspace.list`: add `--relative-paths` option for exporting relative paths with
respect to the workspace path instead of absolute paths (the default one).
### Removed
* `workspace.run`: remove `--execution-mode` flag
## [v0.1.0](https://github.com/sportradar/elixir-workspace/tree/workspace/v0.1.0) (2024-05-13)
Initial release.