Skip to content

Transitive breaking changes #50

@noughtmare

Description

@noughtmare

Breaking changes in dependencies of a package can transitively cause breaking changes in that package.

Consider a dependency foo which defines:

data A = MkA

And the package bar itself uses it in a definition:

bar :: A
bar = MkA

Then print-api -p bar should report:

bar :: A

But now imagine foo releases a new version which changes the definition of A to:

data A = MkA | MkB

Then print-api -b bar will probably still report:

bar :: A

But this is a different A, so it misses a breaking change!

I haven't been able to test this due to #40, but I think this is an important issue.

One way to prevent this is to also print out all versions of dependencies that are used and make sure those don't change. But sometimes versions of dependencies must be updated at the same time.

For example, I wanted to compare Cabal-3.12.0.0 to Cabal-3.14.0.0, but those depend on Cabal-syntax-3.12.* and Cabal-syntax-3.14.* respectively. So I can't be sure I'm catching all breaking changes (and #14 causes many false positives).

I think the only way to do this properly is to recursively compare all the changed dependencies for API changes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions