-
Notifications
You must be signed in to change notification settings - Fork 396
Introduce adyen to CI pipeline for public API changes detection #5484
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
base: main
Are you sure you want to change the base?
Conversation
📸 Snapshot Test68 modified, 625 unchanged
🛸 Powered by Emerge Tools |
| name: Update paywall templates | ||
| command: bundle exec fastlane ios update_paywall_preview_resources_commit | ||
|
|
||
| check-api-changes: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be great if we could add these to our CircleCI orb so we can use them in other repos (e.g. PHC) too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am thinking about moving the job to the orb, and the script to our fastlane plugin as an action so we can reuse everything
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Even better, yes let's do that 😄
0e11def to
93f8b89
Compare
fed96c5 to
6bd73fc
Compare
db3254d to
e531694
Compare
👁️🗨️ API DIFFiOS SimulatorStatus: ❌ Changes detected ⚠ We should not end up here - investigate how this happened 👀 2 public changes detected
|
| ❇️ | 2 Additions |
PaywallComponent
❇️ Added
public enum AnimationType: RevenueCat.PaywallComponentBase, Swift.String {
case easeIn
case easeInOut
case easeOut
case linear
public init(from decoder: any Swift.Decoder) throws
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String { get }
}public struct Animation: RevenueCat.PaywallComponentBase {
public func encode(to encoder: any Swift.Encoder) throws -> Swift.Void
public func hash(into hasher: inout Swift.Hasher) -> Swift.Void
public init(from decoder: any Swift.Decoder) throws
public let msDelay: Swift.Int { get }
public let msDuration: Swift.Int { get }
public let type: RevenueCat.PaywallComponent.AnimationType { get }
public static func ==(
a: RevenueCat.PaywallComponent.Animation,
b: RevenueCat.PaywallComponent.Animation
) -> Swift.Bool
public var hashValue: Swift.Int { get }
}macOS
Status: ❌ Changes detected
⚠ We should not end up here - investigate how this happened
👀 2 public changes detected
| ❇️ | 2 Additions |
PaywallComponent
❇️ Added
public enum AnimationType: RevenueCat.PaywallComponentBase, Swift.String {
case easeIn
case easeInOut
case easeOut
case linear
public init(from decoder: any Swift.Decoder) throws
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String { get }
}public struct Animation: RevenueCat.PaywallComponentBase {
public func encode(to encoder: any Swift.Encoder) throws -> Swift.Void
public func hash(into hasher: inout Swift.Hasher) -> Swift.Void
public init(from decoder: any Swift.Decoder) throws
public let msDelay: Swift.Int { get }
public let msDuration: Swift.Int { get }
public let type: RevenueCat.PaywallComponent.AnimationType { get }
public static func ==(
a: RevenueCat.PaywallComponent.Animation,
b: RevenueCat.PaywallComponent.Animation
) -> Swift.Bool
public var hashValue: Swift.Int { get }
}watchOS Simulator
Status: ❌ Changes detected
⚠ We should not end up here - investigate how this happened
👀 2 public changes detected
| ❇️ | 2 Additions |
PaywallComponent
❇️ Added
public enum AnimationType: RevenueCat.PaywallComponentBase, Swift.String {
case easeIn
case easeInOut
case easeOut
case linear
public init(from decoder: any Swift.Decoder) throws
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String { get }
}public struct Animation: RevenueCat.PaywallComponentBase {
public func encode(to encoder: any Swift.Encoder) throws -> Swift.Void
public func hash(into hasher: inout Swift.Hasher) -> Swift.Void
public init(from decoder: any Swift.Decoder) throws
public let msDelay: Swift.Int { get }
public let msDuration: Swift.Int { get }
public let type: RevenueCat.PaywallComponent.AnimationType { get }
public static func ==(
a: RevenueCat.PaywallComponent.Animation,
b: RevenueCat.PaywallComponent.Animation
) -> Swift.Bool
public var hashValue: Swift.Int { get }
}watchOS
Status: ❌ Changes detected
⚠ We should not end up here - investigate how this happened
👀 2 public changes detected
| ❇️ | 2 Additions |
PaywallComponent
❇️ Added
public enum AnimationType: RevenueCat.PaywallComponentBase, Swift.String {
case easeIn
case easeInOut
case easeOut
case linear
public init(from decoder: any Swift.Decoder) throws
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String { get }
}public struct Animation: RevenueCat.PaywallComponentBase {
public func encode(to encoder: any Swift.Encoder) throws -> Swift.Void
public func hash(into hasher: inout Swift.Hasher) -> Swift.Void
public init(from decoder: any Swift.Decoder) throws
public let msDelay: Swift.Int { get }
public let msDuration: Swift.Int { get }
public let type: RevenueCat.PaywallComponent.AnimationType { get }
public static func ==(
a: RevenueCat.PaywallComponent.Animation,
b: RevenueCat.PaywallComponent.Animation
) -> Swift.Bool
public var hashValue: Swift.Int { get }
}
Generated by 🚫 Danger |
Motivation
A couple of weeks ago we realized we broke the public API. For better API stability and change control, the job should fail on any API modifications - whether breaking or non-breaking - to ensure all changes are intentional and properly reviewed.
With changes
Without changes
Description of Changes
Use https://www.adyen.com/knowledge-hub/swift-api-diff to detect API changes (only RevenueCat for now, RevenueCatUI coming next):
When detecting changes, there's a lane to run locally that re-generates the swift interface files to replace the baselines. This makes reviewing public changes easier for everybody
On my mind