Using Artifacts for test data

Before 1.5, I’d used Artifacts quite successfully to make a large data set (10’s of MB) available for testing. I don’t want to include the test data in the main package because many users will never use it. The Artifact mechanism seemed ideal.

However, recently the scheme has broken. It seems that since Julia is now caching the artifacts on its own server, it no longer looks to the URL specified in the Artifact.toml file for the data. I notice this as errors on Travis

Downloading artifact: rplraw
Exception calling "DownloadFile" with "2" argument(s): "The remote server returned an error: (404) Not Found."
At line:12 char:1
+ $webclient.DownloadFile("https://pkg.julialang.org/artifact/bfa36c455 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

How do I make the Artifact data available through the cache site? Am I supposed to use PkgBuilder for non-executables?

Thanks!

1 Like

I know this is old, but this is a great idea! I have the same problem, my unit tests require a large dataset, I don’t want this to live in the project, so artifacts seems like the perfect solution.

Did you find a solution?

Yes, I use DataDeps.jl - It works really nicely on local computers and is relatively transparent. However, it doesn’t work so well for CI.

1 Like

OK, CI is what I’m currently trying to figure out. If I don’t have control over the computer that is used for testing, it’s hard to figure out how to quickly make large datasets available. And of course these datasets shouldn’t live inside the package. And I have several separate packages that all use this same data for testing. Something I can deal with on my local PC, but challenging in the cloud!

Any updates on this issue? Perhaps this is related to Github artifact cache?

I’m getting the following error from CI (locally tests work fine):

ERROR: LoadError: Artifact "MyArtifact" was not installed correctly.
Try `using Pkg; Pkg.instantiate()` to re-install all missing resources.