Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
integrations.txt
/config-offline.json
/.env
*.local.*
55 changes: 16 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,50 +1,24 @@
# **Veno**

📢 **VE**rsion **NO**tifier – Stay updated with the latest versions of your essential software!
**VE**rsion **NO**tifier – Stay updated with the latest versions of your essential software!

[![GitHub Release](https://img.shields.io/github/v/release/marekzan/veno)](https://github.com/marekzan/veno/releases)
[![License](https://img.shields.io/badge/license-Apache%202.0%20or%20MIT-blue.svg)](./LICENSE)

## 🚀 **Overview**
## **Overview**

Veno is a lightweight tool that tracks new versions of software packages and notifies you via email, webhooks, or chat integrations. Define **artifacts** in a simple config file and attach multiple **notifiers**—Veno will do the rest!

## 🔍 **How It Works**
## **How It Works**

1. Define software packages (**artifacts**) in `config.json`.
2. Choose notification methods (**notifiers**) like email, Slack, or webhooks.
3. Run Veno via CLI or Web Service to get version updates.

## 📦 **Artifacts**

Artifacts represent the software packages you want to track. Veno currently supports:
| Source | Status |
|------------|---------|
| **GitHub** | ✅ Supported |
| **Dockerhub** | ✅ Supported |
| **ArtifactHub** | ✅ Supported |
| **GitLab** | 🔜 Planned |
| **Bitbucket** | 🔜 Planned |

## 🔔 **Notifiers**

Choose how to receive notifications:
| Notifier | Status |
|------------|--------|
| **Email** | ✅ Supported |
| **Webhook** | ✅ Supported |
| **Google Chat** | 🚧 Basic support |
| **Slack** | 🚧 Basic support |
| **Microsoft Teams** | 🔜 Planned |

## ⚙️ **Usage**

Veno supports three operation modes:
| Mode | Status | Description |
|------|--------|-------------|
| **CLI** | ✅ Working | Run checks on demand |
| **Web Service** | 🚧 In Progress | REST API for version tracking |
| **Daemon** | 🔜 Planned | Automated background scheduling |
> [!Note]
> See what is currently supported [here](docs/whats_working.md).

## How to Run

**Build it**

Expand All @@ -58,20 +32,23 @@ You find the binary in `target/release/veno-cli`.
veno-cli --config path/to/config.json
```

## 🔧 **Configuration**
> [!Tip]
> We recommend to use the binary as a cron job (or any other scheduling task manager) in your cluster, so you can get the updates in the right time.

## **Configuration**

All modes require a `config.json` file. Example configuration can be found [here](examples/CONFIG.md).
All modes require a `config.json` file. Example configuration can be found [here](docs/config.md).
You can also set values using environment variables via the `${}` syntax.

## 🛤️ **Features & Roadmap**
## **Features & Roadmap**

For upcoming features, check the [roadmap](ROADMAP.md).
For upcoming features, check the [Issues](https://github.com/marekzan/veno/issues?q=is%3Aissue%20state%3Aopen%20label%3Afeature%2Crefactor) or the [Milestones](https://github.com/marekzan/veno/milestones)

## 💡 **Contributing**
## **Contributing**

Contributions are welcome! Fork the repository and submit a pull request.

## 📝 **License**
## **License**

Veno is dual-licensed under:

Expand Down
61 changes: 0 additions & 61 deletions ROADMAP.md

This file was deleted.

73 changes: 4 additions & 69 deletions examples/CONFIG.md → docs/artifacts.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
# Example Config
# Artifacts

```{
"artifacts": [],
"notifiers": []
}
```

## Artifacts

### GitHub
## GitHub

For the identifier value you just take the part of the url with the `username/reponame`

Expand All @@ -25,7 +17,7 @@ For the identifier value you just take the part of the url with the `username/re
},
```

### Artifacthub
## Artifacthub

For the identifier value you just take the part of the url with the `kind/organization/packagename`

Expand All @@ -42,7 +34,7 @@ For the identifier value you just take the part of the url with the `kind/organi
},
```

### Dockerhub
## Dockerhub

For the identifier value you just take the part of the url with the `username/imagename`.
Official images have a special syntax `_/nginx` for example. For these you just use the image name `nginx`.
Expand All @@ -59,60 +51,3 @@ Official images have a special syntax `_/nginx` for example. For these you just
"notifier": ["private_email"]
}
```

## Notifiers

### Email

```
{
"name": "private_email",
"sink": {
"type": "email",
"host": "smtp.gmail.com",
"port": 587, // optional - default: 587
"username": "username",
"password": "${EMAIL_PASSWORD}",
"to": "[email protected]",
"subject": "New version available" // optional - default: "New version available"
}
}
```

### Webhook

The webhook value is just the `url` to the webhook. `Slack` and `Google Chat` use the webhook logic under the hood but they will offer a default chat card in the future.

```
{
"name": "generic_webhook",
"sink": {
"type": "webhook",
"webhook": ".."
}
}
```

### Slack

```
{
"name": "team_slack",
"sink": {
"type": "slack",
"webhook": ".."
}
}
```

### Google Chat

```
{
"name": "team_google_chat",
"sink": {
"type": "google_chat",
"webhook": "..."
}
}
```
36 changes: 36 additions & 0 deletions docs/config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
```json
{
"artifacts": [
{
"name": "Rust",
"current_version": "1.82.0",
"source": {
"type": "github",
"identifier": "rust-lang/rust"
},
"notifier": ["private_email", "google_chat"]
}
],
"notifiers": [
{
"name": "private_email",
"sink": {
"type": "email",
"host": "smtp.gmail.com",
"port": 587,
"username": "${EMAIL_USERNAME}",
"password": "${EMAIL_PASSWORD}",
"to": ["[email protected]"],
"subject": "New version of"
}
},
{
"name": "team_google_chat",
"sink": {
"type": "google_chat",
"webhook": "https://google_chat.com/webhook"
}
}
]
}
```
56 changes: 56 additions & 0 deletions docs/notifiers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Notifiers

## Email

```
{
"name": "private_email",
"sink": {
"type": "email",
"host": "smtp.gmail.com",
"port": 587, // optional - default: 587
"username": "username",
"password": "${EMAIL_PASSWORD}",
"to": "[email protected]",
"subject": "New version available" // optional - default: "New version available"
}
}
```

## Webhook

The webhook value is just the `url` to the webhook. `Slack` and `Google Chat` use the webhook logic under the hood but they will offer a default chat card in the future.

```
{
"name": "generic_webhook",
"sink": {
"type": "webhook",
"webhook": ".."
}
}
```

## Slack

```
{
"name": "team_slack",
"sink": {
"type": "slack",
"webhook": ".."
}
}
```

## Google Chat

```
{
"name": "team_google_chat",
"sink": {
"type": "google_chat",
"webhook": "..."
}
}
```
32 changes: 32 additions & 0 deletions docs/whats_working.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Features

## Modes

| **Status** | **Features** |
| ------------ | ------------ |
| ✅ Supported | cli |

## Sources

| Status | Features |
| ------------ | ----------- |
| ✅ Supported | GitHub |
| ✅ Supported | Artifacthub |
| ✅ Supported | Docker Hub |

## Sinks

| Status | Features |
| ---------------- | --------------- |
| ✅ Supported | Generic Webhook |
| ✅ Supported | Email |
| 🚧 Basic support | Slack |
| 🚧 Basic support | Google Chat |

## Features

| Status | Features |
| ------------ | ------------------------------------ |
| ✅ Supported | multiple notifiers for a sink |
| ✅ Supported | environment variables in config file |
| ✅ Supported | multiple recipients for email sink |