Track open source software releases.
intercom is built using Python 3.6 and above.
- Projects hosted in GitHub
- Projects hosted in GitLab
- YAML Configurtion
- Automatic update of latest tag
- Ability to output to Standard Output
- Ability to ouptput to JSON
- Ability to output a Webhook
- BitBucket project suppport
- Enterprise Hosted GitHub
- Enterprise Hosted GitLab
- Ability to output to MS Teams
intercom uses YAML as its configuration format.
The base file looks like this:
software:
...
There is only one key for now, called software
. This is where all our configuration will go.
NOTE: There are no limits to the amount of repositories that can be monitored. The program execution length will take longer as more are added.
NOTE: For this program to work, each repository configured, must use the "Releases" function of GitHub or GitLab.
GitHub projects are defined like this:
<name>:
service: github
tag: <latest_tag>
url: <github_web_url>
Key | Description |
---|---|
<name> |
A friendly name of the GitHub repository |
<latest_tag> |
Any tag name. Typically this is the latest one |
<github_web_url> |
The GitHub repository url. The link that would take you to GitHub repo in a web browser |
Add this section under the software
section. For example, a configuration for PyGithub
would look like this:
pygithub:
service: github
tag: v1.5.3
url: https://github.com/PyGithub/PyGithub
GitLab projects are defined like this:
<name>:
service: gitlab
tag: <latest_tag>
project_id: <project_id>
Key | Description |
---|---|
<name> |
A friendly name of the GitHub repository |
<latest_tag> |
Any tag name. Typically this is the latest one |
<project_id> |
The project ID listed under the name of a GitLab project |
Add this section under the software
section. For example, a configuration for OpenRGB
would look like this:
openrgb:
service: gitlab
tag: release_0.4
project_id: 10582521
A full example YAML file would look something like this:
software:
elasticsearch:
service: github
tag: v6.8.13
url: https://github.com/elastic/elasticsearch
wazuh:
service: github
tag: v4.0.0
url: https://github.com/wazuh/wazuh
openrgb:
service: gitlab
tag: release_0.4
project_id: 10582521
gtlab:
service: gitlab
tag: v13.6.0-rc46-ee
project_id: 278964
Outputs are configured using the outputs
key in the root of the YAML document - similar to the software
key.
To configure an output, there are only three keys that are required by all outputs:
<name_of_output>:
type: stdout | json | webhook
software:
- <software_name>
Key | Description |
---|---|
name_of_output |
A friendly name of the output. Is outputted with JSON and webhooks so that you can know where the request came from |
type |
The output that is desired - either stdout, json or webhook |
software |
The friendly names of the OSS you set up in the software root key. They are a list, so need to start with a - as shown in the example. There is no limit to how many pieces of software per output. |
This output type, outputs to the Standard Output of the terminal in the following format:
New Tag for <software_name>: <tag>
There are no additional configuration needed for the stdout
output.
This ouput type, outputs to the Standard Output of the terminal in JSON in the following format:
{
"repo": "<software_name>",
"oldTag": "<old_tag_name>",
"newTag": "<new_tag_name>",
"message": "New release for <software_name> - <new_tag_name>",
"output": "<output_name>"
}
There are no additonal configuration needed for the json
output.
This output type will send a post request to a given url. The JSON sent will be in this style:
{
"repo": "<software_name>",
"oldTag": "<old_tag_name>",
"newTag": "<new_tag_name>",
"message": "New release for <software_name> - <new_tag_name>",
"output": "<output_name>"
}
The webhook
output does require some additional coonfiguration:
Key | Description |
---|---|
url |
The URL to send the POST request to. |
auth |
What type of authentication to send with the request: none, basic or bearer |
No authentication will be sent. No other configuration keys are needed.
webhook-no-auth:
type: webhook
software:
- wazuh
url: http://localhost:5000
auth: none
This will send the Authorization
header for HTTP Basic Authentication.
This will require two additional keys, username
and password
:
webhook-basic-auth:
type: webhook
software:
- wazuh
url: http://localhost:5000
auth: basic
username: user
password: pass
This will send the Authorization
header for HTTP Basic Authentication..
This will require 1 additional key, from the base webhook config, token
. token
is the bearer token or api key of the service.
webhook-basic-auth:
type: webhook
software:
- wazuh
url: http://localhost:5000
auth: bearer
token: SOME_TOKEN
python3 -m intercom verify -c <path_to_config_file>
This will check the config file and report any errors found to the Standard Output.
Change <path_to_config_file>
to the filepath of the YAML config file you added.
python3 -m intercom check -c <path_to_config_file>
This will check each software configured and check if there are updates to the tag.
The -c
/ --config
option is required for intercom to work.
Option | Description |
---|---|
-u / --no-update |
[FLAG] Do not update the YAML file with the new tags |
-o / --output |
Override all outputs in the YAML file for all software. Specify one of stdout or json . |
If the -o
/ --output
option is not specified, all outputs will be evaluated from the YAML file.
This method will require git to be installed, and will install all requirements for you.
For Windows users, replace python3
with python
.
python3 -m pip install git+https://github.com/MattLimb/intercom.git@intercom
- Clone the Repository
git clone https://github.com/MattLimb/intercom.git
- Change Directory into
intercom
.
cd intercom
- Run
setup.py
For Windows users, replace python3
with python
.
python3 setup.py