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

Add Support for GitHub Actions Annotations #107

Merged
merged 46 commits into from
Jul 14, 2023
Merged

Add Support for GitHub Actions Annotations #107

merged 46 commits into from
Jul 14, 2023

Conversation

cpisciotta
Copy link
Owner

@cpisciotta cpisciotta commented Jun 22, 2023

Resolves: #38

@cpisciotta
Copy link
Owner Author

Hey, @pepicrft and @fortmarek! Would one of you be able to take a look at this initial implementation? I'm hoping to get some direction to bring this into a more production-ready state. Alternatively, I'd appreciate you forwarding this to someone with context!

I'm seeing some issues around duplicate annotations, and I haven't settled on a general format for the output.

Some initial questions around formatting:

  • If reporting for GitHub Actions, should the output be limited to warnings and errors?
  • Should unsuccessful steps have markup (color, leading icon, etc.)?
  • If including all steps, should successful steps have markup (color, leading icon, etc.)?

Copy link
Collaborator

@pepicrft pepicrft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot @cpisciotta for taking this one on. The approach that you took looks sensible and in line with the coding practices of the repository. I left a few minor comments throughout the PR.

Sources/XcbeautifyLib/Array+Safe.swift Outdated Show resolved Hide resolved
Sources/xcbeautify/Xcbeautify.swift Outdated Show resolved Hide resolved
Comment on lines 40 to 44
func testCheckDependenciesErrors() {
}

func testCheckDependencies() {
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the plan to add tests for those as well?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this'll need to be a follow up PR because I don't know what the expected output is here. It wasn't defined in the pre-existing implementation (for TerminalRenderer).

@pepicrft
Copy link
Collaborator

If reporting for GitHub Actions, should the output be limited to warnings and errors?

That's what I'd advise for now since it's the information developers usually need to diagnose failing builds. If developers need more granularity, we can iterate on your foundation.

Should unsuccessful steps have markup (color, leading icon, etc.)?

That's up to you to make the call. I'd advise to output the messages in a format that when presented by GitHub someone is able to tell:

  • The severity of the message
  • The meaning of the message

Beyond that (e.g. icons), I'm not sure it adds that much value.

If including all steps, should successful steps have markup (color, leading icon, etc.)?

Similarly, I'd keep this one raw for now, and iterate from there. If you have ideas for how to leverage icons or colours to enhance the message, don't hesitate to share the options here and we can discuss what's the best one.

@cpisciotta
Copy link
Owner Author

@pepicrft Thanks for your review and the feedback on my questions! Working on a few fixes to your address your feedback and to align with your answers!

@cpisciotta
Copy link
Owner Author

@eliperkins Thanks for the feedback! Yes, that definitely makes sense to me, and I'll update to implement your suggested approach! Originally, I was trying to avoid a larger refactor for something like that, but I agree the switch statements are unideal, and it'll make for a cleaner implementation.

@cpisciotta cpisciotta changed the title [DRAFT] Add GitHub Actions Annotations [DRAFT] Add Support for GitHub Actions Annotations Jun 24, 2023
@cpisciotta cpisciotta changed the title [DRAFT] Add Support for GitHub Actions Annotations Add Support for GitHub Actions Annotations Jun 24, 2023
@cpisciotta cpisciotta mentioned this pull request Jun 24, 2023
@cpisciotta cpisciotta mentioned this pull request Jul 2, 2023
Comment on lines +40 to +44
func testCheckDependenciesErrors() {
}

func testCheckDependencies() {
}
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These empty tests aren't defined for the existing implementation, so totally clear on the expected output.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's still some missing tests from this list, but I think it's best to include those in a follow up PR, since many were already missing before I started.

@cpisciotta cpisciotta marked this pull request as ready for review July 3, 2023 19:01
@cpisciotta
Copy link
Owner Author

Hi @pepicrft and @eliperkins. I think I've gotten the PR into a state ready for review and ready for production. There's quite a lot of changes, so I'm happy to walk through any areas where there's concern or questions.

Working on a PR description...

Copy link

@eliperkins eliperkins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work on this! Admittedly, I'm not an expert at the internals of xcbeautify, so I asked a few questions to help better understand this codebase.

Thanks for improving the ecosystem with this PR! ❤️

Comment on lines 7 to 9
public var summary: TestSummary? = nil
private(set) var summary: TestSummary? = nil

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this changes a public { get set } to only a public { get }, is this a breaking change for API consumers? If so, what do we need to do to mark the next version of xcbeautify as a breaking change?

Otherwise, can we revert this change?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was addressed in a different PR. I don't think it requires a major release, since the only consumer of XcbeautifyLib should be the executable target. @pepicrft should confirm.

Sources/XcbeautifyLib/Parser.swift Outdated Show resolved Hide resolved
Sources/XcbeautifyLib/Parser.swift Outdated Show resolved Hide resolved
Sources/XcbeautifyLib/Renderers/OutputRendering.swift Outdated Show resolved Hide resolved
Sources/XcbeautifyLib/String+Colored.swift Show resolved Hide resolved
}

func testCompile() {
#if os(macOS)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a Linux branch of this that should be tested as well?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is copied from TerminalRendererTests, I'm not sure what the expected output is. I can look at this in a follow-up PR, since this is an issue for all OutputRendering types.

XCTAssertFalse(parser.needToRecordSummary)
let formatted1 = logFormatted(input1)
#if os(macOS)
// FIXME: Failing on Linux

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this in scope for this PR?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be a separate PR, since this is copied from TerminalRendererTests and also an issue there. I can look into why this is triggering an error and fix for all OutputRendering types.

@cpisciotta cpisciotta marked this pull request as draft July 6, 2023 01:29
@cpisciotta
Copy link
Owner Author

To better separate the scope of this PR and to improve readability (for review and history), I've introduced one more intermediate PR (#124). In the new PR, I do all of the refactor work to introduce the concept of a renderer before we define a new one here.

@cpisciotta
Copy link
Owner Author

@eliperkins Are you aware of any way to filter annotations on GitHub Actions? I'm noticing a lot of noise in the summary section (namely from dependencies), so I'm trying to decide if it makes sense to add an "ignored file paths" option to xcbeautify. Alternatively, It'd be great if GitHub had this as some type of configuration option.

@cpisciotta cpisciotta marked this pull request as ready for review July 10, 2023 17:00
@cpisciotta cpisciotta requested review from a team and danieleformichelli and removed request for a team July 14, 2023 15:06
Copy link
Collaborator

@pepicrft pepicrft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amazing work on this one @cpisciotta 👏🏼. I tried it locally and got the errors properly formatted:

::error file=/Users/pepicrft/Downloads/MyApp/MyApp/ContentView.swift,line=18,col=9::expected declaration
        .padding()
        ^
::error file=/Users/pepicrft/Downloads/MyApp/MyApp/ContentView.swift,line=20,col=1::extraneous '}' at top level
}
^
::error file=/Users/pepicrft/Downloads/MyApp/MyApp/ContentView.swift,line=12,col=9::cannot find 'VStac' in scope
        VStac
        ^~~~~
::error file=/Users/pepicrft/Downloads/MyApp/MyApp/ContentView.swift,line=20,col=1::extraneous '}' at top level
}
^
::error file=/Users/pepicrft/Downloads/MyApp/MyApp/ContentView.swift,line=18,col=9::expected declaration

@pepicrft pepicrft added this pull request to the merge queue Jul 14, 2023
Merged via the queue into cpisciotta:main with commit b40dce9 Jul 14, 2023
@pepicrft
Copy link
Collaborator

@all-contributors add @cpisciotta for code

@allcontributors
Copy link
Contributor

@pepicrft

I've put up a pull request to add @cpisciotta! 🎉

@cpisciotta cpisciotta deleted the format-github-actions branch July 14, 2023 15:13
@tonyarnold
Copy link

I'm not sure if this is directly related to this issue, but I'm seeing truncated results in my actions summary:

[Test SDK (tvOS Simulator): --- xcodebuild#L1](somerepolink)
Using the first of multiple matching destinations:

Is all I get, when there should be a bunch of lines below this.

@cpisciotta
Copy link
Owner Author

@tonyarnold I think that's unrelated to my changes here. I suspect it fails for the same or a similar reason to #105. Can you give a little more context about the lines above and below?

@tonyarnold
Copy link

@cpisciotta yeah, it sounds like #105 — this was the full error in my build logs:

xcodebuild: error: Unable to find a destination matching the provided destination specifier:
		{ generic:1, platform:visionOS Simulator }

	Available destinations for the "RevealServer" scheme:
		{ platform:macOS, arch:arm64, id:00006000-001A605E3E23801E }
		{ platform:macOS, arch:x86_64, id:00006000-001A605E3E23801E }
		{ platform:macOS, arch:arm64, variant:Mac Catalyst, id:00006000-001A605E3E23801E }
		{ platform:macOS, arch:x86_64, variant:Mac Catalyst, id:00006000-001A605E3E23801E }
		{ platform:macOS, arch:arm64, variant:Designed for [iPad,iPhone], id:00006000-001A605E3E23801E }
		{ platform:watchOS, arch:arm64_32, id:00008006-0013708C36A2002E, name:Tony’s Apple Watch }
		{ platform:iOS, arch:arm64, id:00008120-000E48EC1178C01E, name:Tony’s iPhone }
		{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device }
		{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Any iOS Simulator Device }
		{ platform:macOS, name:Any Mac }
		{ platform:macOS, variant:Mac Catalyst, name:Any Mac }
		{ platform:tvOS, id:dvtdevice-DVTiOSDevicePlaceholder-appletvos:placeholder, name:Any tvOS Device }
		{ platform:tvOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-appletvsimulator:placeholder, name:Any tvOS Simulator Device }
		{ platform:visionOS, variant:Designed for [iPad,iPhone], id:dvtdevice-DVTiOSDevicePlaceholder-xros:placeholder, name:Any visionOS Device }
		{ platform:watchOS, id:dvtdevice-DVTiOSDevicePlaceholder-watchos:placeholder, name:Any watchOS Device }
		{ platform:watchOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-watchsimulator:placeholder, name:Any watchOS Simulator Device }
		{ platform:tvOS Simulator, id:DA53B578-CBC9-42FC-8801-30A0B894C730, OS:16.4, name:Apple TV }
		{ platform:tvOS Simulator, id:DA53B578-CBC9-42FC-8801-30A0B894C730, OS:16.4, name:Apple TV }
		{ platform:tvOS Simulator, id:D72208D9-8C11-4CF7-9601-EEE0119CD1B4, OS:17.0, name:Apple TV }
		{ platform:tvOS Simulator, id:D72208D9-8C11-4CF7-9601-EEE0119CD1B4, OS:17.0, name:Apple TV }
		{ platform:tvOS Simulator, id:A1C72F8C-6A78-40FA-88FC-0905C69F3B69, OS:16.4, name:Apple TV 4K (3rd generation) }
		{ platform:tvOS Simulator, id:A1C72F8C-6A78-40FA-88FC-0905C69F3B69, OS:16.4, name:Apple TV 4K (3rd generation) }
		{ platform:tvOS Simulator, id:063F7B75-9A31-4A3F-9526-0399C55FA768, OS:17.0, name:Apple TV 4K (3rd generation) }
		{ platform:tvOS Simulator, id:063F7B75-9A31-4A3F-9526-0399C55FA768, OS:17.0, name:Apple TV 4K (3rd generation) }
		{ platform:tvOS Simulator, id:B2BEA62E-C76E-4FF3-8A25-D5AFD2F86F00, OS:16.4, name:Apple TV 4K (3rd generation) (at 1080p) }
		{ platform:tvOS Simulator, id:B2BEA62E-C76E-4FF3-8A25-D5AFD2F86F00, OS:16.4, name:Apple TV 4K (3rd generation) (at 1080p) }
		{ platform:tvOS Simulator, id:C7C6F39E-F8EB-4E0B-BF90-F943E461B025, OS:17.0, name:Apple TV 4K (3rd generation) (at 1080p) }
		{ platform:tvOS Simulator, id:C7C6F39E-F8EB-4E0B-BF90-F943E461B025, OS:17.0, name:Apple TV 4K (3rd generation) (at 1080p) }
		{ platform:watchOS Simulator, id:148740F0-D03F-459F-B9FC-CEA4CC5B1C6F, OS:9.4, name:Apple Watch SE (40mm) (2nd generation) }
		{ platform:watchOS Simulator, id:148740F0-D03F-459F-B9FC-CEA4CC5B1C6F, OS:9.4, name:Apple Watch SE (40mm) (2nd generation) }
		{ platform:watchOS Simulator, id:E288AAEB-85D4-4D87-A662-9EFC4DBF18D4, OS:10.0, name:Apple Watch SE (40mm) (2nd generation) }
		{ platform:watchOS Simulator, id:E288AAEB-85D4-4D87-A662-9EFC4DBF18D4, OS:10.0, name:Apple Watch SE (40mm) (2nd generation) }
		{ platform:watchOS Simulator, id:05E5301A-B673-448E-B6F9-54738DCD77DC, OS:9.4, name:Apple Watch SE (44mm) (2nd generation) }
		{ platform:watchOS Simulator, id:05E5301A-B673-448E-B6F9-54738DCD77DC, OS:9.4, name:Apple Watch SE (44mm) (2nd generation) }
		{ platform:watchOS Simulator, id:0C5EC9D7-30C2-4DC2-A422-657D502E4B02, OS:10.0, name:Apple Watch SE (44mm) (2nd generation) }
		{ platform:watchOS Simulator, id:0C5EC9D7-30C2-4DC2-A422-657D502E4B02, OS:10.0, name:Apple Watch SE (44mm) (2nd generation) }
		{ platform:watchOS Simulator, id:4799067A-05C2-4BC0-BC4B-E7D9BE61067B, OS:9.4, name:Apple Watch Series 5 (40mm) }
		{ platform:watchOS Simulator, id:4799067A-05C2-4BC0-BC4B-E7D9BE61067B, OS:9.4, name:Apple Watch Series 5 (40mm) }
		{ platform:watchOS Simulator, id:2E187D3C-7CD8-4D05-B1BA-B244212CE509, OS:10.0, name:Apple Watch Series 5 (40mm) }
		{ platform:watchOS Simulator, id:2E187D3C-7CD8-4D05-B1BA-B244212CE509, OS:10.0, name:Apple Watch Series 5 (40mm) }
		{ platform:watchOS Simulator, id:BE34C017-60B3-4C7D-B5ED-D8357013FDEE, OS:9.4, name:Apple Watch Series 5 (44mm) }
		{ platform:watchOS Simulator, id:BE34C017-60B3-4C7D-B5ED-D8357013FDEE, OS:9.4, name:Apple Watch Series 5 (44mm) }
		{ platform:watchOS Simulator, id:DB94E16D-1CB7-4CE0-9BFF-270760EEA49C, OS:10.0, name:Apple Watch Series 5 (44mm) }
		{ platform:watchOS Simulator, id:DB94E16D-1CB7-4CE0-9BFF-270760EEA49C, OS:10.0, name:Apple Watch Series 5 (44mm) }
		{ platform:watchOS Simulator, id:9DBCB88D-6131-4F29-ABA2-FD5E084018F2, OS:9.4, name:Apple Watch Series 6 (40mm) }
		{ platform:watchOS Simulator, id:9DBCB88D-6131-4F29-ABA2-FD5E084018F2, OS:9.4, name:Apple Watch Series 6 (40mm) }
		{ platform:watchOS Simulator, id:283BD7AB-171A-493D-9F5C-BD66689606A6, OS:10.0, name:Apple Watch Series 6 (40mm) }
		{ platform:watchOS Simulator, id:283BD7AB-171A-493D-9F5C-BD66689606A6, OS:10.0, name:Apple Watch Series 6 (40mm) }
		{ platform:watchOS Simulator, id:CCD5EF60-3D40-44FC-90B4-123611312DF8, OS:9.4, name:Apple Watch Series 6 (44mm) }
		{ platform:watchOS Simulator, id:CCD5EF60-3D40-44FC-90B4-123611312DF8, OS:9.4, name:Apple Watch Series 6 (44mm) }
		{ platform:watchOS Simulator, id:5734BF15-99FB-4C57-96B7-6D065C07665D, OS:10.0, name:Apple Watch Series 6 (44mm) }
		{ platform:watchOS Simulator, id:5734BF15-99FB-4C57-96B7-6D065C07665D, OS:10.0, name:Apple Watch Series 6 (44mm) }
		{ platform:watchOS Simulator, id:A5732026-F09D-48D6-BD13-8BA70A03F6B4, OS:9.4, name:Apple Watch Series 7 (41mm) }
		{ platform:watchOS Simulator, id:A5732026-F09D-48D6-BD13-8BA70A03F6B4, OS:9.4, name:Apple Watch Series 7 (41mm) }
		{ platform:watchOS Simulator, id:EBBE8C39-4413-427E-8565-4E6917F57DAF, OS:10.0, name:Apple Watch Series 7 (41mm) }
		{ platform:watchOS Simulator, id:EBBE8C39-4413-427E-8565-4E6917F57DAF, OS:10.0, name:Apple Watch Series 7 (41mm) }
		{ platform:watchOS Simulator, id:6E05738F-ECF0-419E-8242-46F2F99ADEA0, OS:9.4, name:Apple Watch Series 7 (45mm) }
		{ platform:watchOS Simulator, id:6E05738F-ECF0-419E-8242-46F2F99ADEA0, OS:9.4, name:Apple Watch Series 7 (45mm) }
		{ platform:watchOS Simulator, id:8122EFC6-EB9C-486A-A590-4C286ED9A427, OS:10.0, name:Apple Watch Series 7 (45mm) }
		{ platform:watchOS Simulator, id:8122EFC6-EB9C-486A-A590-4C286ED9A427, OS:10.0, name:Apple Watch Series 7 (45mm) }
		{ platform:watchOS Simulator, id:9D5960D0-A4A6-48CD-8578-5E1864360186, OS:9.4, name:Apple Watch Series 8 (41mm) }
		{ platform:watchOS Simulator, id:9D5960D0-A4A6-48CD-8578-5E1864360186, OS:9.4, name:Apple Watch Series 8 (41mm) }
		{ platform:watchOS Simulator, id:3B177FA5-A381-473C-AAE2-445E998F99C4, OS:10.0, name:Apple Watch Series 8 (41mm) }
		{ platform:watchOS Simulator, id:3B177FA5-A381-473C-AAE2-445E998F99C4, OS:10.0, name:Apple Watch Series 8 (41mm) }
		{ platform:watchOS Simulator, id:08EC3202-7548-4B1D-9AF5-A99DADEB7E40, OS:9.4, name:Apple Watch Series 8 (45mm) }
		{ platform:watchOS Simulator, id:08EC3202-7548-4B1D-9AF5-A99DADEB7E40, OS:9.4, name:Apple Watch Series 8 (45mm) }
		{ platform:watchOS Simulator, id:BB5EE960-F1DD-466D-A029-EBA766604BC8, OS:10.0, name:Apple Watch Series 8 (45mm) }
		{ platform:watchOS Simulator, id:BB5EE960-F1DD-466D-A029-EBA766604BC8, OS:10.0, name:Apple Watch Series 8 (45mm) }
		{ platform:watchOS Simulator, id:F0848D83-8E3E-4E74-A0F2-5F1B7CB9C4B7, OS:9.4, name:Apple Watch Ultra (49mm) }
		{ platform:watchOS Simulator, id:F0848D83-8E3E-4E74-A0F2-5F1B7CB9C4B7, OS:9.4, name:Apple Watch Ultra (49mm) }
		{ platform:watchOS Simulator, id:AD7CB514-7034-4D4D-91A4-7B93D4635D3A, OS:10.0, name:Apple Watch Ultra (49mm) }
		{ platform:watchOS Simulator, id:AD7CB514-7034-4D4D-91A4-7B93D4635D3A, OS:10.0, name:Apple Watch Ultra (49mm) }
		{ platform:iOS Simulator, id:186BE321-E30C-4CF5-98B3-AC163EFB6B39, OS:17.0, name:iPad (10th generation) }
		{ platform:iOS Simulator, id:186BE321-E30C-4CF5-98B3-AC163EFB6B39, OS:17.0, name:iPad (10th generation) }
		{ platform:iOS Simulator, id:540D146C-6433-4950-8ACE-7536A74035AC, OS:17.0, name:iPad Air (5th generation) }
		{ platform:iOS Simulator, id:540D146C-6433-4950-8ACE-7536A74035AC, OS:17.0, name:iPad Air (5th generation) }
		{ platform:iOS Simulator, id:80F7F171-00CA-4DB0-86D2-0B36A05B68F1, OS:17.0, name:iPad Pro (11-inch) (4th generation) }
		{ platform:iOS Simulator, id:80F7F171-00CA-4DB0-86D2-0B36A05B68F1, OS:17.0, name:iPad Pro (11-inch) (4th generation) }
		{ platform:iOS Simulator, id:D834BA03-F26F-47FF-A77E-7670BC433A5A, OS:17.0, name:iPad Pro (12.9-inch) (6th generation) }
		{ platform:iOS Simulator, id:D834BA03-F26F-47FF-A77E-7670BC433A5A, OS:17.0, name:iPad Pro (12.9-inch) (6th generation) }
		{ platform:iOS Simulator, id:2FD97D0E-517A-4860-8CB3-17EBB156694F, OS:17.0, name:iPad mini (6th generation) }
		{ platform:iOS Simulator, id:2FD97D0E-517A-4860-8CB3-17EBB156694F, OS:17.0, name:iPad mini (6th generation) }
		{ platform:iOS Simulator, id:D47D0A82-C38A-4A6C-8251-68DDD0B9C916, OS:17.0, name:iPhone 14 }
		{ platform:iOS Simulator, id:D47D0A82-C38A-4A6C-8251-68DDD0B9C916, OS:17.0, name:iPhone 14 }
		{ platform:iOS Simulator, id:84682904-CE87-43A0-B4AA-3A8158D3F8D2, OS:17.0, name:iPhone 14 Plus }
		{ platform:iOS Simulator, id:84682904-CE87-43A0-B4AA-3A8158D3F8D2, OS:17.0, name:iPhone 14 Plus }
		{ platform:iOS Simulator, id:D8A94882-A6AF-426A-8372-717905864D49, OS:17.0, name:iPhone 14 Pro }
		{ platform:iOS Simulator, id:D8A94882-A6AF-426A-8372-717905864D49, OS:17.0, name:iPhone 14 Pro }
		{ platform:iOS Simulator, id:6D839990-6250-4164-8EAB-3D7AD9829B8A, OS:17.0, name:iPhone 14 Pro Max }
		{ platform:iOS Simulator, id:6D839990-6250-4164-8EAB-3D7AD9829B8A, OS:17.0, name:iPhone 14 Pro Max }
		{ platform:iOS Simulator, id:194F66D9-A7A1-4491-8989-3B25FD351D7C, OS:17.0, name:iPhone SE (3rd generation) }
		{ platform:iOS Simulator, id:194F66D9-A7A1-4491-8989-3B25FD351D7C, OS:17.0, name:iPhone SE (3rd generation) }

	Ineligible destinations for the "RevealServer" scheme:
		{ platform:iOS, id:254d9f75b728750efc9b6a75c4c2611ca5a7d97b, name:Ted's iPad, error:To use Ted's iPad for development, enable Developer Mode in Settings → Privacy & Security.  }

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.

Optionally support emitting errors and test failures using Github Actions reporter format (like SwiftLint)
4 participants