<h1 align="center" style="border-bottom: none">
    <a href="//release-argus.io" target="_blank"><img alt="Argus" src="/web/ui/react-app/public/favicon.svg" height=128></a><br>Argus
</h1>

<div align="center">

Keeping an eye on releases.

[![GitHub](https://img.shields.io/github/license/release-argus/Argus)](https://github.com/release-argus/Argus/blob/master/LICENSE)
[![GitHub go.mod Go version (subdirectory of monorepo)](https://img.shields.io/github/go-mod/go-version/release-argus/Argus?filename=go.mod)](https://go.dev/dl/)
[![GitHub package.json dependency version (subfolder of monorepo)](https://img.shields.io/github/package-json/dependency-version/release-argus/Argus/react?filename=web%2Fui%2Freact-app%2Fpackage.json)](https://reactjs.org/)
[![Codecov](https://img.shields.io/codecov/c/github/release-argus/Argus)](https://app.codecov.io/gh/release-argus/Argus)
<br>
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/release-argus/Argus/build-binary.yml)](https://github.com/release-argus/Argus/actions/workflows/build-binary.yml)
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/release-argus/Argus)](https://github.com/release-argus/Argus/releases)
[![GitHub all releases](https://img.shields.io/github/downloads/release-argus/Argus/total)](https://github.com/release-argus/Argus/releases)
[![GitHub release (latest by SemVer)](https://img.shields.io/github/downloads/release-argus/Argus/latest/total)](https://github.com/release-argus/Argus/releases/latest)
<br>
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/release-argus/Argus/build-docker.yml)](https://github.com/release-argus/Argus/actions/workflows/build-docker.yml)
[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/releaseargus/argus?sort=semver)](https://hub.docker.com/r/releaseargus/argus/tags)
[![Docker Image Size (latest semver)](https://img.shields.io/docker/image-size/releaseargus/argus?sort=semver)](https://hub.docker.com/r/releaseargus/argus/tags)
[![Docker Pulls](https://img.shields.io/docker/pulls/releaseargus/argus)](https://hub.docker.com/r/releaseargus/argus)

</div>

Argus will query websites at a user defined interval for new software releases and then trigger Gotify/Slack/Other notification(s) and/or WebHook(s) when one has been found.
For example, you could set it to monitor the Argus repo ([release-argus/Argus](https://github.com/release-argus/Argus)). This will query the [GitHub API](https://api.github.com/repos/release-argus/Argus/releases) and track the "tag_name" variable. When this variable changes from what it was on a previous query, a GitHub-style WebHook could be sent that triggers something (like AWX) to update Argus on your server.

##### Table of Contents

- [Demo](#demo)
- [Command-line arguments](#command-line-arguments)
- [Building from source](#building-from-source)
  - [Prerequisites](#prerequisites)
  - [Go changes](#go-changes)
  - [React changes](#react-changes)
- [Getting started](#config-formatting)
  - [Config formatting](#getting-started)

## Demo

A demo of Argus can be seen on our website [here](https://release-argus.io/demo).

## Command-line arguments

```bash
$ argus -h
Usage of /usr/local/bin/argus:
  -config.check
        Print the fully-parsed config.
  -config.file string
        Argus configuration file path (env_var=ARGUS_CONFIG_FILE) (default "config.yml")
  -data.database-file string
        Database file path (env_var=ARGUS_DATA_DATABASE_FILE) (default "data/argus.db")
  -data.readonly
        Disable persisting config changes back to the config file (env_var=ARGUS_DATA_READONLY)
  -log.level string
        ERROR, WARN, INFO, VERBOSE or DEBUG (env_var=ARGUS_LOG_LEVEL) (default "INFO")
  -log.timestamps
        Enable timestamps in CLI output (env_var=ARGUS_LOG_TIMESTAMPS)
  -test.commands commands
        Put the name of the Service to test the commands of.
  -test.notify string
        Put the name of the Notify service to send a test message.
  -test.service string
        Put the name of the Service to test the version query.
  -web.basic-auth.password string
        Password for basic auth (env_var=ARGUS_WEB_BASIC_AUTH_PASSWORD)
  -web.basic-auth.username string
        Username for basic auth (env_var=ARGUS_WEB_BASIC_AUTH_USERNAME)
  -web.cert-file string
        HTTPS certificate file path (env_var=ARGUS_WEB_CERT_FILE)
  -web.listen-host string
        IP address to listen on for UI, API, and telemetry (env_var=ARGUS_WEB_LISTEN_HOST) (default "0.0.0.0")
  -web.listen-port string
        Port to listen on for UI, API, and telemetry (env_var=ARGUS_WEB_LISTEN_PORT) (default "8080")
  -web.pkey-file string
        HTTPS private key file path (env_var=ARGUS_WEB_PKEY_FILE)
  -web.route-prefix string
        Prefix for web endpoints (env_var=ARGUS_WEB_ROUTE_PREFIX) (default "/")
```

## Building from source

### Prerequisites

The backend of Argus is built with [Go](https://go.dev/), and the frontend with [React](https://reactjs.org/). The React frontend is built and then [embedded](https://pkg.go.dev/embed) into the Go binary so that those web files can be served.

- [Go 1.25+](https://go.dev/dl/)
- [NodeJS 24](https://nodejs.org/en/download/)

### Go changes

To see the changes you've made by modifying any of the `.go` files, you must compile Argus. Run `make build` the first time to ensure the web components are available locally. Any future builds that don't need the web-ui to be rebuilt can be done with `make go-build` (faster than `make build`). Running either of these in the root dir will produce an `argus` binary.

### React changes

To see the changes after modifying anything in `web/ui/react-app`, you must recompile both the Go backend and the React frontend. This can be done by running `make build`. Running this in the root dir will produce the `argus` binary.

## Getting started

To get started with Argus, simply download the binary from the [releases page](https://github.com/release-argus/Argus/releases), and set up the config for that binary.

For further help, check out the [Getting Started](https://release-argus.io/docs/getting-started/) page on our website.

### Config formatting

The config can be broken down into 5 key areas. ([Further help](https://release-argus.io/docs/config/))

- [defaults](https://release-argus.io/docs/config/defaults/) - This is broken down into areas with defaults for [services](https://release-argus.io/docs/config/defaults/#service-portion), [notify](https://release-argus.io/docs/config/defaults/#notify-portion) and [webhooks](https://release-argus.io/docs/config/defaults/#webhook-portion).
- [settings](https://release-argus.io/docs/config/settings/) - Settings for the Argus server.
- [service](https://release-argus.io/docs/config/service/) - A dictionary mapping of all the services to monitor as well as what to notify when a new release is found.
- [notify](https://release-argus.io/docs/config/notify/) - A dictionary mapping of targets for Notify messages.
- [webhook](https://release-argus.io/docs/config/webhook/) - A dictionary mapping of targets for WebHooks.
