Answers: <p>I didn't find anything that was exactly what I was looking for; simple zip/tar and even dpkg didn't have the traceability I was hoping for in a binary-artifact system, so I wrote my own: see <a href="https://github.com/garyo/binary-artifact" rel="nofollow noreferrer">https://github.com/garyo/binary-artifact</a> (MIT licensed).</p>
  
  <p>It's basically a glorified tar/zip creator that creates a manifest with a content signature and a well-defined file name that includes the content sig, so the artifact can be specified in a build file (e.g. Ansible/Puppet/Chef/SCons) in a repeatable, traceable way.</p>
  
  <p>This way the artifacts can live anywhere the build system can find them (Google drive, Dropbox, local NAS, whatever), download them knowing exactly which version is being downloaded (thanks to the specific name), and unpack and use them as usual. This tool makes no assumptions about where the artifacts get stored.</p>
  
Answers: CC BY-SA 4.0
Answers: 2018-10-17T20:43:58.380Z
Answers: 2018-10-17T20:43:58.380Z
Answers: GaryO
Answers: <p>You can always fall back to scp, sftp or the like, i.e. command-line based upload/download. Tags can be done with symlinks, and you don't get advanced metadata, but still.</p>
  
Answers: CC BY-SA 4.0
Answers: 2022-06-04T05:38:48.877Z
Answers: This is how I currently handle my projects with dozen dependencies.
Answers: Kemin Zhou
Answers: CC BY-SA 4.0
Answers: 2018-09-26T06:43:17.480Z
Answers: 2018-09-26T06:43:17.480Z
Answers: AnoE
Answers: <p>I generaly work with a CDN, you can upload files and compressed files, and many CDNs has api ,  <a href="https://cloudinary.com/documentation/django_integration" rel="nofollow noreferrer">like it</a>, but exist many other not conventional solutions, by example insert code or script in a fake image using base 64 and upload it to server public , or use <a href="https://blog.hootsuite.com/facebook-pixel/" rel="nofollow noreferrer">facebook pixel</a> to add script or file. Hope this help you.</p>
  
Answers: CC BY-SA 4.0
Answers: 2018-09-25T22:17:51.587Z
Answers: 2018-09-25T22:17:51.587Z
Answers: Soleil
Body: <p>I'm looking for a binary-artifact repository, but everything I see is super complicated, to set up, use, and manage. All I'm looking for is:</p>
  
  <ul>
  <li>upload repos as tgz/zip with metadata (name, date, tag)</li>
  <li>query and download by SHA and/or name</li>
  <li>a local tool (python-based?) to help create repos from a subdir with the proper metadata and signature</li>
  </ul>
  
  <p>Even a web-based portal is almost more than what I need (sure, it would be nice.)
  Doesn't seem like it should require all the infrastructure and complexity of archiva, artifactory, etc. Or maybe some of these tools have a simple mode and I just can't find it?</p>
  
Comments: CC BY-SA 4.0
Comments: 2018-09-24T23:28:15.287Z
Comments: Hi Gary, it seems like you might have a slightly non-standard process around what you do. It might help if you go into a bit more detail on how you do things in your question.  Also ... in the end an NFS mounted directory with few (shell) scripts is probably the simplest artifact repository out there when it comes down to it. (Substitute rsync, aws s3 or really any https://en.wikipedia.org/wiki/Clustered_file_system)
Comments: Jiri Klouda
Comments: CC BY-SA 4.0
Comments: 2018-09-25T00:47:06.913Z
Comments: As an example: let's say I require a particular version of libfoo to build my product, and libfoo is really complicated and time-consuming to build. I'd like to build it once, say `make-archive` to create `libfoo-win64-dbg-2018-09-24-a1eef00d`. Then in my build script I can say `get-archive <that name>` and it would unpack it if not present and proceed with the build. Then if I want to use a newer libfoo I build it and archive it, and update my build script to use the new name (and check that in). Now the build is reproducible. Sure, it's just some scripts. Surprised that doesn't exist.
Comments: GaryO
Comments: CC BY-SA 4.0
Comments: 2018-09-25T00:49:56.077Z
Comments: Or of course the artifact could be a compiler, a data set, or who knows what. And it would be nice if the artifact itself were self-describing with a manifest, content signature, all that good stuff.
Comments: GaryO
Comments: CC BY-SA 4.0
Comments: 2018-09-25T07:23:46.303Z
Comments: It exists, the scripts are called dpkg. You package the library and upload .deb to a repository. Then install the specific build. Any other example?
Comments: Jiri Klouda
Comments: CC BY-SA 4.0
Comments: 2018-09-25T12:43:06.637Z
Comments: Interesting! I see there is a `wpkg` so this could work cross-OS, which I would want. The creation process looks simple (_much_ simpler than RPM!) The systemwide requirement (needs root, dpkg db is global, installs into `/`) is a small hitch but I'm sure it can be dealt with. @JiriKlouda can you turn your comment into an answer so I can select it as correct?
Comments: GaryO
Comments: CC BY-SA 4.0
Comments: 2018-09-25T17:42:59.787Z
Comments: Actually I would much prefer if you could edit your question and write up an answer about a solution you will end up using so that it would work as a guide for other who find themselves in similar situation. That is what this site is about. I am definitely going to upvote both.
Comments: Jiri Klouda
Comments: CC BY-SA 4.0
Comments: 2018-09-26T01:44:43.267Z
Comments: Formally, Docker images and Docker registry would do as well. Each Docker image is in your case a nginx containing artefacts you can download once you start the container. Might sound weird but you have a naming scheme and SHA based deltas, and tags.
Comments: Ta Mu
Tags: <artifacts><repository>
Title: Are there any truly simple artifact repositories?
UserDisplayName: GaryO
ThreadText: # Are there any truly simple artifact repositories?
  
  (Asked by: username_0 on 2018-09-24)
  
  I'm looking for a binary-artifact repository, but everything I see is super complicated, to set up, use, and manage. All I'm looking for is:
  
  * upload repos as tgz/zip with metadata (name, date, tag)
  * query and download by SHA and/or name
  * a local tool (python-based?) to help create repos from a subdir with the proper metadata and signature
  
  Even a web-based portal is almost more than what I need (sure, it would be nice.)
  Doesn't seem like it should require all the infrastructure and complexity of archiva, artifactory, etc. Or maybe some of these tools have a simple mode and I just can't find it?
  
  **Tags:** artifacts, repository
  
  > **Comments:**
  > **username_1**: Hi Gary, it seems like you might have a slightly non-standard process around what you do. It might help if you go into a bit more detail on how you do things in your question.  Also ... in the end an NFS mounted directory with few (shell) scripts is probably the simplest artifact repository out there when it comes down to it. (Substitute rsync, aws s3 or really any https://en.wikipedia.org/wiki/Clustered_file_system)  
  > **username_0**: As an example: let's say I require a particular version of libfoo to build my product, and libfoo is really complicated and time-consuming to build. I'd like to build it once, say `make-archive` to create `libfoo-win64-dbg-2018-09-24-a1eef00d`. Then in my build script I can say `get-archive <that name>` and it would unpack it if not present and proceed with the build. Then if I want to use a newer libfoo I build it and archive it, and update my build script to use the new name (and check that in). Now the build is reproducible. Sure, it's just some scripts. Surprised that doesn't exist.  
  > **username_0**: Or of course the artifact could be a compiler, a data set, or who knows what. And it would be nice if the artifact itself were self-describing with a manifest, content signature, all that good stuff.  
  > **username_1**: It exists, the scripts are called dpkg. You package the library and upload .deb to a repository. Then install the specific build. Any other example?  
  > **username_0**: Interesting! I see there is a `wpkg` so this could work cross-OS, which I would want. The creation process looks simple (_much_ simpler than RPM!) The systemwide requirement (needs root, dpkg db is global, installs into `/`) is a small hitch but I'm sure it can be dealt with. @username_1 can you turn your comment into an answer so I can select it as correct?  
  > **username_1**: Actually I would much prefer if you could edit your question and write up an answer about a solution you will end up using so that it would work as a guide for other who find themselves in similar situation. That is what this site is about. I am definitely going to upvote both.  
  > **username_2**: Formally, Docker images and Docker registry would do as well. Each Docker image is in your case a nginx containing artefacts you can download once you start the container. Might sound weird but you have a naming scheme and SHA based deltas, and tags.  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_0 on 2018-10-17. Score: 1 | Accepted answer
  
  I didn't find anything that was exactly what I was looking for; simple zip/tar and even dpkg didn't have the traceability I was hoping for in a binary-artifact system, so I wrote my own: see <https://github.com/username_0/binary-artifact> (MIT licensed).
  
  It's basically a glorified tar/zip creator that creates a manifest with a content signature and a well-defined file name that includes the content sig, so the artifact can be specified in a build file (e.g. Ansible/Puppet/Chef/SCons) in a repeatable, traceable way.
  
  This way the artifacts can live anywhere the build system can find them (Google drive, Dropbox, local NAS, whatever), download them knowing exactly which version is being downloaded (thanks to the specific name), and unpack and use them as usual. This tool makes no assumptions about where the artifacts get stored.
  
  
  ---
  
  ### Answer by username_3 on 2018-09-26. Score: 1
  
  You can always fall back to scp, sftp or the like, i.e. command-line based upload/download. Tags can be done with symlinks, and you don't get advanced metadata, but still.
  
  > **Comments:**
  > **username_4**: This is how I currently handle my projects with dozen dependencies.  
  
  ---
  
  ### Answer by username_5 on 2018-09-25. Score: 0
  
  I generaly work with a CDN, you can upload files and compressed files, and many CDNs has api , [like it](https://cloudinary.com/documentation/django_integration), but exist many other not conventional solutions, by example insert code or script in a fake image using base 64 and upload it to server public , or use [facebook pixel](https://blog.hootsuite.com/facebook-pixel/) to add script or file. Hope this help you.
  
  
  ---
  
  