{"id":20263850,"url":"https://github.com/teddy-gustiaux/github-notifications-rss-feed","last_synced_at":"2025-04-11T02:09:15.549Z","repository":{"id":90157291,"uuid":"238818246","full_name":"teddy-gustiaux/github-notifications-rss-feed","owner":"teddy-gustiaux","description":"Application to generate an RSS feed from your GitHub notifications.","archived":false,"fork":false,"pushed_at":"2022-12-08T03:41:05.000Z","size":27,"stargazers_count":13,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T02:09:08.627Z","etag":null,"topics":["github","python","rss"],"latest_commit_sha":null,"homepage":"","language":"Python","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/teddy-gustiaux.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-07T01:12:07.000Z","updated_at":"2024-08-15T12:54:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"868f8f1c-99cb-48e7-bf60-276f6ec9cba6","html_url":"https://github.com/teddy-gustiaux/github-notifications-rss-feed","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teddy-gustiaux%2Fgithub-notifications-rss-feed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teddy-gustiaux%2Fgithub-notifications-rss-feed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teddy-gustiaux%2Fgithub-notifications-rss-feed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teddy-gustiaux%2Fgithub-notifications-rss-feed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teddy-gustiaux","download_url":"https://codeload.github.com/teddy-gustiaux/github-notifications-rss-feed/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248328160,"owners_count":21085261,"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":["github","python","rss"],"created_at":"2024-11-14T11:36:28.807Z","updated_at":"2025-04-11T02:09:15.530Z","avatar_url":"https://github.com/teddy-gustiaux.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Notifications RSS Feed\n\n## Warning note\n\nThis project is in an **alpha** release stage.\nIt is not recommended for production usage. \n\n## What does it do?\n\nThis application generates an RSS feed from your GitHub notifications, that you can subscribe to in your favorite RSS reader application.\n\nYou no longer have to sort through all the notification emails GitHub is sending you- leverage the power of RSS!\n\n## Prerequisites\n\nPrerequisites:\n\n- You will need to install Docker.\n- You will need a [GitHub personal access token](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line#creating-a-token) to be able to use their API.\nThe `notifications` scope is the only one required.\n\n## Development\n\nSteps:\n\n- Clone this repository\n- Setup your `.env` file (as per the `.env.template` file)\n- You will have to build the Docker image for development once:\n\n```\ncd /path/to/github-notifications-rss-feed\nmake build_development\n```\n\n- Then you can edit the source code files.\nRun the application with:\n\n```\nmake run_development\n```\n\n## Self-hosting installation\n\nIn addition to the prerequisites of the previous, you will want to setup a cron job to run the application regularly.\n\nFor instance, setting up `crontab` to run it every 20 minutes:\n\n```\n*/20 * * * * /path/to/my/script.sh\n```\n\nFor security reasons, use an user with minimum permissions.\nIt is recommended to set up the command in a separate shell script:\n\n```\n#!/bin/sh\n\ndocker run \\\n\t--rm \\\n\t--name ghnrf \\\n\t--env-file /path/to/.env \\\n\t--mount type=bind,source=/path/to/output,target=/app/output \\\n\tteddygustiaux/github-notifications-rss-feed:latest\n```\n\nYou will want to serve your RSS file to the web (see below).\nIt is recommended to store your `.env` file in a different location with appropriate permissions as it contains personal credentials which should not be shared.\n\nFinally, setup a custom sub-domain to access the generate RSS feed.\nI recommend [Let's Encrypt](https://letsencrypt.org/) to get a free TLS certificate.\n\nYou may also likely want to protect your endpoint.\nBasic authentication is a quick and basic (pun intended) way to do this.\nThe web has many resources explaining [how](https://httpd.apache.org/docs/2.4/programs/htpasswd.html) to do [this](https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/).\n\nYour Nginx configuration could look like this:\n\n```\nserver {\n\n    listen 80;\n    server_name ghnrf.example.com;\n\n    location / {\n        return 301 https://ghnrf.example.com$request_uri;\n    }\n\n}\n\nserver {\n\n    listen 443 ssl;\n    server_name ghnrf.example.com;\n    server_tokens off;\n\n    access_log /var/log/nginx/access.log;\n    error_log /var/log/nginx/error.log;\n\n    auth_basic \"Administrator's Area\";\n    auth_basic_user_file /path/to/my.htpasswd;\n\n    ssl_certificate /etc/letsencrypt/live/ghnrf.example.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ghnrf.example.com/privkey.pem;\n\n    root /path/to/output;\n\n    location = /feed.xml {\n        try_files /feed.xml =404;\n    }\n\n    location ^~ / {\n        return 404;\n    }\n\n}\n```\n\nYour feed will be available at https://ghnrf.example.com/feed.xml once the application has run once. \n\n## Notes for Docker Toolbox on Windows \n\nIf you are using Docker Toolbox on Windows, you may want to have your application files in a different directory than the default shared location.\nIn this case, once you have shared the appropriate folder in VirtualBox, the regular commands to run the application will fail.\n\nThe `Makefile` allows to pass up to 3 different parameters indicating where to find the files and folders the application needs to run.\nAll of them default to the current directory.\n\n- `ENV_DIR` must point to the folder containing your `.env` file.\n- `APP_DIR` must point to the folder that itself contains the application source file under a folder named `src`.\n- `OUTPUT_DIR` must point to the folder that itself will have a folder named `output` containing the generated RSS file.\n\nIf all parameters are the same, which is very likely if you are in a development environment, then you can copy the value of the first parameter to the others!\n\n```\nmake run_development ENV_DIR=/path/to/github-notifications-rss-feed APP_DIR=$(ENV_DIR) OUTPUT_DIR=$(ENV_DIR)\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteddy-gustiaux%2Fgithub-notifications-rss-feed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteddy-gustiaux%2Fgithub-notifications-rss-feed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteddy-gustiaux%2Fgithub-notifications-rss-feed/lists"}