Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/030/yaam
Yet Another Artifact Manager (YAAM) is an artifact repository that is capable of storing and preserving artifacts.
https://github.com/030/yaam
artifact-repository artifactory artifactory-oss cache golang gradle maven nexus3 npm verdaccio
Last synced: 10 days ago
JSON representation
Yet Another Artifact Manager (YAAM) is an artifact repository that is capable of storing and preserving artifacts.
- Host: GitHub
- URL: https://github.com/030/yaam
- Owner: 030
- License: mit
- Created: 2022-05-27T13:29:11.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-22T14:22:52.000Z (5 months ago)
- Last Synced: 2024-06-23T21:38:26.562Z (5 months ago)
- Topics: artifact-repository, artifactory, artifactory-oss, cache, golang, gradle, maven, nexus3, npm, verdaccio
- Language: Go
- Homepage:
- Size: 245 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: docs/SECURITY.md
Awesome Lists containing this project
README
# YAAM
[![CI](https://github.com/030/yaam/workflows/Go/badge.svg?event=push)](https://github.com/030/yaam/actions?query=workflow%3AGo)
[![GoDoc Widget]][godoc]
![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/030/yaam?logo=go)
[![Go Report Card](https://goreportcard.com/badge/github.com/030/yaam)](https://goreportcard.com/report/github.com/030/yaam)
[![StackOverflow SE Questions](https://img.shields.io/stackexchange/stackoverflow/t/yaam.svg?logo=stackoverflow)](https://stackoverflow.com/tags/yaam)
[![DevOps SE Questions](https://img.shields.io/stackexchange/devops/t/yaam.svg?logo=stackexchange)](https://devops.stackexchange.com/tags/yaam)
[![ServerFault SE Questions](https://img.shields.io/stackexchange/serverfault/t/yaam.svg?logo=serverfault)](https://serverfault.com/tags/yaam)
[![Docker Pulls](https://img.shields.io/docker/pulls/utrecht/yaam?logo=docker&logoColor=white)](https://hub.docker.com/r/utrecht/yaam)
![Docker Image Size (latest semver)](https://img.shields.io/docker/image-size/utrecht/yaam?logo=docker&logoColor=white&sort=semver)
![Issues](https://img.shields.io/github/issues-raw/030/yaam.svg)
![Pull requests](https://img.shields.io/github/issues-pr-raw/030/yaam.svg)
![Total downloads](https://img.shields.io/github/downloads/030/yaam/total.svg)
![GitHub forks](https://img.shields.io/github/forks/030/yaam?label=fork&style=plastic)
![GitHub watchers](https://img.shields.io/github/watchers/030/yaam?style=plastic)
![GitHub stars](https://img.shields.io/github/stars/030/yaam?style=plastic)
![License](https://img.shields.io/github/license/030/yaam.svg)
![Repository Size](https://img.shields.io/github/repo-size/030/yaam.svg)
![Contributors](https://img.shields.io/github/contributors/030/yaam.svg)
![Commit activity](https://img.shields.io/github/commit-activity/m/030/yaam.svg)
![Last commit](https://img.shields.io/github/last-commit/030/yaam.svg)
![Release date](https://img.shields.io/github/release-date/030/yaam.svg)
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/030/yaam?logo=github&sort=semver)](https://github.com/030/yaam/releases/latest)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=bugs)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=code_smells)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=coverage)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=ncloc)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=alert_status)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=security_rating)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=sqale_index)](https://sonarcloud.io/dashboard?id=030_yaam)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=030_yaam&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=030_yaam)
[![codecov](https://codecov.io/gh/030/yaam/branch/main/graph/badge.svg)](https://codecov.io/gh/030/yaam)
[![GolangCI](https://golangci.com/badges/github.com/golangci/golangci-web.svg)](https://golangci.com/r/github.com/030/yaam)
[![Chocolatey](https://img.shields.io/chocolatey/dt/yaam)](https://chocolatey.org/packages/yaam)
[![yaam](https://snapcraft.io//yaam/badge.svg)](https://snapcraft.io/yaam)
[![codebeat badge](https://codebeat.co/badges/f4aa5086-a4d5-41cd-893a-5da816ee9107)](https://codebeat.co/projects/github-com-030-yaam-main)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)[godoc]: https://godoc.org/github.com/030/yaam
[godoc widget]: https://godoc.org/github.com/030/yaam?status.svgAlthough there are many artifact managers, like Artifactory, Nexus3 and
Verdaccio, they are either monoliths, consume a lot of resources
(memory and CPU), lack Infrastructure as Code (IaC) or do not support all kind
of artifact types. Yet Another Artifact Manager (YAAM):- is an artifact manager like Artifactory, Nexus3 or Verdaccio.
- enforces IaC.
- has no UI.
- does not have a database.
- scales horizontally.
- supports downloading and publication of Apt, Generic, Maven and NPM
artefacts, preserves NPM and Maven packages from public repositories and
unifies Maven repositories.## Quickstart
Create a directory and change the permissions to ensure that YAAM can store
artifacts:```bash
mkdir ~/.yaam/repositories
sudo chown 9999 -R ~/.yaam/repositories
```Configure YAAM by creating a `~/.yaam/config.yml` with the following content:
```bash
---
caches:
apt:
3rdparty-ubuntu-nl-archive:
url: http://nl.archive.ubuntu.com/ubuntu/
maven:
3rdparty-maven:
url: https://repo.maven.apache.org/maven2/
3rdparty-maven-gradle-plugins:
url: https://plugins.gradle.org/m2/
3rdparty-maven-spring:
url: https://repo.spring.io/release/
other-nexus-repo-releases:
url: https://some-nexus/repository/some-repo/
user: some-user
pass: some-pass
npm:
3rdparty-npm:
url: https://registry.npmjs.org/
groups:
maven:
hello:
- maven/releases
- maven/3rdparty-maven
- maven/3rdparty-maven-gradle-plugins
- maven/3rdparty-maven-spring
publications:
generic:
- something
maven:
- releases
npm:
- 3rdparty-npm
```Start YAAM:
```bash
docker run \
-e YAAM_LOG_LEVEL=trace \
-e YAAM_USER=hello \
-e YAAM_PASS=world \
--rm \
--name=yaam \
-it \
-v /home/${USER}/.yaam:/opt/yaam/.yaam \
-p 25213:25213 utrecht/yaam:v0.5.4
```Once YAAM has been started, configure a project to ensure that artifacts will
be downloaded from this artifact manager.### Apt
sudo vim /etc/apt/auth.conf.d/hello.conf
```bash
machine http://localhost
login hello
password world
```sudo vim /etc/apt/sources.list
```bash
deb http://localhost:25213/apt/3rdparty-ubuntu-nl-archive/ focal main restricted
```Preserve the artifacts:
```bash
sudo apt-get update
```### Generic
Upload:
```bash
curl -X POST -u hello:world \
http://yaam.some-domain/generic/something/world4.iso \
--data-binary @/home/${USER}/Downloads/ubuntu-22.04.1-desktop-amd64.iso
```Troubleshooting:
```bash
413 Request Entity Too Large
```add:
```bash
data:
proxy-body-size: 5G
```and restart the controller pod.
Verify in the `/etc/nginx/nginx.conf` file that the `client_max_body_size` has
been increased to 5G.Download:
```bash
curl -u hello:world http://yaam.some-domain/generic/something/world6.iso \
-o /tmp/world6.iso
```### Gradle
Adjust the `build.gradle` and/or `settings.gradle`:
```bash
repositories {
maven {
allowInsecureProtocol true
url 'http://localhost:25213/maven/releases/'
authentication {
basic(BasicAuthentication)
}
credentials {
username "hello"
password "world"
}
}
maven {
allowInsecureProtocol true
url 'http://localhost:25213/maven/3rdparty-maven/'
authentication {
basic(BasicAuthentication)
}
credentials {
username "hello"
password "world"
}
}
maven {
allowInsecureProtocol true
url 'http://localhost:25213/maven/3rdparty-maven-gradle-plugins/'
authentication {
basic(BasicAuthentication)
}
credentials {
username "hello"
password "world"
}
}
}
```Publish:
```bash
publishing {
publications {
mavenJava(MavenPublication) {
versionMapping {
usage('java-api') {
fromResolutionOf('runtimeClasspath')
}
usage('java-runtime') {
fromResolutionResult()
}
}
}
}repositories {
maven {
allowInsecureProtocol true
url 'http://localhost:25213/maven/releases/'
authentication {
basic(BasicAuthentication)
}
credentials {
username "hello"
password "world"
}
}
}
}
```Preserve the artifacts:
```bash
./gradlew clean
```or publish them:
```bash
./gradlew publish
```### NPM
Create a `.npmrc` file in the directory of a particular NPM project:
```bash
registry=http://localhost:25213/npm/3rdparty-npm/
always-auth=true
_auth=aGVsbG86d29ybGQ=
cache=/tmp/some-yaam-repo/npm/cache20220914120431999
```Note: the `_auth` key should be populated with the output of:
`echo -n 'someuser:somepass' | openssl base64`.```bash
npm i -d
```## Run
Next to docker, one could also use a binary or K8s or OpenShift to run YAAM:
- [Binary.](docs/start/BINARY.md)
- [K8s/OpenShift.](docs/start/K8SOPENSHIFT.md)## Other
- [Background.](docs/other/BACKGROUND.md)
- [Maven unify.](docs/other/MAVEN.md)