<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Orta,<div class=""><br class=""></div><div class="">I’m also very interested in that topic, and I have some info which might interest you:</div><div class=""><br class=""></div><div class="">I have been working on similar functionality, but at the local level (<b class="">npm install danger &amp;&nbsp;npm run danger</b>). Part of the work I did was integrated in the Swift Package Manager for Swift 4 and the rest will probably get released with the next point release (i.e., Swift 4.1).</div><div class=""><br class=""></div><div class="">For the sake of demonstration, lets imagine we’re already using Swift 4.1. You can add&nbsp;<b class="">danger-swift</b> as a dependency in a <b class="">Package.swift</b> - you can even use an empty Package.swift:</div><div class=""><br class=""></div><div class=""><pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; margin-bottom: 0px; word-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(246, 248, 250); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal; color: rgb(36, 41, 46);" class=""><span class="pl-c" style="box-sizing: border-box; color: rgb(106, 115, 125);"><span class="pl-c" style="box-sizing: border-box;">//</span> swift-tools-version:4.0</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(106, 115, 125);"></span><span class="pl-k" style="box-sizing: border-box; color: rgb(215, 58, 73);">import</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(111, 66, 193);">PackageDescription</span>

<span class="pl-k" style="box-sizing: border-box; color: rgb(215, 58, 73);">let</span> package <span class="pl-k" style="box-sizing: border-box; color: rgb(215, 58, 73);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 92, 197);">Package</span>(
    <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 92, 197);">name</span>: <span class="pl-s" style="box-sizing: border-box; color: rgb(3, 47, 98);"><span class="pl-pds" style="box-sizing: border-box;">"</span>MyProject<span class="pl-pds" style="box-sizing: border-box;">"</span></span>,
    <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 92, 197);">dependencies</span>: [
        .<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 92, 197);">package</span>(<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 92, 197);">url</span>: <span class="pl-s" style="box-sizing: border-box; color: rgb(3, 47, 98);"><span class="pl-pds" style="box-sizing: border-box;">"</span><a href="https://github.com/danger/danger-swift.git" class="">https://github.com/danger/danger-swift.git</a><span class="pl-pds" style="box-sizing: border-box;">"</span></span>, <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 92, 197);">from</span>: <span class="pl-s" style="box-sizing: border-box; color: rgb(3, 47, 98);"><span class="pl-pds" style="box-sizing: border-box;">"</span>1.0.0<span class="pl-pds" style="box-sizing: border-box;">"</span></span>)
    ])</pre><div class=""><br class=""></div></div><div class="">Then, you can run danger with:</div><div class=""><br class=""></div><div class=""><pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; word-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(246, 248, 250); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(36, 41, 46); margin-bottom: 0px !important;" class=""><code style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; padding: 0px; margin: 0px; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal; border: 0px; display: inline; overflow: visible; line-height: inherit; word-wrap: normal;" class="">$ swift run danger</code></pre></div><div class=""><br class=""></div><div class="">As of Swift 4, <b class="">swift run</b> will only work for executable products defined in the current Package. But that will change in the next release.</div><div class=""><br class=""></div><div class="">Now, concerning global installation, I know that the Swift Package Manager team have already thought a lot about it, so it might be interested to see what they had in mind.</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">David.</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 14 Sep 2017, at 19:15, Orta Therox via swift-build-dev &lt;<a href="mailto:swift-build-dev@swift.org" class="">swift-build-dev@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hey all,<div class=""><br class=""></div><div class="">I've been working on a SwiftPM executable (<a href="https://github.com/danger/danger-swift" class="">danger-swift</a>) which is a pretty small CLI tool. I feel like it's a bunch of work to allow a user to get a copy of the app running on their computer / CIs. My current app distributions options are:&nbsp;<a href="https://brew.sh/" class="">Homebrew</a> and <a href="https://github.com/JohnSundell/Marathon" class="">Marathon</a>&nbsp;(which I added to homebrew) or a custom cURL'd setup script. None are great, because it requires many build steps and require custom installers.&nbsp;</div><div class=""><br class=""></div><div class="">In an eco-system like Node/Ruby I can do something like "<font face="monospace, monospace" class="">npm install -g danger</font>" which uses the centralized index, or &nbsp;"<font face="monospace, monospace" class="">npm install -g danger/danger-js</font>" if I wanted to use a repo which would install CLI tools. I'd like to see SwiftPM cover this part of the swift ecosystem, and encourage building small CLI tools in swift.</div><div class=""><br class=""></div><div class="">So, as an example of behavior, running this new command: "<font face="monospace, monospace" class="">swift install danger/danger-swift</font>" would:</div><div class=""><br class=""></div><div class="">- use the&nbsp;<span style="font-family:monospace,monospace" class="">danger/danger-swift </span>a shortcut for GitHub, and clone that repo into a temporary folder</div><div class="">- parse the <a href="https://github.com/danger/danger-swift/blob/master/Package.swift" class="">Package.swift</a> then let the user know they are going to install the CLI executable danger-swift</div><div class="">- run&nbsp;<span style="font-family:monospace,monospace" class="">swift build&nbsp;</span>in release mode</div><div class="">- install the executable into a folder in the users default path</div><div class=""><br class=""></div><div class="">This greatly reduces the friction to making more tools, and reduces the number of dependencies for users to being the Xcode CLT which basically everyone has out of the box.</div><div class=""><br class=""></div><div class="">I'm willing to take a stab at an implementation if this has approval of Anders/Daniel.<br class=""></div><div class=""><br class=""></div><div class=""><div class=""><div class="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div style="font-family: Helvetica; margin: 0px;" class="">--&nbsp;</div><div style="font-family: Helvetica; margin: 0px;" class=""><span style="color:rgb(35,35,35);font-size:12px" class="">[A.]</span><span style="color:rgb(35,35,35);font-size:12px;white-space:pre" class="">        </span>&nbsp; &nbsp; &nbsp; <span style="color:rgb(35,35,35);font-size:12px" class="">Orta Therox</span></div><div style="font-family:Helvetica;font-size:12px;margin:0px;color:rgb(35,35,35);min-height:14px" class=""><blockquote style="font-size: 14px; margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div style="word-wrap:break-word" class=""><div style="word-wrap:break-word" class=""><div style="margin:0px;font-size:12px;color:rgb(35,35,35);min-height:14px" class=""><blockquote type="cite" style="border-left-color:rgb(0,33,98);color:rgb(0,33,98);border-width:1px;margin-left:0px;padding-left:10px;padding-right:0px;margin-right:0px" class=""><span style="border-collapse:collapse;color:rgb(34,34,34)" class=""><div style="margin:0px" class=""><span style="color:rgb(136,136,136)" class="">w/&nbsp;</span><a href="http://artsy.net/" target="_blank" class="">Artsy</a></div><div style="margin:0px" class=""><a href="http://cocoapods.org/" target="_blank" class="">CocoaPods</a>&nbsp;/&nbsp;<a href="http://cocoadocs.org/" target="_blank" class="">CocoaDocs</a></div><div style="margin:0px" class=""><a class="">@orta</a>&nbsp;/&nbsp;<a href="http://orta.github.com/" target="_blank" class="">orta.github.com</a></div><div style="margin:0px" class=""><br class=""></div></span></blockquote></div></div></div></blockquote></div><div style="font-family:Helvetica;font-size:12px;margin:0px;color:rgb(35,35,35)" class=""><br class=""></div></div><div class=""><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: inherit;" class=""></span></div></div></div></div></div></div>
</div></div>
_______________________________________________<br class="">swift-build-dev mailing list<br class=""><a href="mailto:swift-build-dev@swift.org" class="">swift-build-dev@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-build-dev<br class=""></div></blockquote></div><br class=""></div></body></html>