Run julia-actions/julia-buildpkg@v1 fails at Julia 1.3

I’m trying to setup CI for my own package https://github.com/jaksle/StableDistributions.jl. I’m not experienced with this. Julia lts, pre, 1 are fine, but Julia 1.3 (minimal version for my package) fails with

Run julia-actions/julia-buildpkg@v1
Run echo "JULIA_PKG_SERVER_REGISTRY_PREFERENCE=${JULIA_PKG_SERVER_REGISTRY_PREFERENCE:-eager}" >> ${GITHUB_ENV}
Run if "false" == "false" && !isdir(DEPOT_PATH[1])
ERROR: LoadError: MethodError: no method matching get(::Pair{String,Any}, ::String, ::Nothing)
Closest candidates are:
  get(!Matched::Base.EnvDict, ::AbstractString, ::Any) at env.jl:80
  get(!Matched::REPL.Terminals.TTYTerminal, ::Any, ::Any) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/REPL/src/Terminals.jl:176
  get(!Matched::IdDict{K,V}, ::Any, ::Any) where {K, V} at abstractdict.jl:596
  ...
Stacktrace:
 [1] Dict{Base.UUID,Pkg.Types.PackageEntry}(::Dict{String,Any}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/manifest.jl:122
 [2] #read_manifest#45(::String, ::typeof(Pkg.Types.read_manifest), ::IOStream) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/manifest.jl:151
 [3] #read_manifest at ./none:0 [inlined]
 [4] #48 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/manifest.jl:155 [inlined]
 [5] #open#271(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(open), ::Pkg.Types.var"#48#49"{String}, ::String) at ./io.jl:298
 [6] open at ./io.jl:296 [inlined]
 [7] read_manifest at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/manifest.jl:154 [inlined]
 [8] Pkg.Types.EnvCache(::Nothing) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/Types.jl:357
 [9] EnvCache at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/Types.jl:336 [inlined]
 [10] Pkg.Types.Context() at ./util.jl:722
 [11] #build#105 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:638 [inlined]
 [12] #build at ./none:0 [inlined]
 [13] #build#102 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:635 [inlined]
 [14] #build at ./none:0 [inlined]
 [15] (::Base.var"#50#51#53"{ExponentialBackOff,Nothing,typeof(Pkg.API.build)})(::Base.Iterators.Pairs{Symbol,Bool,Tuple{Symbol},NamedTuple{(:verbose,),Tuple{Bool}}}, ::Base.var"#50#52"{Base.var"#50#51#53"{ExponentialBackOff,Nothing,typeof(Pkg.API.build)}}) at ./error.jl:266
 [16] (::Base.var"#kw##50#52")(::NamedTuple{(:verbose,),Tuple{Bool}}, ::Base.var"#50#52"{Base.var"#50#51#53"{ExponentialBackOff,Nothing,typeof(Pkg.API.build)}}) at ./none:0
 [17] top-level scope at /home/runner/work/_temp/90ccf82f-35e4-40e5-9363-6b5e85e842a0:32
 [18] include at ./boot.jl:328 [inlined]
 [19] include_relative(::Module, ::String) at ./loading.jl:1105
 [20] include(::Module, ::String) at ./Base.jl:31
 [21] exec_options(::Base.JLOptions) at ./client.jl:287
 [22] _start() at ./client.jl:460
in expression starting at /home/runner/work/_temp/90ccf82f-35e4-40e5-9363-6b5e85e842a0:32
Error: Process completed with exit code 1.

Alas, I have no idea what any of this means. Could anyone help?

You are checking in the manifest, but

  1. as a general rule, the manifest is version-specific, you can’t expect it to be usable with a different Julia version, and that manifest was created with julia v1.10: StableDistributions.jl/Manifest.toml at 3a6bcfa7d29514471f579ff6e9ce801629f1cfc2 · jaksle/StableDistributions.jl · GitHub
  2. more to the point above, the format of the manifest changed over time (remember it’s version-specific anyway?), the format used by your manifest can’t be parsed by previous versions (the new format is versioned, to make handling unsupported formats more graceful, but with older versions of Julia you’ll get errors like the one you found)
  3. manifests are very useful for running production applications, keeping track of the dependencies used, or for letting other people reproduce the computing environment (including the Julia version, do you still remember the manifest is version-specific?) you used for a pipeline (e.g. a scientific analysis, or such), but inside the repository of a package the manifest is not just useless, it can be actively harmful as it causes the issues you’re experiencing when trying to use different Julia versions.

As a summary of all the above: delete the manifest from the repo of your package and git ignore it :slightly_smiling_face:

3 Likes

That was it, thanks :slight_smile: Now runtest does not work at Julia 1.3, but it seems to be independent problem…