swift icon indicating copy to clipboard operation
swift copied to clipboard

Could not find a libDanger

Open dhananjaykumardubey opened this issue 3 years ago • 17 comments

Hi, I am trying to install Danger in M1 macbook pro. I tried installing with Brew and SPM, but when I try to do

swift run danger-swift pr {url} or danger-swift edit

I get the below error:

ERROR: Could not find a libDanger to link against at any of: [".build/debug", ".build/x86_64-unknown-linux/debug", ".build/release", "/usr/local/lib/danger"]

Or via Homebrew, or Marathon

Any help will be much appreciated. Thanks

dhananjaykumardubey avatar Apr 16 '21 08:04 dhananjaykumardubey

Can you please show me your Package.swift? That error is usualy really common in the SPM configuration when Danger is not linked to a target that can be build before the compilation, so there is no library when it goes to compile the Danger

f-meloni avatar May 10 '21 22:05 f-meloni

Hi everybody,

I have the same problem (also on an M1 processor).

But I installed dangerswift via brew:

npm install -g danger
 brew install danger / tap / danger-swift
 brew install swiftlint

Any help will be much appreciated. Thanks

Wooder avatar May 19 '21 08:05 Wooder

You (also) should post your package.swift like the comment above recommends

orta avatar May 20 '21 10:05 orta

Hi @orta & @f-meloni !

Thanks for your feedback.

I don't use a package.swift yet. (I thought it can also work without Package.swift)

I start danger via

danger-swift ci via Gitlab

on a Mac-Mini with M1 (Apple Silicon)

I noticed that the path /usr/local/lib/danger is stored in Runtime.swift -> potentialLibraryFolders (See here) . Unfortunately usr/local/lib does not exist on the Mac Mini M1.

I have created a link lib in /usr/local/ as a workaround: sudo ln -sf /opt/homebrew/lib/danger danger

The error message (ERROR: Could not find a libDanger to link ...) disappeared but a new error occurs:

/var/folders/wd/sdhj62j149q08d18m94g4p0r0000gn/T/_tmp_dangerfile.swift:1:8: error: module 'Danger' was created for incompatible target arm64-apple-macosx10.10: /usr/local/lib/danger/Danger.swiftmodule
import danger

Wooder avatar May 27 '21 09:05 Wooder

Ok, this is really interesting. I think there are two different things to fix then, the first one is find where homebrew saves the installed tools if there is no usr/local/lib I suppose on /opt/homebrew/lib/danger, so we sshould just add it to the potentialLibraryFolders and that should do it. The other thing is error: module 'Danger' was created for incompatible target arm64-apple-macosx10.10, I think there is an incompatibility issue, this might be harder to debug because I don't have an M1 device 🤔

f-meloni avatar Jun 01 '21 12:06 f-meloni

We are having the same issue on M1 MacMinis. Is the new ARM architecture supported?

Package.swift

import PackageDescription

let package = Package(
    name: "DangerTarget",
    products: [
        .library(
            name: "DangerDeps",
            type: .dynamic,
            targets: ["DangerDependencies"]),
    ],
    dependencies: [
        .package(url: "https://github.com/danger/swift.git", from: "3.10.1")
    ],
    targets: [
        .target(
            name: "DangerDependencies",
            dependencies: ["Danger"]
        ),
    ]
)

Command:

swift run danger-swift ci -d "../Dangerfile.swift" --failOnErrors false --verbose

Error: 

ERROR: Could not find a libDanger to link against at any of: [".build/debug", ".build/x86_64-unknown-linux/debug", ".build/release", "/usr/local/lib/danger"]
Or via Homebrew, or Marathon

peterlendvay avatar Jul 23 '21 10:07 peterlendvay

I had a similar issue with similar package.swift file mentioned by @peterlendvay , the workaround I applied was running

swift build -c release --product Danger # this will build `libDanger`
swift run danger-swift ci -c release

Danger-swift seems to work fine after this workaround.

weisunOW avatar Sep 03 '21 12:09 weisunOW

the first one is find where homebrew saves the installed tools if there is no usr/local/lib I suppose on /opt/homebrew/lib/danger, so we sshould just add it to the potentialLibraryFolders and that should do it.

@f-meloni looks like there are two similar threads. This looks promising. It would make sense because of the 2.6.0 Homebrew release.

morluna avatar Sep 04 '21 14:09 morluna

@f-meloni I was doing some digging, and it looks like the potentialLibraryFolders is already updated in master. Is this being tested already? Any ETA on when we can use that?

morluna avatar Sep 04 '21 15:09 morluna

@morluna Yes is been introduced in https://github.com/danger/swift/pull/458

I can make a realease so that can be tested

f-meloni avatar Sep 04 '21 16:09 f-meloni

I've released 3.11.0 with this change

f-meloni avatar Sep 04 '21 17:09 f-meloni

Thanks @f-meloni. ERROR: Could not find a libDanger issue is fixed with this release.

But there's a new issue.

/var/folders/f2/dngvlrg54f968wxfzlqv0k7r0000gp/T/_tmp_dangerfile.swift:1:8: error: module 'Danger' was created for incompatible target arm64-apple-macosx10.10: /opt/homebrew/lib/danger/Danger.swiftmodule
import Danger 
     
  ^

ERROR: Dangerfile eval failed at Dangerfile.swift
ERROR: Could not get the results JSON file at /var/folders/f2/dngvlrg54f968wxfzlqv0k7r0000gp/T/danger-response.json

Error:  TypeError: Cannot read property 'metadata' of undefined
    at apiForDSL (/snapshot/danger-js/distribution/runner/jsonToDSL.js:119:78)
    at Object.<anonymous> (/snapshot/danger-js/distribution/runner/jsonToDSL.js:71:23)
    at step (/snapshot/danger-js/distribution/runner/jsonToDSL.js:32:23)
    at Object.next (/snapshot/danger-js/distribution/runner/jsonToDSL.js:13:53)
    at /snapshot/danger-js/distribution/runner/jsonToDSL.js:7:71
    at new Promise (<anonymous>)
    at /snapshot/danger-js/distribution/runner/jsonToDSL.js:3:12
    at Object.jsonToDSL (/snapshot/danger-js/distribution/runner/jsonToDSL.js:64:53)
    at Object.<anonymous> (/snapshot/danger-js/distribution/commands/utils/runDangerSubprocess.js:162:54)
    at step (/snapshot/danger-js/distribution/commands/utils/runDangerSubprocess.js:43:23)
    ```

dhananjaykumardubey avatar Sep 07 '21 03:09 dhananjaykumardubey

@dhananjaykumardubey seems that the danger library was compiled in a non compatible way. I don't have an Apple Silicon device to try it, but I think that https://github.com/danger/swift/pull/462 might fix it

f-meloni avatar Sep 13 '21 19:09 f-meloni

@f-meloni I'm down to help test this if you put up a release for it. We have a Silicon machine!

morluna avatar Sep 15 '21 15:09 morluna

Thank you @morluna, I've released 3.11.1 with this change, let me know if it fixes the issue. @majd already tried the change before the release and it seemed to work

f-meloni avatar Sep 16 '21 00:09 f-meloni

Same problem here when try to install DangerSwift via Package.swift on a local machine, which is not M1 but Intel i7.

Here's the Package.swift file:

// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "Danger",
//    platforms: [.macOS(.v10_15)],
    products: [
        .library(name: "DangerDeps[DangerLib]",
                 type: .dynamic,
                 targets: ["DangerDependencies"]),
    ],
    dependencies: [
        .package(url: "https://github.com/danger/swift.git", from: "3.0.0"),
        // Danger Plugins
        .package(url: "https://github.com/f-meloni/danger-swift-xcodesummary.git", from: "1.2.0"),
        .package(url: "https://github.com/f-meloni/danger-swift-coverage.git", from: "1.2.0"),
        .package(url: "https://github.com/el-hoshino/DangerSwiftHammer.git", from: "0.1.0"),
    ],
    targets: [
        .target(
            name: "DangerDependencies",
            dependencies: [
                .product(name: "danger-swift", package: "swift"),
                .product(name: "DangerXCodeSummary", package: "danger-swift-xcodesummary"),
                .product(name: "DangerSwiftCoverage", package: "danger-swift-coverage"),
                .product(name: "DangerSwiftHammer", package: "DangerSwiftHammer"),
            ]
        ),
    ]
)

And what's even more weird is that on Bitrise it seems able to run, except it can't link modules with an error message below:

/var/folders/6q/wgy6jtp12w5gzgm9lzcglpqw0000gn/T/_tmp_dangerfile.swift:3:8: error: no such module 'DangerXCodeSummary'
import DangerXCodeSummary

el-hoshino avatar Oct 07 '21 06:10 el-hoshino

Yah.. get this in Xcode Cloud builds too:

Could not find a libDanger to link against at any of: [".build/debug", ".build/x86_64-unknown-linux/debug", ".build/release", "/usr/local/lib/danger", "/opt/homebrew/lib/danger"] Or via Homebrew, or Marathon

from our ci_post_clone brew install danger/tap/danger-swift

khoogheem avatar Jul 03 '22 17:07 khoogheem