SwiftPackageIndex / PackageList

The master list of repositories for the Swift Package Index.
https://swiftpackageindex.com
Apache License 2.0
775 stars 609 forks source link

Linux support #33

Closed drewag closed 4 years ago

drewag commented 5 years ago

As far as I can tell, there is no way to filter or even see if a package has Linux support. This is a major use case for me as most of what I do is cross-platform and it is much harder to find packages that are also cross-platform.

daveverwer commented 5 years ago

You're right. However, as far as I know there's no way for a package author to indicate in the manifest that the package supports Linux.

I'd really love to add this feature, but I don't know how to figure out whether a package supports Linux (other than compiling it).

helje5 commented 5 years ago

Compile it! :-)

A reasonable heuristic should be this:

drewag commented 5 years ago
  • grep for import uikit,cocoa, other mac only stuff

That wouldn't work for some of my repos because I sometimes #if def them out.

I assume it will come to the SPM spec at some point, but perhaps for now you can define your own spec? (especially since repositories are manually submitted anyway).

Another option would be to look for the "Platforms" tag in the README that a lot of repositories use.

drewag commented 5 years ago

Also, FYI, compiling on Linux isn't enough to indicate it truly supports linux. Unfortunately there are still some Linux runtime issues. I wouldn't really trust a repo unless it explicitly says it supports Linux.

helje5 commented 5 years ago

How does it matter if you ifdef them out? that doesn’t affect grep and is the point of checking for os(linux). successful compilation is a near 100% check that it’ll work. But sure, running the tests is a no brainer too ;-)

helje5 commented 5 years ago

do you have a package at hand which fails my heuristics?

drewag commented 5 years ago

@helje5 Yup, Swiftlier because of FileSystem+iOSDirectories. It contains an import UIKit.

helje5 commented 5 years ago

Hm, fair enough. So it ignores packages which are Linux compatible but have Apple extensions.

So extra check: This one has a .travis.yml w/ an os: linux, that is a perfect indicator :-)

drewag commented 5 years ago

Same with a Linux job in azure-pipelines.yml :)

daveverwer commented 5 years ago

I'm interested in adding this feature but detecting it makes me feel funny, and not in a good way.

It looks like Linux support was originally proposed but didn't make it to evolution which is a shame. It does mention support in the future, but the future can be a long time away.

I've started putting together a spec for a definitive check for how to detect it, but I must admit I hate everything about using detection methods like this. 😂 They are prone to failure, and harder than they should be to implement.

If I do go down this path, I think the strategy should be to look for positive indicators before declaring Linux support rather than assuming support and then finding negative indicators... For example, grepping for import UIKit would be a really common negative indicator, where actually that import could be fine inside an #ifdef.

daveverwer commented 5 years ago

Also tracking this here: https://trello.com/c/aWEdW8ey/15-detect-libraries-that-support-linux

kiliankoe commented 5 years ago

If I do go down this path, I think the strategy should be to look for positive indicators before declaring Linux support rather than assuming support and then finding negative indicators...

Since you can't be 100% certain a package is compatible with a specific platform without compiling it and running all code paths, another option would be to assign a score and use a few of the aforementioned heuristics with positive and negative values to come to a conclusion on how likely it is that Linux is supported.

daveverwer commented 5 years ago

Honestly, I think the more I've thought about this today the more in favour I am of making this a completely opt-in thing by the package author.

Something like placing a .supports_linux (not necessarily that, but some file placed somewhere) file in the repository root. That way, it's the authors responsibility, and decision on whether to declare support for linux, as it is with their decision to state support for a specific version of iOS, macOS, etc...

I really wish the Package.swift was just a JSON or YML file so it could be extended, but it's not.

I have actually been thinking about making a spec for an additional metadata file which could go in the repository that would potentially include categorisation, a better description, keywords, etc... If I do this, having that be where the Linux support flag lives would be good. Need to think about this more though, and the library needs to get some adoption before people would consider adding a metadata file specifically for it.

daveverwer commented 5 years ago

I've been giving this more thought and have opened up a quick survey on the extra metadata idea. https://iosdevweekly.com/issues/416#start

Ponyboy47 commented 5 years ago

I realize this is slightly off-topic for this thread, but you mentioned how you've been considering making a spec for your own metadata file (and I took your short survey) so I'm trying to make a persuasive argument for why it would be a great idea ;)

There have been pitches/discussions about extending Package.swift to include metadata, but they haven't gone anywhere. The main issue is that there isn't any clear consensus about where the metadata should reside, but there is widespread support of putting it somewhere so that we're at least moving towards the end goal of an official SwiftPM Package Manager.

I think this is a great first step though! It was stated in those forum discussions that if someone just went out and made their own Metadata format and if it gained widespread usage that it could end up being a candidate for the official metadata file/format in SwiftPM. Perhaps we could discuss and come up with a metadata format here, then if people began adopting it we could later on propose it (or something similar to it after we learn from any mistakes we make) to the swift evolution and see where it goes.

daveverwer commented 5 years ago

I think it's perfectly on topic for this thread, the idea of that metadata file came partially out of this conversation and it would potentially fix this problem.

There have been pitches/discussions about extending Package.swift to include metadata, but they haven't gone anywhere. The main issue is that there isn't any clear consensus about where the metadata should reside, but there is widespread support of putting it somewhere so that we're at least moving towards the end goal of an official SwiftPM Package Manager.

This is the biggest thing for me. The people who have responded to the survey so far who have said this is a bad idea are consistent in saying that it should be done through evolution. I agree with them, that would be best, but it's going to take a long time and I feel we need this now. I also feel this is a way we can quickly see what works and what demand there is for different metadata.

I genuinely don't want to subvert the evolution process. I want this to feed back into it, while at the same time providing immediate value for the library.

helje5 commented 5 years ago

I really wish the Package.swift was just a JSON or YML file so it could be extended, but it's not.

Not sure I can follow that, you can simple do a:

let SwiftPMLibraryInfo = [
  "supportsLinux": true
]

It'll be ignored by SPM just like other JSON/YML tools ignore extra stuff.

daveverwer commented 5 years ago

It'll be ignored by SPM just like other JSON/YML tools ignore extra stuff.

That's true, but as far as I know it would also be ignored by swift package dump-package which is what I'm running to extract the metadata right now. I don't really want to parse the Swift in that file manually.

Ponyboy47 commented 5 years ago

Found the forum thread I mentioned: https://forums.swift.org/t/pitch-adding-metadata-to-spm-package/25720

helje5 commented 5 years ago

BTW (srz if I'm annoying 😎): I still think that just compiling the package in a Linux docker container is the best way to test for Linux compat. Yes, I know there is still a possibility that the package won't actually run on Linux due to Linux Foundation missing certain things, but that really is a bug in Foundation!

The first run would take a while to build through 1k packages, but few of them are updated every day. A 3€/month Scaleway/DO instance should be more than sufficient to run such a daily job. Go for it! :-)

Ponyboy47 commented 5 years ago

You could also just assume that the ones which use travis/circle/other CIs to build on linux will support linux. But then you'd have to look for those CI files and parse them...

drewag commented 5 years ago

I like the idea of a “PackageInfo.json” in the root. To make it localizable, it should be allowed to specify language specific overrides in: “PackageInfo.en.json” and so on (any keys in there set/override keys in the main PackageInfo.json

kiliankoe commented 5 years ago

As much as I like the idea of a spec for metadata, I agree a lot with @helje5. Even if a package says it supports Linux, it doesn't have to. Not saying that package authors are malicious, but I've run into this myself many times. Without actually trying to build (and/or run) on Linux, you won't be aware of many potential pitfalls. Make a small change, push the change and everything breaks on another platform I don't test regularly.

kiliankoe commented 5 years ago

I went ahead and tried building all 988 packages listed (as of 63463c8a4d5f3325135a9208847284cc4e20159a) against the current official Swift docker container version (Swift v5.0.2), the following is a list of packages for which swift build returns 0 as the exit code. Use it if you like, I just wanted to see the outcome as I was curious. This does not mean that everything else runs on some subset of Darwin platforms, I saw quite a few could not find source files for target(s); use the 'path' property in the Swift 4 manifest to set a custom target path errors for example, apparently many packages just added a manifest without ever trying it out 🙈

It's 354/988 packages, ~35%.

Click to expand ``` https://github.com/0111b/JSONDecoder-Keypath.git https://github.com/abdullahselek/Lighty.git https://github.com/alexaubry/HTMLString.git https://github.com/alexaubry/QuerySerialization.git https://github.com/AliSoftware/Dip.git https://github.com/AlTavares/Nappa.git https://github.com/AlwaysRightInstitute/cows.git https://github.com/AlwaysRightInstitute/mustache https://github.com/AlwaysRightInstitute/Shell https://github.com/AlwaysRightInstitute/SwiftEliza.git https://github.com/AndrewBarba/ed25519.git https://github.com/antitypical/Result.git https://github.com/ApolloZhu/swift_qrcodejs.git https://github.com/apple/swift-nio.git https://github.com/apple/swift-protobuf.git https://github.com/ArtSabintsev/Guitar.git https://github.com/asensei/AnyCodable.git https://github.com/asensei/Result.git https://github.com/asoderman/JSONDecoder.git https://github.com/attaswift/BigInt.git https://github.com/attaswift/SipHash.git https://github.com/behrang/YamlSwift.git https://github.com/BellAppLab/Weakable.git https://github.com/BenchR267/Parsel.git https://github.com/Bersaelor/KDTree.git https://github.com/Bersaelor/SwiftyHYGDB.git https://github.com/BiAtoms/Xml.swift.git https://github.com/bibinjacobpulickal/AutoLayoutProxy.git https://github.com/bignerdranch/Deferred.git https://github.com/Boilertalk/BigInt.swift.git https://github.com/Boilertalk/Keystore.swift.git https://github.com/Boilertalk/Web3.swift.git https://github.com/broadwaylamb/OpenCombine.git https://github.com/capnslipp/NilCoalescingAssignmentOperators.git https://github.com/capnslipp/Tribool.git https://github.com/Carthage/Commandant.git https://github.com/cbguder/CBGPromise.git https://github.com/cellular/cellular-swift.git https://github.com/chicio/ID3TagEditor.git https://github.com/cloudant/swift-cloudant.git https://github.com/commercetools/commercetools-ios-sdk.git https://github.com/crossroadlabs/Regex.git https://github.com/cszatma/SwiftySweetness.git https://github.com/daniel1of1/CSwiftV.git https://github.com/DarthStrom/Moxie.git https://github.com/dastrobu/vincenty.git https://github.com/davbeck/MultipartForm.git https://github.com/davecom/SwiftCSP.git https://github.com/davecom/SwiftGraph.git https://github.com/davecom/SwiftPriorityQueue.git https://github.com/davedufresne/SwiftParsec.git https://github.com/davidlivadaru/DLAngle.git https://github.com/davidlivadaru/DLInterval.git https://github.com/dchakarov/TrainInformationService.git https://github.com/ddddxxx/Semver.git https://github.com/dduan/BitArray.git https://github.com/dduan/comprehension.git https://github.com/dduan/Pathos.git https://github.com/DeclarativeHub/ReactiveKit.git https://github.com/devxoul/Immutable.git https://github.com/devxoul/Pure.git https://github.com/dfed/XCTest-watchOS.git https://github.com/DiUS/pact-consumer-swift.git https://github.com/drewag/Decree.git https://github.com/drewag/DecreeServices https://github.com/drewag/Swiftlier https://github.com/drewag/SwiftlierCLI https://github.com/dreymonde/Delegated.git https://github.com/dreymonde/Time.git https://github.com/drichardson/SwiftyBase64.git https://github.com/drmohundro/SWXMLHash.git https://github.com/DuetHealth/Bedrock.git https://github.com/eman6576/SGCircuitBreaker.git https://github.com/eman6576/SGSwiftyBind.git https://github.com/envoy/Embassy.git https://github.com/erikstrottmann/Rations.git https://github.com/evgenyneu/SigmaSwiftStatistics.git https://github.com/f-meloni/TestSpy.git https://github.com/fabiorodella/FreeformJSON.git https://github.com/FabioTacke/RingSig.git https://github.com/FabrizioBrancati/BFKit-Swift.git https://github.com/FabrizioBrancati/Queuer.git https://github.com/fassko/MeteoLVProvider.git https://github.com/fassko/TartuWeatherProvider.git https://github.com/FitnessKit/AntMessageProtocol.git https://github.com/FitnessKit/DataDecoder.git https://github.com/FitnessKit/FitDataProtocol.git https://github.com/FitnessKit/FitnessUnits.git https://github.com/FitnessKit/TcxDataProtocol.git https://github.com/Fitzafful/BillboardSwiftLibrary.git https://github.com/Flinesoft/CSVImporter.git https://github.com/Flinesoft/HandySwift.git https://github.com/flowtoolz/SwiftObserver.git https://github.com/flowtoolz/SwiftyToolz.git https://github.com/Frugghi/SwiftLCS.git https://github.com/Fyrts/Multipart.git https://github.com/getGuaka/Args.git https://github.com/getGuaka/Colorizer.git https://github.com/getGuaka/Env.git https://github.com/getGuaka/FileUtils.git https://github.com/getGuaka/Regex.git https://github.com/getGuaka/Run.git https://github.com/getGuaka/StringScanner.git https://github.com/gjeck/PathTemplate.swift.git https://github.com/google/open-location-code-swift.git https://github.com/halcyonmobile/ReleaseRadar.git https://github.com/hectr/swift-idioms.git https://github.com/hectr/swift-regex.git https://github.com/hectr/swift-shell-interface.git https://github.com/hectr/swift-stream-reader.git https://github.com/heyzooi/IPData.git https://github.com/hironytic/Eventitic.git https://github.com/hirotakan/MessagePacker.git https://github.com/holiday-jp/holiday_jp-swift.git https://github.com/httpswift/swifter.git https://github.com/IBM-Swift/BlueSignals.git https://github.com/IBM-Swift/BlueSocket.git https://github.com/IBM-Swift/CircuitBreaker.git https://github.com/IBM-Swift/KituraContracts.git https://github.com/IBM-Swift/KituraKit.git https://github.com/IBM-Swift/LoggerAPI.git https://github.com/IBM-Swift/Swift-Kuery-ORM.git https://github.com/IBM-Swift/Swift-Kuery.git https://github.com/IBM-Swift/SwiftyRequest.git https://github.com/iCell/CryptoCurrency.git https://github.com/ikesyo/Himotoki.git https://github.com/Ikiga/IkigaJSON.git https://github.com/imbue11235/EventHub.git https://github.com/jakeheis/SwiftCLI.git https://github.com/jasl/RouterX.git https://github.com/jawziyya/fawaid-models.git https://github.com/jdhealy/PrettyColors.git https://github.com/jianstm/Once.git https://github.com/jkandzi/Progress.swift.git https://github.com/jkolb/FieryCrucible.git https://github.com/jkolb/FranticApparatus.git https://github.com/jnewc/Cosmic.git https://github.com/johnsundell/files.git https://github.com/johnsundell/require.git https://github.com/JohnSundell/ShellOut.git https://github.com/JohnSundell/Splash.git https://github.com/JohnSundell/Wrap.git https://github.com/JonathanDowning/SwiftMETAR.git https://github.com/jpsim/SourceKitten.git https://github.com/jpsim/Yams.git https://github.com/kareman/Moderator.git https://github.com/kareman/SwiftShell.git https://github.com/Kawoou/AnyDate.git https://github.com/kawoou/Deli.git https://github.com/kean/FutureX.git https://github.com/kean/NaiveDate.git https://github.com/khanlou/Promise.git https://github.com/khoi/fuzzy-swift.git https://github.com/kiliankoe/CLISpinner.git https://github.com/kiliankoe/Corkboard.git https://github.com/kiliankoe/DVB.git https://github.com/kiliankoe/StuWeDD.git https://github.com/kittymo/MoRegex.git https://github.com/KristopherGBaker/libcmark_gfm.git https://github.com/krzysztofzablocki/Difference.git https://github.com/krzyzanowskim/CryptoSwift.git https://github.com/Kuniwak/MemoryLeakTestKit.git https://github.com/Kuniwak/MirrorDiffKit.git https://github.com/kylef/Commander.git https://github.com/kylef/fd.git https://github.com/kylef/JSONWebToken.swift.git https://github.com/kylef/PathKit.git https://github.com/kylef/Spectre https://github.com/kylef/URITemplate.swift.git https://github.com/leacode/Earth.git https://github.com/lightstep/opentracing-swift.git https://github.com/Liquidsoul/Sourcery-AutoJSONSerializable.git https://github.com/ljcoder2015/LJTool.git https://github.com/loopwxservices/WXKDarkSky.git https://github.com/lvsti/MockSix.git https://github.com/malcommac/Repeat.git https://github.com/malcommac/SwiftDate.git https://github.com/malcommac/SwiftScanner.git https://github.com/malcommac/UAParserSwift.git https://github.com/manuelCarlos/Easing.git https://github.com/mapbox/turf-swift.git https://github.com/marty-suzuki/Prex.git https://github.com/MaxDesiatov/XMLCoder.git https://github.com/maximbilan/SwiftGoogleTranslate.git https://github.com/maximbilan/SwiftOxfordAPI.git https://github.com/mcfedr/DNS.git https://github.com/mikaoj/EnigmaKit.git https://github.com/MiniDOM/MiniDOM.git https://github.com/miximka/MimeParser.git https://github.com/mobileforming/WiremockClient.git https://github.com/modswift/ExExpress.git https://github.com/Molbie/Outlaw.git https://github.com/morishin/RFC3339DateFormatter.git https://github.com/mpangburn/FunctionKit.git https://github.com/mtynior/ColorizeSwift.git https://github.com/muukii/Bulk.git https://github.com/muukii/JAYSON.git https://github.com/mw99/OhhAuth.git https://github.com/mxcl/Path.swift https://github.com/mxcl/PromiseKit.git https://github.com/mxcl/Version https://github.com/myfreeweb/SwiftCBOR.git https://github.com/Neo4j-Swift/bolt-swift.git https://github.com/Neo4j-Swift/Neo4j-Swift.git https://github.com/neo4j-swift/PackStream-Swift.git https://github.com/nerdishbynature/octokit.swift.git https://github.com/nerdishbynature/RequestKit.git https://github.com/nicklockwood/Euclid.git https://github.com/nicklockwood/Expression.git https://github.com/nicklockwood/SwiftFormat.git https://github.com/nicklockwood/VectorMath.git https://github.com/Nike-Inc/Elevate.git https://github.com/nikola-mladenovic/AwsSwiftDynamoDBsdk.git https://github.com/nikola-mladenovic/AwsSwiftLambdaSdk.git https://github.com/nikola-mladenovic/AwsSwiftSign.git https://github.com/nmdias/FeedKit.git https://github.com/norio-nomura/Base32.git https://github.com/norio-nomura/ObjectEncoder.git https://github.com/NoTests/RxFeedback.swift.git https://github.com/NozeIO/swift-nio-irc-eliza.git https://github.com/NozeIO/swift-nio-irc-server.git https://github.com/NozeIO/swift-nio-irc-webclient.git https://github.com/nsomar/Guaka.git https://github.com/objcio/tiny-networking.git https://github.com/objective-audio/SwiftFlowGraph.git https://github.com/OneAfternoon/Ward.git https://github.com/onmyway133/SwiftHash.git https://github.com/palle-k/Covfefe.git https://github.com/pascalbros/IotaC.git https://github.com/patgoley/Configurate.git https://github.com/pedantix/TimedCache.git https://github.com/pkrll/SwiftArgs.git https://github.com/pksprojects/ElasticSwift.git https://github.com/pointfreeco/swift-nonempty.git https://github.com/pointfreeco/swift-overture.git https://github.com/pointfreeco/swift-snapshot-testing.git https://github.com/pointfreeco/swift-tagged.git https://github.com/pointfreeco/swift-validated.git https://github.com/ponyboy47/ConfigParser.git https://github.com/ponyboy47/Downpour.git https://github.com/ponyboy47/ErrNo.git https://github.com/ponyboy47/FFProbe.git https://github.com/ponyboy47/inotify.git https://github.com/ponyboy47/Termios.git https://github.com/ponyboy47/TrailBlazer.git https://github.com/ponyboy47/TranscodeVideo.git https://github.com/postmates/PMJSON.git https://github.com/quanvo87/GroupWork.git https://github.com/Quick/Nimble.git https://github.com/Quick/Quick.git https://github.com/ra1028/DifferenceKit.git https://github.com/radex/SwiftyUserDefaults.git https://github.com/ReactiveCocoa/ReactiveSwift.git https://github.com/ReactiveX/RxSwift.git https://github.com/realm/SwiftLint.git https://github.com/richardpiazza/SOSwift.git https://github.com/richardpiazza/SOSwiftVocabulary.git https://github.com/roberthein/Observable.git https://github.com/ronanrodrigo/Frisbee.git https://github.com/rwbutler/Cheats.git https://github.com/RxSwiftCommunity/RxKeyboard.git https://github.com/safx/Cron-Swift.git https://github.com/sammy-SC/GPX.git https://github.com/sbxcloud/sbxcloudswift.git https://github.com/scaraux/Swift-Porter-Stemmer-2.git https://github.com/scinfu/SwiftSoup.git https://github.com/scottrhoyt/SwiftyTextTable.git https://github.com/SD10/GitDiffSwift.git https://github.com/serhii-londar/BaseAPI.git https://github.com/shamatar/EthereumAddress.git https://github.com/shamatar/scrypt-cryptoswift.git https://github.com/shamatar/SwiftRLP.git https://github.com/sharplet/Regex.git https://github.com/shial4/SLazeKit.git https://github.com/SlackKit/SKClient.git https://github.com/SlackKit/SKCore.git https://github.com/SlackKit/SKServer.git https://github.com/SlackKit/SKWebAPI.git https://github.com/spropensource/ArchitectureComponents.git https://github.com/stencilproject/Stencil.git https://github.com/superk589/RijndaelSwift.git https://github.com/svdo/swift-netutils.git https://github.com/swhitty/DictionaryDecoder.git https://github.com/swhitty/SwiftDraw.git https://github.com/swiftbrew/Swiftbrew.git https://github.com/SwifterSwift/SwifterSwift.git https://github.com/SwiftGen/StencilSwiftKit.git https://github.com/SwiftGL/Image.git https://github.com/SwiftGL/Math.git https://github.com/SwiftGL/OpenGL.git https://github.com/SwiftNIOExtras/swift-nio-irc.git https://github.com/SwiftNIOExtras/swift-nio-redis.git https://github.com/SwiftObjects/SwiftObjects.git https://github.com/SwiftScream/URITemplate.git https://github.com/SwiftStudies/OysterKit.git https://github.com/SwiftyBeaver/AES256CBC.git https://github.com/SwiftyBeaver/SBObjectiveCWrapper.git https://github.com/SwiftyBeaver/SwiftyBeaver.git https://github.com/SwiftyLinkerKit/SwiftyLinkerKit.git https://github.com/SwiftyLinkerKit/SwiftyTM1637.git https://github.com/Swinject/Swinject.git https://github.com/tadija/AEXML.git https://github.com/tevelee/Eval.git https://github.com/thii/HTTPMethod.git https://github.com/thii/xcbeautify.git https://github.com/thii/yes.git https://github.com/Thomvis/BrightFutures.git https://github.com/thoughtbot/curry.git https://github.com/tiferrei/UCLKit.git https://github.com/timdonnelly/Advance.git https://github.com/tinrobots/Mechanica.git https://github.com/to4iki/Reader.git https://github.com/tonystone/tracelog.git https://github.com/tosbaha/SMLib.git https://github.com/tribalworldwidelondon/CassowarySwift.git https://github.com/tsolomko/BitByteData.git https://github.com/typelift/SwiftCheck.git https://github.com/typelift/Swiftx.git https://github.com/typelift/Swiftz.git https://github.com/ukitaka/XCTAssertUnrecoverable.git https://github.com/uraimo/SwiftyGPIO.git https://github.com/v57/scrypt.c.git https://github.com/v57/secp256k1.c.git https://github.com/vadymmarkov/Fakery.git https://github.com/vapor/bits.git https://github.com/vapor/core.git https://github.com/vapor/debugging.git https://github.com/vapor/json.git https://github.com/vapor/node.git https://github.com/ViacomInc/ViaSwiftUtils.git https://github.com/vincent-pradeilles/weakable-self.git https://github.com/vinhnx/spawn https://github.com/vknabel/SwiftHook.git https://github.com/watson-developer-cloud/restkit.git https://github.com/watson-developer-cloud/swift-sdk.git https://github.com/Weebly/OrderedSet.git https://github.com/wickwirew/Runtime.git https://github.com/wolfmcnally/ExtensibleEnumeratedName.git https://github.com/wolfmcnally/WolfConcurrency.git https://github.com/wolfmcnally/WolfCore.git https://github.com/wolfmcnally/WolfFoundation.git https://github.com/wolfmcnally/WolfLorem.git https://github.com/wolfmcnally/WolfNesting.git https://github.com/wolfmcnally/WolfOSBridge.git https://github.com/wolfmcnally/WolfStrings.git https://github.com/wolfmcnally/WolfWith.git https://github.com/woxtu/NSString-RemoveEmoji.git https://github.com/yanamura/Tempry.git https://github.com/yannickl/AwaitKit.git https://github.com/yaslab/CSV.swift.git https://github.com/yonaskolb/Codability.git https://github.com/yume190/JSONDecodeKit.git https://github.com/Zewo/Reflection.git https://github.com/zonble/ActiveDays.git ```
drewag commented 5 years ago

I’d be curious how many also have a non-zero number of tests and have a successful “swift test” on Linux

daveverwer commented 5 years ago

BTW (srz if I'm annoying 😎)

Not at all! But I'm not sure this is something I want to do, even if it would be cheap/easy. I set out to build a package search tool rather than a CI system. I'm definitely in favour of having a better handle on linux compatibility, but it's not really why I built the SwiftPM library.

I'm happy to trust when people declare compatibility with iOS, macOS, tvOS and watchOS through metadata in the Package.swift and I see Linux in the same way.

I’d be curious how many also have a non-zero number of tests and have a successful “swift test” on Linux

Again this would be fascinating data, and not just on Linux but on the other platforms too. I'm going to be really cautious before trying to do this though. Metadata feels like the right approach to me for this project, for now.

daveverwer commented 5 years ago

I saw quite a few could not find source files for target(s); use the 'path' property in the Swift 4 manifest to set a custom target path errors for example, apparently many packages just added a manifest without ever trying it out 🙈

Yes, and this is after an initial purge of several different types of failures. My initial scrape was cut down by 50% just by applying a few simple checks 1, 2, 3.

I removed those because they should never have been there but I don't want to be a gatekeeper. I only want to limit the index to libraries that support the SPM, and that are written in Swift 4+ (but only because the tools will no longer work with Swift 3 and below). With those very basic rules, I think I'm happy to have all other packages in the index.

My hope is that the search ranking will bubble the good results to the top, and that that'll be enough. I know this is probably naive but it's my current plan.

daveverwer commented 4 years ago

implemented here https://blog.swiftpackageindex.com/posts/launching-language-and-platform-package-compatibility/