Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Api diff #4348

Merged
merged 29 commits into from
Jul 24, 2020
Merged

Api diff #4348

merged 29 commits into from
Jul 24, 2020

Conversation

danwalmsley
Copy link
Member

@danwalmsley danwalmsley commented Jul 22, 2020

What does the pull request do?

This ensures binary compatibility with a specified version (currently 0.10.0-preview1)

Binary api changes will cause an error.

used this guide: https://stu.dev/check-for-breaking-changes-with-apicompat/

There are ApiCompatBaseLine.txt files next to csproj with breaking changes since the specified release.
i.e.

Compat issues with assembly Avalonia.Base:
MembersMustExist : Member 'public void Avalonia.Threading.AvaloniaSynchronizationContext..ctor()' does not exist in the implementation but it does exist in the contract.
Total Issues: 1

Those files allow breaking changes to be allowed.

These files can be generated when a breaking change occurs using... dotnet build /p:BaselineAllAPICompatError=true
They can then be checked in.

My suggestion is these are all removed after 0.10.0 release and 0.10.0 becomes our api promise more or less.

We will also need to do an api review...

We can generate a report comparing to 0.9.11 at the time to help us work out if some stuff was made public that shouldnt and if some apis need fixing.

What is the current behavior?

What is the updated/expected behavior with this PR?

If you make an api change you will get a build error i.e.:

C:\Users\danwa\.nuget\packages\microsoft.dotnet.apicompat\5.0.0-beta.20364.3\build\Microsoft.DotNet.ApiCompat.targets(82,5): error : MembersMustExist : Member 'public void Avalonia.Controls.Button..ctor()' does not exist in the implementation but it does exist in the contract. 

example can be seen here:
https://dev.azure.com/AvaloniaUI/AvaloniaUI/_build/results?buildId=9466&view=results

How was the solution implemented (if it's not obvious)?

Checklist

Breaking changes

Fixed issues

build/ApiDiff.props Outdated Show resolved Hide resolved
Co-authored-by: Jeremy Koritzinsky <jkoritzinsky@gmail.com>
@danwalmsley
Copy link
Member Author

In future we can exclude certain types, methods and classes from api checks with attributes and have a single baseline file for the entire solution... however this is currently blocked by:

dotnet/arcade#5826

@danwalmsley danwalmsley merged commit 8efd408 into master Jul 24, 2020
@danwalmsley danwalmsley deleted the api-diff branch July 24, 2020 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants