Git Product home page Git Product logo

nexus-repository-conan's Introduction

Nexus Repository Conan Format

Maven Central CircleCI Join the chat at https://gitter.im/sonatype/nexus-developers DepShield Badge

Huzzah! Conan is now part of Nexus Repository Manager. Version 3.20 includes the Conan plugin by default. The plugin source code is now in nexus-public in nexus-repository-conan.

Filing issues: Upgrade to the latest version of Nexus Repository Manager 3, to get the latest fixes and improvements, before filing any issues or feature requests at https://issues.sonatype.org/.

Upgrading: If you are using a version prior to 3.20 and upgrade to a newer version you will not be able to install the community plugin. No other changes are required and your existing data will remain intact.

Table Of Contents

Developing

Contribution Guidelines

Go read our contribution guidelines to get a bit more familiar with how we would like things to flow.

Requirements

Also, there is a good amount of information available at Bundle Development

Building

To build the project and generate the bundle use Maven

mvn clean install

If everything checks out, the bundle for Conan should be available in the target folder

Using Conan with Nexus Repository Manager 3

We have detailed instructions on how to get started here!

Compatibility with Nexus Repository Manager 3 Versions

The table below outlines what version of Nexus Repository Manager the plugin was built against:

Plugin Version Nexus Repository Manager Version
v0.0.1 <3.11.0
v0.0.2 - v0.0.6 >=3.11.0
v1.0.0 In product >=3.22.0

Installing the plugin

In Nexus Repository Manager 3.22+ Conan proxy is already included, so there is no need to install it. But if you want to reinstall the plugin with your improvements then the following instructions will be useful. Note: Using an unofficial version of the plugin is not supported by the Sonatype Support team. Conan hosted repository is not supported and disabled by default. You can enable hosted repo by setting nexus.conan.hosted.enabled=true in NXRM's properties file.

Permanent Reinstall

  • Copy the bundle into: <nexus_dir>/system/org/sonatype/nexus/plugins/nexus-repository-conan/1.0.0/nexus-repository-conan-1.0.0.jar

  • Modify xml to introduce the plugin:

    • OSS edition: <nexus_dir>/system/com/sonatype/nexus/assemblies/nexus-oss-feature/3.x.y/nexus-oss-feature-3.x.y-features.xml

    • PRO edition: <nexus_dir>/system/com/sonatype/nexus/assemblies/nexus-pro-feature/3.x.y/nexus-pro-feature-3.x.y-features.xml

          <feature version="3.x.y.xy" prerequisite="false" dependency="false">nexus-repository-rubygems</feature>
          <feature version="1.0.0" prerequisite="false" dependency="false">nexus-repository-conan</feature>
          <feature version="3.x.y.xy" prerequisite="false" dependency="false">nexus-repository-yum</feature>
      </features>
    

    And

        <feature name="nexus-repository-conan" description="org.sonatype.nexus.plugins:nexus-repository-conan" version="1.0.0">
         <details>org.sonatype.nexus.plugins:nexus-repository-conan</details>
         <bundle>mvn:org.sonatype.nexus.plugins/nexus-repository-conan/1.1.0</bundle>
        </feature>
     </features>
    

Installing the plugin in old versions

For older versions there are a range of options for installing the Conan plugin. You'll need to build it first, and then install the plugin with one of the options shown below:

Easiest Install

Thanks to some upstream work in Nexus Repository (versions newer than 3.15), it's become a LOT easier to install a plugin. To install the conan plugin, follow these steps:

  • Build the plugin with mvn clean package -PbuildKar
  • Copy the nexus-repository-conan-0.0.6-bundle.kar file from your target folder to the deploy folder for your Nexus Repository installation.

Once you've done this, go ahead and either restart Nexus Repo, or go ahead and start it if it wasn't running to begin with.

You should see conan (hosted) and conan (proxy) in the available Repository Recipes to use, if all has gone according to plan :)

Temporary Install

Installations done via the Karaf console will be wiped out with every restart of Nexus Repository. This is a good installation path if you are just testing or doing development on the plugin.

  • Enable NXRM's console: edit <nexus_dir>/bin/nexus.vmoptions and change karaf.startLocalConsole to true.

    More details here: https://help.sonatype.com/display/NXRM3/Bundle+Development+Overview

  • Run NXRM's console:

    # sudo su - nexus
    $ cd <nexus_dir>/bin
    $ ./nexus run
    > bundle:install file:///tmp/nexus-repository-conan-0.0.6.jar
    > bundle:list
    

    (look for org.sonatype.nexus.plugins:nexus-repository-conan ID, should be the last one)

    > bundle:start <org.sonatype.nexus.plugins:nexus-repository-conan ID>
    

Permanent Install

For more permanent installs of the nexus-repository-conan plugin, follow these instructions:

  • Copy the bundle (nexus-repository-conan-0.0.6.jar) into <nexus_dir>/deploy

This will cause the plugin to be loaded with each restart of Nexus Repository. As well, this folder is monitored by Nexus Repository and the plugin should load within 60 seconds of being copied there if Nexus Repository is running. You will still need to start the bundle using the karaf commands mentioned in the temporary install.

This will cause the plugin to be loaded and started with each startup of Nexus Repository.

The Fine Print

Starting from version 3.22 the Conan plugin is supported by Sonatype, but still is a contribution of ours to the open source community (read: you!).

Remember:

  • Use this contribution at the risk tolerance that you have
  • Do NOT file Sonatype support tickets related to Conan support
  • DO file issues here on GitHub, so that the community can pitch in

Phew, that was easier than I thought. Last but not least of all:

Have fun creating and using this plugin and the Nexus platform, we are glad to have you here!

Getting help

Looking to contribute to our code but need some help? There's a few ways to get information:

nexus-repository-conan's People

Contributors

allenhsieh avatar aornatovskyy avatar areian avatar bhamail avatar blacktiger avatar darthhater avatar doddi avatar igorudovika avatar j-s-3 avatar mcculls avatar mickoallen avatar mykyta avatar remgodow avatar santdelv avatar sciffer avatar sergeyonofreychuck avatar thejosh00 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nexus-repository-conan's Issues

Docker run is crashing

  • What are you trying to do?
    Run docker using the command : docker run -d -p 8081:8081 --name nexus nexus-repository-conan:0.0.5

  • What feature or behavior is this required for?

  • How could we solve this issue? (Not knowing is okay!)
    Modify Dockefile:
    <bundle>mvn:org.sonatype.nexus.plugins/nexus-repository-conan/0.0.4</bundle>
    have to be
    <bundle>mvn:org.sonatype.nexus.plugins/nexus-repository-conan/0.0.5</bundle>

  • Anything else?
    Maybe using ${CONAN_VERSION} would be better

conan upload with exports fails

When uploading a package with an 'exports' field in the conanfile.py, the upload fails with:

Error uploading file: conan_export.tgz, ''
ERROR: Execute upload again to retry upload the failed files: conan_export.tgz. [Remote: coinbase]

This is needed only when there are files in addition to the conanfile & manifest required to build (e.g. a large patch set).

Not sure where to begin - for the present I'm eliminating the need for a patch file.

Trying to download a package always return true

  • What are you trying to do?

I have a nexus with the plugin containing some packages.
I also have packages from others remotes.
So i have something like

conan remote add my_nexus <url> --force --insert=0
conan remote add conan-center https://conan.bintray.com --force --insert=1

I then try to install a lib from conan-center (for example zlib) which does not exist in my_nexus. However for some reason, it "finds" zlib and dowloads it resulting with an empty package.

On the left, the correct behavior on a previous version. On the right, the current behavior with version 3.22
image

For now i fixed that by changing the order of priority.

  • What feature or behavior is this required for?

  • How could we solve this issue? (Not knowing is okay!)
    N/A

  • Anything else?
    N/A

Upload package fails to validate credentials

I'm trying to upload a package.

conan user -r my-conan -p password username
conan upload utils/1.5.0@demo/demo -r my-conan

For some reason it keeps asking for the password even after I re-entered the right one.

Are you sure you want to upload 'utils/1.5.0@demo/demo'? (yes/no): yes
Uploading utils/1.5.0@demo/demo to remote 'my-conan'
Please log in to "my-conan" to perform this action. Execute "conan user" command.
Please enter a password for "upload" account: You pressed Ctrl+C!

This seems to reproduce with Ubuntu 16

See also the description of @dhoer:
conan-io/conan#4190

My Nexus server was configured as follows:

  • I've up Conan repository correctly as you described in README.md.
  • I've configured a hosted Conan repository
  • I gave username nx-repository-view-*-*-* nx-repository-admin-conan-syte_conan-* permissions
  • passord is the nexus username password

Conan version 1.11.0

Error generating conan bundle - Nexus 3.18

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    Generate the conan bundle with Maven

  • What feature or behavior is this required for?
    I received an error because the commons-fileupload dependency (version 1.3.2.SONATYPE) didn´t exist in a public maven repository:
    image
    How can I generate the conan bundle?

  • How could we solve this issue? (Not knowing is okay!)

  • Anything else?

0.0.4 not compatible with Conan from 1.14.0

  • What are you trying to do?
    I am trying to use nexus-repositoryy-conan 0.0.4 with Conan 1.14.0 and up.

  • What feature or behavior is this required for?
    This is required for installing packages.

  • How could we solve this issue? (Not knowing is okay!)
    Version 0.0.4 of nexus-repository-conan is not compatible with Conan starting at Conan 1.14.0. The problem is that Conan 1.14.0 started doing a get request to /v1/conans/{${PROJECT}}/{${VERSION}}/{${GROUP}}/{${STATE}}//packages/{${DIGEST}}.

It seems that this request returns a 404 from the server.

After looking at your code, I can see that in src/main/java/org/sonatype/repository/conan/internal/hosted/ConanHostedRecipe.groovy, the endpoint for /v1/conans/{${PROJECT}}/{${VERSION}}/{${GROUP}}/{${STATE}}//packages/{${DIGEST}} is not implemented. It seems like a call to this route has only been added in Conan 1.14.0. We would need to update this repo to add this endpoint, otherwise Conan 1.14.0+ users cannot use nexus-repository-conan.

  • Anything else?

conan user returns error 403 with repo admin user

Hi, we are evaluating Nexus Repository to use mainly for python, debian an conan packages.

On a Dockerized Nexus image behind an nginx TLS reverse proxy I am unable to login using conan user username -r remote -p password with a user who has a Role with nx-repository-admin-*-*-*. (This user works for pypi and apt repositories)

I get the follwoing error:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>403 - Nexus Repository Manager</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>


  <!--[if lt IE 9]>
  <script>(new Image).src="https://packages.axis-canada.com/favicon.ico?3.19.1-01"</script>
  <![endif]-->
  <link rel="icon" type="image/png" href="https://packages.axis-canada.com/favicon-32x32.png?3.19.1-01" sizes="32x32">
  <link rel="mask-icon" href="https://packages.axis-canada.com/safari-pinned-tab.svg?3.19.1-01" color="#5bbad5">
  <link rel="icon" type="image/png" href="https://packages.axis-canada.com/favicon-16x16.png?3.19.1-01" sizes="16x16">
  <link rel="shortcut icon" href="https://packages.axis-canada.com/favicon.ico?3.19.1-01">
  <meta name="msapplication-TileImage" content="https://packages.axis-canada.com/mstile-144x144.png?3.19.1-01">
  <meta name="msapplication-TileColor" content="#00a300">

  <link rel="stylesheet" type="text/css" href="https://packages.axis-canada.com/static/css/nexus-content.css?3.19.1-01"/>
</head>
<body>
<div class="nexus-header">
  <a href="https://packages.axis-canada.com">
    <div class="product-logo">
      <img src="https://packages.axis-canada.com/static/images/nexus.png?3.19.1-01" alt="Product logo"/>
    </div>
    <div class="product-id">
      <div class="product-id__line-1">
        <span class="product-name">Nexus Repository Manager</span>
      </div>
      <div class="product-id__line-2">
        <span class="product-spec">OSS 3.19.1-01</span>
      </div>
    </div>
  </a>
</div>
<div class="nexus-body">
  <div class="content-header">
    <img src="https://packages.axis-canada.com/static/rapture/resources/icons/x32/exclamation.png?3.19.1-01" alt="Exclamation point" aria-role="presentation"/>
    <span class="title">Error 403</span>
    <span class="description">Forbidden</span>
  </div>
  <div class="content-body">
    <div class="content-section">
      Forbidden
    </div>
      </div>
</div>
</body>
</html>

Here is how I created my test instance:

  • Built the conan plugin in Docker
  • Copied the nexus-repository-conan-0.0.6-bundle.kar from the built docker image to the host's plugin folder
  • Launch nexus docker compose which is as follows:
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - '443:443'
      - '5000:5000'
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - /data/certs:/certs
    links:
      - nexus
    command: [ nginx, '-g', 'daemon off;' ]
  nexus:
    image: sonatype/nexus3
    ports:
      - '8081:8081'
    volumes:
      - /data/nexus-data:/nexus-data
      - /data/plugins:/opt/sonatype/nexus/deploy
  • I then created my repositories and users
  • I also added the Conan Beare Token Realm to the Active Realms list

If I try to connect with an invalid user I do get the ERROR: Wrong user or password. [Remote: axis-release]. So I beleive the authentication works, but somehow permissions are not evaluated correctly.

conan proxy dont' work/partial work

Good day. I try explain my trouble:

git clone https://github.com/sonatype-nexus-community/nexus-repository-conan
docker build -t nexus-repository-conan:0.0.6 .
docker run -d -p 8081:8081 --name nexus nexus-repository-conan:0.0.6

Then I create conan proxy repo:
nexus-conan-proxy

Then try it using (I run command from other docker container => I use my local ip for communication with nexus instead localhost), conan-1.14.1:

conan remote remove conan-center
conan remote add my-proxy http://my_localip:8081/repository/test-my/ False
root@8b70608fd3c0:/# conan install arduinojson/5.13.0@conan/stable
Auto detecting your dev setup to initialize the default profile (/root/.conan/profiles/default)
Found gcc 4.9
Default settings
	os=Linux
	os_build=Linux
	arch=x86_64
	arch_build=x86_64
	compiler=gcc
	compiler.version=4.9
	compiler.libcxx=libstdc++
	build_type=Release
*** You can change them in /root/.conan/profiles/default ***
*** Or override with -s compiler='other' -s ...s***


Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=4.9
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

arduinojson/5.13.0@conan/stable: Not found in local cache, looking in remotes...
arduinojson/5.13.0@conan/stable: Trying with 'my-proxy'...
Downloading conanmanifest.txt
[==================================================] 114B/114B        
Downloading conanfile.py
[==================================================] 809B/809B        
arduinojson/5.13.0@conan/stable: Downloaded recipe revision 0
Installing package: arduinojson/5.13.0@conan/stable
Requirements
    arduinojson/5.13.0@conan/stable from 'my-proxy' - Downloaded
Packages
    arduinojson/5.13.0@conan/stable:5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 - Download

arduinojson/5.13.0@conan/stable: Retrieving package 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 from remote 'my-proxy' 
ERROR: Binary package not found: 'arduinojson/5.13.0@conan/stable:5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9'

In browse repo I see that
browse_repo_conan_proxy_fail_install_conan1141

Then I try downgrade conan version:

pip install conan==1.13.3
conan install arduinojson/5.13.0@conan/stable
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=4.9
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

arduinojson/5.13.0@conan/stable: WARN: Package is corrupted, removing folder: /root/.conan/data/arduinojson/5.13.0/conan/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9
Installing package: arduinojson/5.13.0@conan/stable
Requirements
    arduinojson/5.13.0@conan/stable from 'my-proxy' - Cache
Packages
    arduinojson/5.13.0@conan/stable:5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 - Download

arduinojson/5.13.0@conan/stable: Retrieving package 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 from remote 'my-proxy' 
Downloading conanmanifest.txt
[==================================================] 6.8KB/6.8KB      
Downloading conaninfo.txt
[==================================================] 150B/150B        
Downloading conan_package.tgz
[==================================================] 104.4KB/104.4KB  
Decompressing conan_package.tgz: 102kB [00:00, 2.73MB/s]                   
arduinojson/5.13.0@conan/stable: Package installed 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9

All good
browse_repo_conan_proxy_succes_install_conan1131

After that I try install other package with the same version of conan:

root@8b70608fd3c0:/# conan install zlib/1.2.11@conan/stable
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=4.9
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

zlib/1.2.11@conan/stable: Not found in local cache, looking in remotes...
zlib/1.2.11@conan/stable: Trying with 'my-proxy'...
Downloading conanmanifest.txt
[==================================================] 345B/345B        
Downloading conanfile.py
[==================================================] 7.9KB/7.9KB      
Downloading conan_export.tgz
ERROR: Unable to find 'zlib/1.2.11@conan/stable' in remotes

In browser repo I see this -
browse_repo_conan_proxy_fail_install_conan1131

If I use default repository conan-center (without nexus conan proxy) - this packages install without problem.
Is it problem conan or nexus-repositgory-conan?
With this - https://docs.conan.io/en/latest/mastering/logging.html I can debug the side between conan client and nexus-conan-proxy, but other side - between nexus-conan-proxy and remote repository https://conan.bintray.com - can't imagine how (why nexus-conan didn't download some files?) (MITM is not easy way)

Error installing v0.0.6 with NXRM 3.16.2

  • What are you trying to do?
    Install the conan extension v0.0.6 on Nexus Repository v3.16.2-01 and use the proxy recipe.

  • What feature or behavior is this required for?
    Providing developer access to conan-center via NXRM.

  • How could we solve this issue? (Not knowing is okay!)
    Don't know the resolution.

  • Anything else?
    I attempted to integrate v0.0.4 with NXRM v3.16.2-01 initially, encountered problems, then found the discussion about the 'ping' API. Removed (cleanly I hope) v0.0.4 and installed v0.0.6: copied the .jar file, edited the nexus-pro-feature-3.16.2-01-features.xml file, restarted NXRM, created the proxy repo, added the Conan Bearer Token Realm to the Active list, added "browse" and "read" privileges to the appropriate role. Configured conan client to use NXRM. With v0.0.6 installed attempts to use the proxy repo return a 404 error. In the server's nexus.log I found that when I save changes to the conan proxy repo the log shows "ERROR" messages on the "org.sonatype.repository.conan.internal.proxy.ConanProxyFacet - doValidate" entries. Subsequent attempts to use the proxy repository result in "org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Failure servicing: GET /repository//v1/ping" messages followed by a "java.lang.IllegalStateException: Missing: org.sonatype.repository.conan.internal.AssetKind" stack traces.

[DepShield] (CVSS 9.8) Vulnerability due to usage of com.fasterxml.jackson.core:jackson-databind:2.9.2

Vulnerabilities

DepShield reports that this application's usage of com.fasterxml.jackson.core:jackson-databind:2.9.2 results in the following vulnerability(s):


Occurrences

com.fasterxml.jackson.core:jackson-databind:2.9.2 is a transitive dependency introduced by the following direct dependency(s):

org.sonatype.nexus:nexus-plugin-api:3.14.0-04
        └─ com.fasterxml.jackson.core:jackson-databind:2.9.2
        └─ org.sonatype.nexus:nexus-blobstore-api:3.14.0-04
              └─ com.fasterxml.jackson.core:jackson-databind:2.9.2

org.sonatype.nexus:nexus-repository:3.14.0-04
        └─ org.sonatype.nexus:nexus-orient:3.14.0-04
              └─ com.orientechnologies:orientdb-server:2.2.36
                    └─ com.orientechnologies:orientdb-tools:2.2.36
                          └─ com.fasterxml.jackson.core:jackson-databind:2.9.2
              └─ com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.2
                    └─ com.fasterxml.jackson.core:jackson-databind:2.9.2
        └─ com.fasterxml.jackson.core:jackson-databind:2.9.2

This is an automated GitHub Issue created by Sonatype DepShield. Details on managing GitHub Apps, including DepShield, are available for personal and organization accounts. Please submit questions or feedback about DepShield to the Sonatype DepShield Community.

Cannot upload openssl package to Nexus3 hosted conan repository

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    Upload the openssl/1.0.2t package from conan-center to my Nexus3 hosted conan repository

  • What feature or behavior is this required for?
    Hosting a conan repository in Nexus3

  • How could we solve this issue? (Not knowing is okay!)
    Don't know, I'm afraid

  • Anything else?
    I am running a CentOS 7 machine with GCC 4.8 installed. I am building the MD5 example application: https://github.com/conan-io/examples/tree/master/libraries/poco/md5

The dependencies of the MD5 application are openssl/1.0.2t, poco/1.9.4 and zlib/1.2.11. "conan install" failed as none of the dependencies in conan-center are built for GCC 4.8. Therefore i ran "conan install --build missing" and successfully built the dependencies and the MD5 application using GCC 4.8.

I then wished to upload openssl, poco and zlib built with GCC 4.8 to my local Nexus3 hosted conan repository.

After running "conan upload "*" --all -r=my-conan-repo", the following text is printed to the console:

Are you sure you want to upload 'openssl/1.0.2t' to 'my-conan-repo'? (yes/no): yes
Are you sure you want to upload 'poco/1.9.4' to 'my-conan-repo'? (yes/no): yes
Are you sure you want to upload 'zlib/1.2.11' to 'my-conan-repo'? (yes/no): yes
Uploading to remote 'my-conan-repo':
Uploading openssl/1.0.2t to remote 'my-conan-repo'                                      
Uploaded conan_export.tgz -> openssl/1.0.2t [0.24k]                                      
ERROR: 
Error uploading file: conan_sources.tgz, ''conan_sources.tgz''
Uploaded conanfile.py -> openssl/1.0.2t [30.67k]                                         
Uploaded conanmanifest.txt -> openssl/1.0.2t [0.10k]                                     
Uploading poco/1.9.4 to remote 'my-conan-repo'                                          
Uploaded conan_export.tgz -> poco/1.9.4 [0.25k]                                          
Uploaded conan_sources.tgz -> poco/1.9.4 [0.30k]                                         
Uploaded conanfile.py -> poco/1.9.4 [8.95k]                                              
Uploaded conanmanifest.txt -> poco/1.9.4 [0.17k]                                         
Uploaded conan recipe 'poco/1.9.4' to 'my-conan-repo': http://localhost:8081/repository/my-conan-repo/
Uploading zlib/1.2.11 to remote 'my-conan-repo'                                         
Uploaded conan_export.tgz -> zlib/1.2.11 [0.23k]                                         
Uploaded conan_sources.tgz -> zlib/1.2.11 [6.91k]                                        
Uploaded conanfile.py -> zlib/1.2.11 [7.59k]                                             
Uploaded conanmanifest.txt -> zlib/1.2.11 [0.29k]                                        
Uploaded conan recipe 'zlib/1.2.11' to 'my-conan-repo': http://localhost:8081/repository/my-conan-repo/
Uploading package 1/1: 70254466a5d0be5114bc812abc39153e346ebdb8 to 'my-conan-repo'      
Package is up to date, upload skipped
Uploading package 1/1: 3a5f72c8cd50641b8efa6ed13e6914c6ced2747c to 'my-conan-repo'      
Package is up to date, upload skipped
ERROR: openssl/1.0.2t: Upload recipe to 'my-conan-repo' failed: Execute upload again to retry upload the failed files: conan_sources.tgz. [Remote: my-conan-repo]

ERROR: Errors uploading some packages

poco and zlib uploaded successfully but openssl did not

I am running Nexus OSS 3.22.0-02, using the built-in Conan plugin (version 1.0.1)

Two Invocations of Conan install necessary to download hosted packages with conan_export.tgz

  • What are you trying to do?

Follow up issue from #30. I noticed this with Conan client 1.4.5., nexus-repository-conan 0.0.3, and Sonatype Nexus version 3.12.1-01. When trying to download packages that were successfully uploaded to a hosted repository, I require two invocations of conan install for a successful download. The first always errors out on was not found in remote when processing conan_export.tgz, while the second succeeds.

  • What feature or behavior is this required for?

Applies to all downloads of packages from hosted Conan repositories.

  • How could we solve this issue? (Not knowing is okay!)

Not sure at the moment.

  • Anything else?

I will try with other (especially newer) Conan client versions and report back here if I find anything.

500 return from Nexus - NPE when accessing repo that does not exist

Fetching (conan install or conan get) a package that does not exist errors out with a 500 (NullPointerException). This prevents falling back to a second repo (like conan-center) as the query errors and conan stops there.

e.g. conan get foo/0.0@notthere/absent

Running v0.0.2

java.lang.NullPointerException: null
	at org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler.handle(ContentHeadersHandler.java:45)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.http.PartialFetchHandler.handle(PartialFetchHandler.java:55)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.view.handlers.ConditionalRequestHandler.handle(ConditionalRequestHandler.java:72)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.assetdownloadcount.internal.AssetDownloadCountContributedHandler.handle(AssetDownloadCountContributedHandler.java:53)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at com.sonatype.nexus.clm.internal.QuarantineContributedHandler.handle(QuarantineContributedHandler.java:69)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.view.handlers.HandlerContributor.handle(HandlerContributor.java:67)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.view.handlers.ExceptionHandler.handle(ExceptionHandler.java:44)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.security.SecurityHandler.handle(SecurityHandler.java:52)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.view.Context$proceed$1.call(Unknown Source)
	at org.sonatype.repository.conan.internal.hosted.ConanHostedRecipe$_closure1.doCall(ConanHostedRecipe.groovy:127)
	at sun.reflect.GeneratedMethodAccessor389.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1087)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
	at groovy.lang.Closure.call(Closure.java:414)
	at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:54)
	at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:124)
	at com.sun.proxy.$Proxy188.handle(Unknown Source)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.view.handlers.TimingHandler.handle(TimingHandler.java:46)
	at org.sonatype.nexus.repository.view.Context.proceed(Context.java:80)
	at org.sonatype.nexus.repository.view.Context.start(Context.java:114)
	at org.sonatype.nexus.repository.view.Router.dispatch(Router.java:64)
	at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:52)
	at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:43)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.dispatchAndSend(ViewServlet.java:210)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.doService(ViewServlet.java:172)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.service(ViewServlet.java:126)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)
	at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)
	at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:181)
	at com.google.inject.servlet.DynamicServletPipeline.service(DynamicServletPipeline.java:71)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.sonatype.nexus.security.SecurityFilter.executeChain(SecurityFilter.java:85)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.sonatype.nexus.security.SecurityFilter.doFilterInternal(SecurityFilter.java:101)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.repository.httpbridge.internal.ExhaustRequestFilter.doFilter(ExhaustRequestFilter.java:71)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.sonatype.nexus.licensing.internal.LicensingRedirectFilter.doFilter(LicensingRedirectFilter.java:108)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:68)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.EnvironmentFilter.doFilter(EnvironmentFilter.java:101)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.HeaderPatternFilter.doFilter(HeaderPatternFilter.java:98)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.google.inject.servlet.DynamicFilterPipeline.dispatch(DynamicFilterPipeline.java:104)
	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:135)
	at org.sonatype.nexus.bootstrap.osgi.DelegatingFilter.doFilter(DelegatingFilter.java:73)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1629)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
	at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:175)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
	at org.eclipse.jetty.server.Server.handle(Server.java:530)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)

release kar file

Hello.

your readme.md said user can use nexus-repository-conan-0.0.6-bundle.kar.
But where is it?

How about release this file?

And now there is 0.0.4 is latest in release tab.

Please keep your attention to this repo.

Thanks,

Cannot remove package from nexus repository; creates a 404 error.

  • What are you trying to do?
    I am trying to remove a recipe and its packages from a nexus repo.
  • What feature or behavior is this required for?
    This is required to remove a recipe and its packages from a nexus repo.
  • How could we solve this issue? (Not knowing is okay!)
    I have a feeling this is related to the search function not working on nexus repositories, but I have no clue what could cause this.

Whenever I try to remove a package from my nexus repo, I get a 404:

conan remove PackageTest/1.0.0@myuser/testing -r=my_private_repo

Output:
ERROR: 404 Not found. [Remote: my_private_repo]

  • Anything else?

0.0.6 not building against NXRM 3.18.1

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    Trying to build the project against NXRM 3.18.1

  • What feature or behavior is this required for?
    Builds correctly and cleanly

  • How could we solve this issue? (Not knowing is okay!)

  • Anything else?
    Build output:

[INFO] 4 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  03:10 min
[INFO] Finished at: 2019-09-17T16:05:59Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project nexus-repository-conan: Compilation failure: Compilation failure: 
[ERROR] /nexus-repository-conan/src/main/java/org/sonatype/repository/conan/internal/ui/ConanBrowseNodeGenerator.java:[31,21] 1. ERROR in /nexus-repository-conan/src/main/java/org/sonatype/repository/conan/internal/ui/ConanBrowseNodeGenerator.java (at line 31)
[ERROR]         public List<String> computeComponentPath(final Asset asset, final Component component) {
[ERROR]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[ERROR] The method computeComponentPath(Asset, Component) of type ConanBrowseNodeGenerator must override or implement a supertype method
[ERROR] 
[ERROR] /nexus-repository-conan/src/main/java/org/sonatype/repository/conan/internal/ui/ConanBrowseNodeGenerator.java:[48,21] 2. ERROR in /nexus-repository-conan/src/main/java/org/sonatype/repository/conan/internal/ui/ConanBrowseNodeGenerator.java (at line 48)
[ERROR]         public List<String> computeAssetPath(final Asset asset, final Component component) {
[ERROR]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[ERROR] The method computeAssetPath(Asset, Component) of type ConanBrowseNodeGenerator must override or implement a supertype method
[ERROR] 
[ERROR] /nexus-repository-conan/src/main/java/org/sonatype/repository/conan/internal/ui/ConanBrowseNodeGenerator.java:[56,14] 3. ERROR in /nexus-repository-conan/src/main/java/org/sonatype/repository/conan/internal/ui/ConanBrowseNodeGenerator.java (at line 56)
[ERROR]         return super.computeAssetPath(asset, component);
[ERROR]                      ^^^^^^^^^^^^^^^^
[ERROR] The method computeAssetPath(Asset, Component) is undefined for the type ComponentPathBrowseNodeGenerator
[ERROR] 
[ERROR] Found 3 errors and 0 warnings.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Extract V1 endpoints

I think it would now be useful to extract the V1 endpoints into a separate class that can be used between proxy and host. This will also help if/when we come to look at V1 api.

Conan search return html 404

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    Do conan search of my package just after I upload it to the nexus

  • What feature or behavior is this required for?
    NA?

  • How could we solve this issue? (Not knowing is okay!)
    I don't know

  • Anything else?
    Here is the scenario, I have uploaded my package:

$ conan upload Hello/0.1@kevin/testing -r=nxrm-conan-hosted --all

Uploading to remote 'nxrm-conan-hosted':
Uploading Hello/0.1@kevin/testing to remote 'nxrm-conan-hosted'
Uploading conanfile.py:   0%|          | 0.00/705 [00:0Uploading conanfile.py: 100%|##########| 705/705 [00:00<00:00, 663kB/s]
Uploading conanmanifest.txt:   0%|          | 0.00/58.0Uploading conanmanifest.txt: 100%|##########| 58.0/58.0 [00:00<00:00, 49.7kB/s]

Uploaded conan recipe 'Hello/0.1@kevin/testing' to 'nxrm-conan-hosted': http://localhost:8082/repository/conan-nexus/
Uploading package 1/1: de56269f90f07cc61427d9012acf098d4354f43d to 'nxrm-conan-hosted'
Package is up to date, upload skipped

But then when I am about to search it, it returns an html with 404 mentioned.

$ conan search Hello/0.1@kevin/testing -r=nxrm-conan-hosted
ERROR:
<!DOCTYPE html>
<html lang="en">
<head>
  <title>404 - Nexus Repository Manager</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>


  <!--[if lt IE 9]>
  <script>(new Image).src="http://localhost:8082/favicon.ico?3.18.1-01"</script>
  <![endif]-->
  <link rel="icon" type="image/png" href="http://localhost:8082/favicon-32x32.png?3.18.1-01" sizes="32x32">
  <link rel="mask-icon" href="http://localhost:8082/safari-pinned-tab.svg?3.18.1-01" color="#5bbad5">
  <link rel="icon" type="image/png" href="http://localhost:8082/favicon-16x16.png?3.18.1-01" sizes="16x16">
  <link rel="shortcut icon" href="http://localhost:8082/favicon.ico?3.18.1-01">
  <meta name="msapplication-TileImage" content="http://localhost:8082/mstile-144x144.png?3.18.1-01">
  <meta name="msapplication-TileColor" content="#00a300">

  <link rel="stylesheet" type="text/css" href="http://localhost:8082/static/css/nexus-content.css?3.18.1-01"/>
</head>
<body>
<div class="nexus-header">
  <a href="http://localhost:8082">
    <div class="product-logo">
      <img src="http://localhost:8082/static/images/nexus.png?3.18.1-01" alt="Product logo"/>
    </div>
    <div class="product-id">
      <div class="product-id__line-1">
        <span class="product-name">Nexus Repository Manager</span>
      </div>
      <div class="product-id__line-2">
        <span class="product-spec">OSS 3.18.1-01</span>
      </div>
    </div>
  </a>
</div>

<div class="nexus-body">
  <div class="content-header">
    <img src="http://localhost:8082/static/rapture/resources/icons/x32/exclamation.png?3.18.1-01" alt="Exclamation point" aria-role="presentation"/>
    <span class="title">Error 404</span>
    <span class="description">Not Found</span>
  </div>
  <div class="content-body">
    <div class="content-section">
      Not Found
    </div>
      </div>
</div>
</body>
</html>

. [Remote: nxrm-conan-hosted]

I don't know why and how can it return the 404 html.

Download of hosted packages does not work due to wrong path

  • What are you trying to do?
    Use the hosted repository "the conan way" by uploading and downloading packages.

Reproduction Steps

  • 2 repositories
    1. conan (hosted)
    2. conan-proxy (Proxy of conan-central)
  • minimal hello world app testlib
  • Upload to to conan with conan upload -r conan testlib/1.0/myuser/testing --all
    It shows up in nexus
  • Try to use it in simple testing project.
    • requirements file: testlib/1.0/myuser/testing
    • install requirements with conan installERROR: testlib/1.0/myuser/testing was not found in remote 'conan'
  • Try to use a package from proxy
    • requirements file: Poco/1.8.1@pocoproject/stable
    • install requirements with conan install
      • files are downloaded to proxy repo, shows up in the same way as testlib in conan repository
      • packages are downloaded as well

We were suspicios because in nexus ui the path is inverted in the tree (pocoproject ➡️ Poco ➡️ 1.8.1 ➡️ ...) so we try it again and it works the second time too without a redownload from conan-central.

Hosted Repository in Nexus 3.22+

Hi,

we've been using a hosted Conan repository for a while now, however, with the included plugin starting at version 3.22 this does not seem to be supported anymore.
Is this not in scope anymore? Are there plans to add this functionality again in the future?

Thanks & best regards

CONAN-7 Configurable redirection

The Url indexing alters the location of the metadata files and eventually the location of source files should the client need to build from source.

It has been advised that some users may not want the metadata rewriting in order to have a fully proxied conan implementation. They might be willing to 'sacrifice' working builds so that metadata is not rewritten.
An example would be, if the NXRM is hosted at mycompany.org. The metadata files previously fetched would point to that location. If NXRM was then moved to mynewcompany.org then the metadata files would no longer be directly reachable (without a cleanup task) because they would be pointing at the old endpoint.

Upload of packages with shebang line in conanfile.py fails with strict content type validation on

First off, great work on this!

  • What are you trying to do?

An example way to reproduce the issue, using Conan client 1.4.5 (also verified with >1.7), nexus-repository-conan 0.0.3, and Nexus OSS version 3.12.1-01.

  1. $> conan install boost_algorithm/1.66.0@bincrafters/stable --remote=bincrafters-public-conan (where bincrafters-public-conan is https://api.bintray.com/conan/bincrafters/public-conan, and the particular choice of boost_algorithm is important because the conanfile.py for it has a shebang line on top, i.e. #!/usr/bin/env python)
  2. $> conan remote add conan-internal <MY-URL>
  3. $> conan user username -p password -r conan-internal
  4. $> conan upload boost_algorithm/1.66.0@bincrafters/stable --remote=conan-internal --all
  5. Output:
Uploading boost_algorithm/1.66.0@bincrafters/stable to remote 'conan-internal'
Uploading conanmanifest.txt
[==================================================] 103B/103B
Uploading conanfile.py
[==================================================] 2.6KB/2.6KB
ERROR:
Error uploading file: conanfile.py, 'b'''
Uploading conan_export.tgz
[==================================================] 758B/758B
ERROR: Execute upload again to retry upload the failed files: conanfile.py. [Remote: conan-internal]

After placing a breakpoint here (for Conan client version 1.4.5, it moved in later versions but same issue), response was HTTP 400 Bad Request: 'Detected content type [application/x-sh], but expected [text/x-python]: /v1/conans/bincrafters/boost_algorithm/1.66.0/stable/conanfile.py'. This unrelated SO post tipped me off to disabling Strict Content Type Validation on the repository to work around this, and that worked, I was able to upload after unchecking this (see image below)
strict_content_validation

Given this behavior, I feel like the issue is rooted in the shebang line, but I don't understand enough about the content type validation feature to know whether it's a good idea to turn it off just for this.

  • What feature or behavior is this required for?

Any Conan package that has a shebang line won't be able to be uploaded without disabled strict content validation on the repository.

  • How could we solve this issue? (Not knowing is okay!)

Obviously telling folks to uncheck Strict Content Type Validation seems to be a viable solution, but again, not sure if that's really the right answer.

  • Anything else?

Support /v1/ping API endpoint

  • What are you trying to do?
    Connect Conan 1.7.3 to a hosted repository on Nexus OSS 3.13.0-01 server

  • What feature or behavior is this required for?
    All Conan features


I've built and installed revision b79575f of the nexus-repository-conan plugin per the instructions in README.md. After creating a hosted Conan repository and adding it to my client machine, I tried to authenticate with conan user and got the following message:

ERROR: Not implemented endpoint. [Remote: conan-local]

I also tried doing conan search and conan upload and got the same error every time. Wireshark shows that the client is trying to reach an endpoint at /repository/conan-local/v1/ping and the Nexus server is responding with a 404 status.

Upload Fix for Conan Client 1.12+ Seems to have Regressed for Earlier Conan Clients

Keep up the great work on this!

  • What are you trying to do?

I upgraded my Docker image to be built from master on this repository to avoid NXRM's security vulnerabilities for 3.12 and earlier. However, when I went to upload Conan packages with conan upload using Conan Client 1.4.5, the command succeeded but all the uploaded files were of size 0 B (empty) (See image below).

image

This in turn meant that consequent conan install commands for these packages would fail with something like:

flatbuffers/1.11.0@bincrafters/stable: Not found, retrieving from server 'conan-all-latest'                                   
flatbuffers/1.11.0@bincrafters/stable: Trying with 'conan-all-latest'...                                                      
Downloading conanmanifest.txt                                                                                                 
                                                                                                                              
Downloading conanfile.py                                                                                                      
                                                                                                                              
Downloading conan_export.tgz                                                                                                  
                                                                                                                              
ERROR: Error while downloading/extracting files to C:\Users\ikrasnovsky\.conan\data\flatbuffers\1.11.0\bincrafters\stable\export                                                                                                                            
file could not be opened successfully                                                                                         
Folder removed

(because the conan_export.tgz file is empty).

I suspect the issue was introduced by #54 (commit), because I tried building a Docker image using #51 (commit) (the latest merged PR prior to it), and Conan package upload/download worked fine using the 1.4.5 client. Based on the wording and code changes of #54, it sounds like it might be a regression for earlier Conan clients.

  • What feature or behavior is this required for?

Necessary for nexus-repository-conan images to work with earlier Conan clients (Ex. 1.4.5, but I'm not sure "how early", but < 1.12).

  • How could we solve this issue? (Not knowing is okay!)

Either documenting which conan client versions are supported by which versions of this repository, or some backwards compatibility fix for #54.

  • Anything else?

Thanks!

Upload attempt failed

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?

I am trying to upload a projects and I am not succeeding.
I set up the nexus server correctly. I can authenticate myself but when I upload it rejects authentication.
How do I correct this problem.

image

Conan Proxy Repository does not work

I am using OSS 3.14.0-04 and Nexus-Repository-Conan 0.0.3.

I created a 'Nexus Proxy repository' that refers to the conan center repository 'https://conan.bintray.com/'

conan-center: https://nexus.mycompany.com/repository/conan-center/ [Verify SSL: False]

Unfortuatelly I am not able to connect to the proxy due to the following error:

conan user myuser -p mypassword -r conan-center
ERROR: Not implemented endpoint. [Remote: conan-center]

Hosted repositories work as expected.

Conan hosted repository not working

What are you trying to do?

I would like to host my own Conan repository in my Nexus.
I'm using NRM OSS version 3.22.1 and I have enabled in the "nexus.properties" file the setting "nexus.conan.hosted.enabled=true".
I was able to create a hosted repository in Nexus and I configured it in my "conan 1.29.0" client. However the upload of any package to my hosted repository always fails with an error like

ERROR: openssl/1.1.1g: Upload recipe to 'nexus_nossl' failed: invalid literal for int() with base 10: ''. [Remote: nexus_nossl]

Procedure to reproduce the problem

  1. on my Linux client I generated a "conanfile.txt" containing:
[requires]
openssl/1.1.1g
  1. I download from "conan-center" such Conan package by running "install" command against the conanfile.txt generated in step 1; this of course works:
# conan install .
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++11
compiler.version=8
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

openssl/1.1.1g: Not found in local cache, looking in remotes...
openssl/1.1.1g: Trying with 'conan-center'...
Downloading conanmanifest.txt completed [0.17k]                                          
Downloading conanfile.py completed [33.42k]                                              
Downloading conan_export.tgz completed [0.24k]                                           
Decompressing conan_export.tgz completed [0.00k]                                         
openssl/1.1.1g: Downloaded recipe revision 0
conanfile.txt: Installing package
Requirements
    openssl/1.1.1g from 'conan-center' - Downloaded
Packages
    openssl/1.1.1g:1d877a3df840030e6a8abb74c5ffb9088d08b47a - Download

Installing (downloading, building) binaries...
openssl/1.1.1g: Retrieving package 1d877a3df840030e6a8abb74c5ffb9088d08b47a from remote 'conan-center' 
Downloading conanmanifest.txt completed [6.22k]                                          
Downloading conaninfo.txt completed [1.00k]                                              
Downloading conan_package.tgz completed [3904.34k]                                       
Decompressing conan_package.tgz completed [0.00k]                                        
openssl/1.1.1g: Package installed 1d877a3df840030e6a8abb74c5ffb9088d08b47a
openssl/1.1.1g: Downloaded package revision 0
conanfile.txt: Generator txt created conanbuildinfo.txt
conanfile.txt: Generated conaninfo.txt
conanfile.txt: Generated graphinfo
  1. I try to re-upload such package (not created by me so I assume the package is just fine as it's hosted and works fine on the Conan center) on my Nexus hosted repository:
# conan remote list
conan-center: https://conan.bintray.com [Verify SSL: True]
nexus_ssl: http://repo-billerica.perform.empirix.com:8081/repository/ecc-eva-devel-conan/ [Verify SSL: True]
nexus_nossl: http://repo-billerica.perform.empirix.com:8081/repository/ecc-eva-devel-conan/ [Verify SSL: False]


# conan user -r nexus_ssl developer
User of remote 'nexus_ssl' is already 'developer'
# conan user -r nexus_nossl developer
User of remote 'nexus_nossl' is already 'developer'


# conan upload -r nexus_ssl openssl/1.1.1g
Are you sure you want to upload 'openssl/1.1.1g' to 'nexus_ssl'? (yes/no): yes
Uploading to remote 'nexus_ssl':
Uploading openssl/1.1.1g to remote 'nexus_ssl'                                           
Downloading conan_sources.tgz completed [0.46k]                                          
Decompressing conan_sources.tgz completed [0.00k]                                        
Compressing conan_export.tgz completed [1 files]                                         
Compressing conan_sources.tgz completed [1 files]                                        
ERROR: openssl/1.1.1g: Upload recipe to 'nexus_ssl' failed: invalid literal for int() with base 10: ''. [Remote: nexus_ssl]

ERROR: Errors uploading some packages

Same issue if I try to upload against my Nexus hosted repository having SSL check disabled:

# conan upload -r nexus_nossl openssl/1.1.1g
Are you sure you want to upload 'openssl/1.1.1g' to 'nexus_nossl'? (yes/no): yes
Uploading to remote 'nexus_nossl':
Uploading openssl/1.1.1g to remote 'nexus_nossl'                                         
ERROR: openssl/1.1.1g: Upload recipe to 'nexus_nossl' failed: invalid literal for int() with base 10: ''. [Remote: nexus_nossl]

ERROR: Errors uploading some packages
  1. note that the upload works just fine if instead of uploading to Nexus I upload that package to an Artifactory repository I have access to:
# conan upload -r artifactory openssl/1.1.1g
Are you sure you want to upload 'openssl/1.1.1g' to 'artifactory'? (yes/no): yes
Uploading to remote 'artifactory':
Uploading openssl/1.1.1g to remote 'artifactory'                                         
Uploaded conan_export.tgz -> openssl/1.1.1g [0.24k]                                      
Uploaded conan_sources.tgz -> openssl/1.1.1g [0.46k]                                     
Uploaded conanfile.py -> openssl/1.1.1g [33.42k]                                         
Uploaded conanmanifest.txt -> openssl/1.1.1g [0.17k]                                     
Uploaded conan recipe 'openssl/1.1.1g' to 'artifactory': https://empirixartifactory.jfrog.io/artifactory/api/conan/conan-local/

So the problem has to be on the Nexus hosted repository implementation...

Rebuild index from a blob which used fo conan repository

  • What are you trying to do?
    I am trying to run a nexus admin task to rebuild index from a blob which named conan. This blob is used for our conan repository(type: hosted), but it doesn't seems to rebuild the index, I can't see my previous conan packages in nexus UI.

  • What feature or behavior is this required for?
    It would be appreciated that if there is a method can solve my issue. we lost all previous conan packages index because of some problem happend to our nexus database.

  • How could we solve this issue? (Not knowing is okay!)

  • Anything else?
    I also try to test rebuilding index from a blob which is used for a raw repository(type: hosted), and it works. This is a part of my nexus.log:

2019-12-24 16:44:43,030+0800 INFO  [qtp1472535463-272]  admin org.sonatype.nexus.rapture.internal.security.SessionServlet - Created session for user: admin
2019-12-24 16:45:05,335+0800 INFO  [qtp1472535463-270]  admin org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'rebuild' [blobstore.rebuildComponentDB] runNow
2019-12-24 16:45:05,335+0800 INFO  [qtp1472535463-270]  admin org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'rebuild' [blobstore.rebuildComponentDB] state change WAITING -> RUNNING
2019-12-24 16:45:05,369+0800 INFO  [quartz-3-thread-3]  *SYSTEM org.sonatype.nexus.blobstore.restore.RestoreMetadataTask - Task log: /nexus/sonatype-work/nexus3/log/tasks/blobstore.rebuildComponentDB-20191224164505367.log
2019-12-24 16:45:05,445+0800 INFO  [quartz-3-thread-3]  *SYSTEM org.sonatype.nexus.blobstore.restore.RestoreMetadataTask - ---- Elapsed time: 72.70 ms, processed: 43, un-deleted: 0 ----
2019-12-24 16:45:05,449+0800 INFO  [quartz-3-thread-3]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'conan-repo' with blob store 'conan'
2019-12-24 16:45:05,462+0800 INFO  [quartz-3-thread-3]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - ---- Elapsed time: 12.20 ms, processed: 3, failed integrity check: 0 ----
2019-12-24 16:45:05,464+0800 INFO  [quartz-3-thread-3]  *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'rebuild' [blobstore.rebuildComponentDB] state change RUNNING -> WAITING (OK)
2019-12-24 16:45:33,682+0800 INFO  [qtp1472535463-273]  admin org.sonatype.nexus.scheduling.internal.TaskSchedulerImpl - Task 'rebuild' [blobstore.rebuildComponentDB] scheduled: manual
2019-12-24 16:45:38,195+0800 INFO  [qtp1472535463-273]  admin org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'rebuild' [blobstore.rebuildComponentDB] runNow
2019-12-24 16:45:38,195+0800 INFO  [qtp1472535463-273]  admin org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'rebuild' [blobstore.rebuildComponentDB] state change WAITING -> RUNNING
2019-12-24 16:45:38,224+0800 INFO  [quartz-3-thread-4]  *SYSTEM org.sonatype.nexus.blobstore.restore.RestoreMetadataTask - Task log: /nexus/sonatype-work/nexus3/log/tasks/blobstore.rebuildComponentDB-20191224164538222.log
2019-12-24 16:45:38,300+0800 INFO  [quartz-3-thread-4]  *SYSTEM org.sonatype.nexus.blobstore.restore.raw.internal.RawRestoreBlobStrategy - Restored asset, blob store: raw, repository: raw, path: testpath/testfile.txt, blob name: testpath/testfile.txt, blob id: 47fafad3-a316-4123-bbe2-c82837da0d01
2019-12-24 16:45:38,300+0800 INFO  [quartz-3-thread-4]  *SYSTEM org.sonatype.nexus.blobstore.restore.RestoreMetadataTask - ---- Elapsed time: 76.10 ms, processed: 4, un-deleted: 0 ----
2019-12-24 16:45:38,300+0800 INFO  [quartz-3-thread-4]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'raw' with blob store 'raw'
2019-12-24 16:45:38,305+0800 INFO  [quartz-3-thread-4]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - ---- Elapsed time: 4.716 ms, processed: 4, failed integrity check: 0 ----
2019-12-24 16:45:38,307+0800 INFO  [quartz-3-thread-4]  *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'rebuild' [blobstore.rebuildComponentDB] state change RUNNING -> WAITING (OK)

Nexus uploads broken for latest conan client

New version of conan 1.12.0 always supplies the "X-Checksum-Sha1" header (CLIENT_CHECKSUM). So, the nexus plugin currently responds with 404 to all upload requests.

Need to either a) change the 404 response to ONLY be for HEAD/GET requests. or b) properly implement the checksum.

(Right now the plugin is incompatible with conan's latest version)

Workaround, for now, is to keep your conan version limited to 1.1.12 or lower, and your conan_package_tools version to a lower version as well.

Looking at the code I couldn't easily figure out the syntax to restrict the current behavior to GET/HEAD requests.

Metadata is lost when exporting package to nexus and installing it.

Hello, this issue has also been submitted to the conan-io Github: conan-io/conan#5123

  • What are you trying to do?
    I am trying to export a package I made with the recipe that goes with it to a nexus repo. Then, I am trying to install said package on a computer that doesn't have that package.
  • What feature or behavior is this required for?
    This is required to export packages to nexus and to install them on a client.
  • How could we solve this issue? (Not knowing is okay!)
    It seems like the metadata.json file doesn't get updated. Here's what I did to test it out:
  1. Create a recipe from pre-built binaries
    conan new PackageTest/1.0.0@myuser/testing --bare

  2. Export the package with the pre-built binaries
    conan export-pkg ../ PackageTest/1.0.0@myuser/testing --package-folder=.

  3. Upload the package and recipe to my nexus repo
    conan upload PackageTest/1.0.0@myuser/testing --all -r=my_private_repo

  4. Remove the package from my client
    conan remove PackageTest*

  5. Attempt to install the package I just uploaded to nexus
    conan install PackageTest/1.0.0@myuser/testing -r=my_private_repo

Results from that command:

Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=7
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

Installing package: PackageTest/1.0.0@myuser/testing
Requirements
   PackageTest/1.0.0@myuser/testing from 'my_private_repo' - Cache
Packages
   PackageTest/1.0.0@myuser/testing:0ab9fcf606068d4347207cc29edd400ceccbc944 - Download

PackageTest/1.0.0@myuser/testing: Retrieving package 0ab9fcf606068d4347207cc29edd400ceccbc944 from remote 'my_private_repo' 
ERROR: Binary package not found: 'PackageTest/1.0.0@myuser/testing0ab9fcf606068d4347207cc29edd400ceccbc944'

However, from looking at my nexus, the package is indeed there and the manifest specifies the right configuration.

The most important thing to note is that before removing the package from my client, the metadata.json pointed to the right package. However, when I removed it and installed the one from my nexus repo, it goes back to this:

{"recipe": {"revision": "0", "remote": "my_private_repo", "properties": {}}, "packages": {}}

These are similar issues: conan-io/conan#5027 - #56 - conan-io/conan#4833

  • Anything else?
    I also tried going to version 1.13.3 and I kept getting this error when simply running conan:
    ERROR: Conan storage path has to be an absolute path

I tried all steps above on Windows 10 and Ubuntu 18.04.2

[DepShield] (CVSS 9.8) Vulnerability due to usage of commons-fileupload:commons-fileupload:1.3.2

Vulnerabilities

DepShield reports that this application's usage of commons-fileupload:commons-fileupload:1.3.2 results in the following vulnerability(s):


Occurrences

commons-fileupload:commons-fileupload:1.3.2 is a transitive dependency introduced by the following direct dependency(s):

org.sonatype.nexus:nexus-rapture:3.14.0-04
        └─ org.sonatype.nexus:nexus-extdirect:3.14.0-04
              └─ org.sonatype.directjngine:directjngine:2.2.5
                    └─ commons-fileupload:commons-fileupload:1.3.2
              └─ commons-fileupload:commons-fileupload:1.3.2

This is an automated GitHub Issue created by Sonatype DepShield. Details on managing GitHub Apps, including DepShield, are available for personal and organization accounts. Please submit questions or feedback about DepShield to the Sonatype DepShield Community.

DepShield encountered errors while building your project

The project could not be analyzed because of build errors. Please review the error messages here. Another build will be scheduled when a change to a manifest file* occurs. If the build is successful this issue will be closed, otherwise the error message will be updated.

This is an automated GitHub Issue created by Sonatype DepShield. GitHub Apps, including DepShield, can be managed from the Developer settings of the repository administrators.

* Supported manifest files are: pom.xml, package.json, package-lock.json, npm-shrinkwrap.json, Cargo.lock, Cargo.toml, main.rs, lib.rs, build.gradle, build.gradle.kts, settings.gradle, settings.gradle.kts, gradle.properties, gradle-wrapper.properties, go.mod, go.sum

Docker build is failing

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    build using docker

  • What feature or behavior is this required for?
    to make the jar file.

  • How could we solve this issue? (Not knowing is okay!)

Sending build context to Docker daemon  509.4kB
Step 1/15 : ARG NEXUS_VERSION=3.14.0
Step 2/15 : FROM maven:3-jdk-8-alpine AS build
 ---> f6ecca2010f4
Step 3/15 : ARG NEXUS_VERSION=3.14.0
 ---> Using cache
 ---> db01143e2e13
Step 4/15 : ARG NEXUS_BUILD=01
 ---> Using cache
 ---> 0a70ee3b3328
Step 5/15 : COPY . /nexus-repository-conan/
 ---> Using cache
 ---> 74c69585b61c
Step 6/15 : RUN cd /nexus-repository-conan/; sed -i "s/3.14.0-04/${NEXUS_VERSION}-${NEXUS_BUILD}/g" pom.xml;     mvn clean package;
 ---> Running in c945242673b4
[INFO] Scanning for projects...
Downloading from central: https://repo.maven.apache.org/maven2/org/sonatype/nexus/plugins/nexus-plugins/3.14.0-01/nexus-plugins-3.14.0-01.pom
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for org.sonatype.repository:nexus-repository-conan:0.0.5: Could not find artifact org.sonatype.nexus.plugins:nexus-plugins:pom:3.14.0-01 in central (https://repo.maven.apache.org/maven2) and 'parent.relativePath' points at wrong local POM @ line 19, column 11
 @
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project org.sonatype.repository:nexus-repository-conan:0.0.5 (/nexus-repository-conan/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM for org.sonatype.repository:nexus-repository-conan:0.0.5: Could not find artifact org.sonatype.nexus.plugins:nexus-plugins:pom:3.14.0-01 in central (https://repo.maven.apache.org/maven2) and 'parent.relativePath' points at wrong local POM @ line 19, column 11 -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
The command '/bin/sh -c cd /nexus-repository-conan/; sed -i "s/3.14.0-04/${NEXUS_VERSION}-${NEXUS_BUILD}/g" pom.xml;     mvn clean package;' returned a non-zero code: 1```

Package install with update flag fails on no package found on remote

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    update an install package using: conan install -u
  • What feature or behavior is this required for?
    To update an already installed package(without version change).
  • How could we solve this issue? (Not knowing is okay!)
    Not sure yet, The issue needs to be pinned to the exact problem.
  • Anything else?
    Environment:
    Nexus 3 OSS 3.14.0-04
    nexus-repository-conan 0.0.4
    conan client 1.1.0
    Additional info:
    When installing a package without the -u or the --update flag, everything works fine.
    Afterwards if trying to install once again the same version with the --update or the -u, conan claims that the package could not be found on the remote (this issue does not exists with the basic conan server that you can get from the conan.io project).

Url rewriting

Currently the rewritten url's are stored. This could be problematic if the server changed hostname or port.
Investigate if it is possible to store the original and rewrite on the fly

conan download 404

Thanks for creating an issue! Please fill out this form so we can be
sure to have all the information we need, and to minimize back and forth.

  • What are you trying to do?
    The "conan install " works OK. Replacing it with "conan download " FAILs.

  • What feature or behavior is this required for?
    The developer wants to find the latest version to package it up for delivery to a target system.

  • How could we solve this issue? (Not knowing is okay!)
    Implement the /search api - compare #13

  • Anything else?
    Did "conan download" work at any time?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.