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

Dependency semantics differ between rails-assets and bower #324

Open
hut8 opened this issue Apr 13, 2016 · 0 comments
Open

Dependency semantics differ between rails-assets and bower #324

hut8 opened this issue Apr 13, 2016 · 0 comments
Labels

Comments

@hut8
Copy link
Member

hut8 commented Apr 13, 2016

This took me forever to track down, so I apologize for the long issue. In the error logs, I often see:

Build::BowerError: Package bootstrap-3 not found
  from build/utils.rb:21:in `rescue in bower'
  from build/utils.rb:10:in `bower'
  from update_component.rb:8:in `perform'
  from sidekiq/processor.rb:75:in `execute_job'
# ... lots more

This happens with a few packages other than bootstrap-*, but that's probably the most common one. The confusing part is that I had no idea what depended on bootstrap-3, and it looks like it's impossible to figure out reverse dependencies using the Bower API.

So I made a horrible hack that does this and basically uses bower-dependency-tree to write each dependency tree of every version in rails-assets to its own file. That took about two days to run doing 6 simultaneously:.

xargs --max-procs=6 --no-run-if-empty --delimiter='\n' \
           --max-args=1 --max-lines=1 --arg-file bower-dep-cmds.txt \
           bash --verbose -c

After searching for Package bootstrap-3 not found, I found a bunch that might cause this. One was bootstrap-tagsinput#0.4.1. In that package, I see: https://github.com/bootstrap-tagsinput/bootstrap-tagsinput/blob/0.4.1/bower.json#L30

  "dependencies": {
    "jquery": "~2.1.1",
    "bootstrap-3": "bootstrap#~3.2.0",
    "bootstrap-2.3.2": "bootstrap#2.3.2",
    "angular": "~1.2.21",
    "typeahead.js": "~0.10.4",
    "jasmine": "~2.0.1",
    "rainbow": "~1.1.9"
  }

Going to the bower dependencies spec, it says that the key must be a valid name. The definition I linked to specifies that name means:

The name of the package as stored in the registry.

There is no bootstrap-3 or bootstrap-2.3.2 in the bower registry. However, this works just fine: bower install -p -F tagsinput#0.4.1 --json, which is part of what's actually executed by the rails-assets build process.

The main problem that actually causes is that after it's built, it has a dependency that will never exist:

#<Version:0x000000088a2b60> {
               :id => 29589,
     :component_id => 3146,
           :string => "0.4.1",
     :dependencies => {
                 "rails-assets-jquery" => "~> 2.1.1",
                "rails-assets-angular" => "~> 1.2.21",
                "rails-assets-jasmine" => "~> 2.0.1",
                "rails-assets-rainbow" => "~> 1.1.9",
            "rails-assets-bootstrap-3" => "~> 3.2.0",
           "rails-assets-typeahead.js" => "~> 0.10.4",
        "rails-assets-bootstrap-2.3.2" => "2.3.2"
    },
# ...

Then when someone hits the dependency endpoint with one of these broken dependencies (averaging probably once every 5 minutes), it will try to build it again. In my opinion, bower seems to disobey the semantics it defined and should be fixed, but I would like others' opinions.

@hut8 hut8 added the bug label Apr 13, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant