Travis CI for an unregistered package

I’m having trouble making a basic Travis CI script for an unregistered package.

This is the .travis.yml script that I’m using:

language: julia
os:
  - linux

julia:
  - 1.0

notifications:
  email: false

script:
  - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi
  - julia -e 'using Pkg; Pkg.clone("https://github.com/JuliaPOMDP/IncrementalPruning.jl"); Pkg.build("IncrementalPruning"); Pkg.test("IncrementalPruning"; coverage=true)'

after_success:
  - julia -e 'cd(Pkg.dir("IncrementalPruning")); import Pkg; Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())'

which gives the following error:

ERROR: Cannot develop package with the same name or uuid as the project

As far as I can tell I’m not loading the same package within the project, but maybe I’m missing something? I ran the second line of the script section of the yaml locally on a windows machine, and all the tests pass:

using Pkg; Pkg.clone("https://github.com/JuliaPOMDP/IncrementalPruning.jl"); Pkg.build("IncrementalPruning"); Pkg.test("IncrementalPruning"; coverage=true)

...[lots of notifications]...

Test Summary:              | Pass  Total
Incremental Pruning Solver |   15     15
   Testing IncrementalPruning tests passed

Is there a problem with my yaml file? I tried to work from some example yaml’s for registered packages. Here’s my project.toml and REQUIRE:

name = "IncrementalPruning"
uuid = "82ee451e-1805-57fd-b4f9-e90c19bcb3e9"
repo = "https://github.com/JuliaPOMDP/IncrementalPruning.jl"

[deps]
Clp = "e2554f3b-3117-50c0-817c-e040a3ddf72d"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
ParticleFilters = "c8b314e2-9260-5cf8-ae76-3be7461ca6d0"
POMDPModelTools = "08074719-1b2a-587c-a292-00f91cc44415"
POMDPPolicies = "182e52fb-cfd0-5e46-8c26-fd0667c990f4"
POMDPs = "a93abf59-7444-517b-a68a-c42f96afdd7d"

[extras]
BeliefUpdaters = "8bb6e9a1-7d73-552c-a44a-e5dc5634aac4"
POMDPModels = "355abbd5-f08e-5560-ac9e-8b5f2592a0ca"
POMDPSimulators = "e0d0a172-29c6-5d4e-96d0-f262df5d01fd"
POMDPTesting = "92e6a534-49c2-5324-9027-86e3c861ab81"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["BeliefUpdaters", "POMDPModels", "POMDPSimulators", "POMDPTesting", "Test"]
julia 1.0
Clp
JuMP
LinearAlgebra
ParticleFilters
POMDPModels
POMDPs
POMDPToolbox

Thanks in advance for any advice!

1 Like

It should work if you just use the default script, i.e. leave the script part undefined.

What happens is that you, with the Pkg.clone part, try to add the package as a dependency to itself.

Thanks for the suggestion. I tried it but now I have a different error:

ERROR: MethodError: no method matching getindex(::Nothing, ::String)
Stacktrace:
 [1] #build_versions#47(::Bool, ::Function, ::Pkg.Types.Context, ::Array{Base.UUID,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/Operations.jl:1045
 [2] build_versions at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/Operations.jl:1034 [inlined]
 [3] #instantiate#59(::Nothing, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Pkg.Types.Context) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/API.jl:570
 [4] instantiate at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/API.jl:532 [inlined]
 [5] #build#53(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/API.jl:457
 [6] build at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/API.jl:436 [inlined]
 [7] build at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/API.jl:434 [inlined]
 [8] build() at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/API.jl:431
 [9] top-level scope at none:1
The command "julia --color=yes -e "if VERSION < v\"0.7.0-DEV.5183\"; Pkg.clone(pwd()); Pkg.build(\"${JL_PKG}\"); else using Pkg; if VERSION >= v\"1.1.0-rc1\"; Pkg.build(verbose=true); else Pkg.build(); end; end"" failed and exited with 1 during .

It looks like the default script also has a clone command at Pkg.clone(pwd())? I’m not sure that the uuid in my project.toml is correct. Maybe that’s part of the problem? I just copied the uuid from a defunct branch of the same project, but I’m not sure where that branch originally got the uuid.

That is an error you usually get when something in the Manifest.toml does not make sense, e.g. some package has the wrong uuid or some package is in there when it shouldn’t.

There is no “correct” uuid in general, you can just generate one. However, if you plan on registering the package I would suggest you use the output of PPkg.METADATA_compatible_uuid("IncrementalPruning").

I checked your repo and indeed the problem is that you have dangling packages in your Manifest.toml file, which has no connection to your Project.toml file. This means that your Manifest.toml have not been generated by the package manager itself, and is thus not understood by the package manager. In Julia 1.1 such dangling packages will simply be ignored, so the error is not visible there.

It looks like you somehow have included the test-only dependencies in your Manifest.toml (by hand? I hope not…). The simplest fix is to just remove the Manifest.toml file, and then instantiate which should create a new correct file for you.

Thanks, that worked perfectly!

I originally had all the project dependencies and the test dependencies in the [deps] section of the Project.toml and I didn’t fix the Manifest.toml after I updated the Project.toml to move the test dependencies to [extras].