{"id":21479312,"url":"https://github.com/rycus86/release-watcher","last_synced_at":"2025-07-15T11:31:41.291Z","repository":{"id":46653881,"uuid":"126096125","full_name":"rycus86/release-watcher","owner":"rycus86","description":"Watcher for new releases of projects","archived":false,"fork":false,"pushed_at":"2022-01-11T00:27:46.000Z","size":3078,"stargazers_count":60,"open_issues_count":2,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-09T03:24:12.603Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rycus86.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-20T23:32:14.000Z","updated_at":"2025-02-12T19:26:28.000Z","dependencies_parsed_at":"2022-09-23T05:24:47.103Z","dependency_job_id":null,"html_url":"https://github.com/rycus86/release-watcher","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rycus86/release-watcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rycus86%2Frelease-watcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rycus86%2Frelease-watcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rycus86%2Frelease-watcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rycus86%2Frelease-watcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rycus86","download_url":"https://codeload.github.com/rycus86/release-watcher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rycus86%2Frelease-watcher/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265431646,"owners_count":23764031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-23T11:24:36.282Z","updated_at":"2025-07-15T11:31:40.122Z","avatar_url":"https://github.com/rycus86.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Release Watcher\n\nWatches new releases and sends notification when they're available.\n\nCurrently supports fetching releases from:\n\n- [GitHub](https://github.com)\n- [Docker Hub](https://hub.docker.com)\n- [PyPI](https://pypi.org)\n- [JetBrains](https://www.jetbrains.com)\n- [Artifact Hub](https://artifacthub.io)\n- [Helm Hub](https://hub.helm.sh) (Deprecated)\n\nCurrently supports notifications to:\n\n- [Slack](https://slack.com)\n\nThe application periodically checks the target projects using their provider, and sends out a notificiation with some details about new releases when it finds them. Previously seen releases are kept in a [SQLite](TODO) database.\n\n## Usage\n\nWith Docker:\n\n```shell\n$ docker run -d --name release-watcher \t\t\t\t\\\n\t-v $PWD/release-watcher.yml:/var/conf/releases.yml:ro \t\\\n\t-v $PWD/data:/data \t\t\t\t\t\\\n\t-e CONFIGURATION_FILE=/var/conf/releases.yml \t\t\\\n\t-e DATABASE_PATH=/data/releases.db\t\t\t\\\n\t-e SLACK_WEBHOOK_URL=https://some.slack.webhook.url\t\\\n\trycus86/release-watcher\n```\n\nAlternatively, build with Go (tested on version 1.10, 1.14, 1.16), then execute:\n\n```shell\n$ export DATABASE_PATH=$PWD/releases.db\n$ export SLACK_WEBHOOK_URL=https://some.slack.webhook.url\n$ ./release-watcher\n```\n\n## Configuration\n\nThe application needs the target projects to be defined in a *YAML* configuration file. An example would be:\n\n```yaml\nreleases:\n  github:\n    - owner: docker\n      repo: docker-py\n    - owner: nginx\n      repo: nginx\n      useTags: true\n\n  dockerhub:\n    - repo: nginx\n    - owner: rycus86\n      repo: grafana\n\n  pypi:\n    - name: flask\n\n  jetbrains:\n    - name: go\n      alias: GoLand\n\n  helmhub:\n    - repo: bitnami\n      chart: airflow\n\n  artifacthub:\n    - repo: bitnami\n      chart: postgresql\n```\n\nThe root `releases` holds mappings, keyed by the provider name, and the value being a list of project configurations. The available providers and their related configuration is listed below.\n\nEach project can also have a `filter` property, which is a regular expression for whitelisting which releases to notify for. This defaults to `^[0-9]+.[0-9]+.[0-9]+$`, so it would match `1.2.3`, but not `1.2.3-rc1` for example.\n\n### GitHub\n\nThe `github` provider looks for GitHub releases. The configuration items need to have an `owner` and `repo` property.  \n`github` also provides a parameter `useTags`, type `bool`, which specifies whether the repo gets its version information from releases or tags.\n\nThis provider accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/github` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `GITHUB_TOKEN` | The GitHub OAuth token if you wish to make authenticated API calls, to get better rate-limiting. ([token generation](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line) - no scopes are needed) | - |\n| `GITHUB_USERNAME` | The GitHub username for basic authentication instead of Oauth with token | - |\n| `GITHUB_PASSWORD` | The GitHub password for the username | - |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### Docker Hub\n\nThe `dockerhub` provider looks for new image tags on Docker Hub. The configuration items need to have a `repo` property and usually an `owner`, which defaults to `library` if omitted.\n\nThis provider accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/dockerhub` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n| `PAGE_SIZE` | The number of tags to check on each call, per project | `50` |\n\n### PyPI\n\nThe `pypi` provider looks for new releases on PyPI. The configuration items need to have a `name` property.\n\nThis provider accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/pypi` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### JetBrains\n\nThe `jetbrains` provider looks for new releases for JetBrains applications. The configuration items need to have a `name` property, which is the application ID as JetBrains knows it. It could also include an `alias` property to display in the notifications instead of the ID.\n\nThis provider accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/jetbrains` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### Artifact Hub\n\nThe `artifacthub` provider looks for new Helm chart versions. The configuration items need to have a `repo` property and a `chart`.\n\nThis provider accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/artifacthub` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### Helm Hub (deprecated)\n\nThe `helmhub` provider looks for new Helm chart versions. The configuration items need to have a `repo` property and a `chart`. This provider is replaced by `artifacthub`\n\nThis provider accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/helmhub` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### Slack notifications\n\nThe Slack notification manager accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/slack` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `SLACK_WEBHOOK_URL` | The target Slack webhook to send the notifications to __(required)__ | - |\n| `SLACK_CHANNEL` | The target channel to use, otherwise the default for the webhook | - |\n| `SLACK_USERNAME` | The user name to display on the notification in Slack | `release-watcher` |\n| `SLACK_ICON_URL` | The URL of the image to display on the notification | - |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### Telegram notifications\n\nThe Telegram notification manager accepts some optional configuration parameters, either from environment variables, or a key-value file at `/var/secrets/telegram` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `NOTIFICATION_SERVICE` | Set to `telegram` to change notifications from Slack to Telegram, otherwise will use Slack __(required)__ | slack |\n| `TELEGRAM_BOT_TOKEN` | The telegram bot token __(required)__ | - |\n| `TELEGRAM_CHAT_ID` | The user ID message to __(required)__ | - |\n| `HTTP_TIMEOUT` | The HTTP timeout for API calls | `30s` |\n\n### General configuration\n\nThere are some more, general configuration parameters, either from environment variables, or a key-value file at `/var/secrets/release-watcher` in `KEY=VALUE` format on each line.\n\n| Key | Description | Default |\n| --- | ----------- | ------- |\n| `CONFIGURATION_FILE` | The configuration *YAML* file for the projects | `release-watcher.yml` |\n| `DATABASE_PATH` | The path to the SQLite database file | `file::memory:?cache=shared` |\n| `CHECK_INTERVAL` | The frequency to check for new releases | `4h` |\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frycus86%2Frelease-watcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frycus86%2Frelease-watcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frycus86%2Frelease-watcher/lists"}