{"id":25588649,"url":"https://github.com/wellwelwel/bot","last_synced_at":"2026-02-25T05:36:56.111Z","repository":{"id":278338565,"uuid":"935255972","full_name":"wellwelwel/bot","owner":"wellwelwel","description":"Create your personal GitHub Action + free server to dispatch your GitHub App Bot. Feel free to fork it and create your own bot ✨","archived":false,"fork":false,"pushed_at":"2026-02-03T00:48:44.000Z","size":217,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-03T14:09:19.766Z","etag":null,"topics":["bot","comment"],"latest_commit_sha":null,"homepage":"https://weslley.io","language":"TypeScript","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/wellwelwel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["wellwelwel"]}},"created_at":"2025-02-19T06:40:51.000Z","updated_at":"2026-02-03T00:48:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"71a4d03a-e13d-4d01-b983-1918c6bad639","html_url":"https://github.com/wellwelwel/bot","commit_stats":null,"previous_names":["wellwelwel/bot"],"tags_count":2,"template":true,"template_full_name":null,"purl":"pkg:github/wellwelwel/bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellwelwel%2Fbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellwelwel%2Fbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellwelwel%2Fbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellwelwel%2Fbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wellwelwel","download_url":"https://codeload.github.com/wellwelwel/bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellwelwel%2Fbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29811578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T05:36:42.804Z","status":"ssl_error","status_checked_at":"2026-02-25T05:36:31.934Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["bot","comment"],"created_at":"2025-02-21T08:49:59.949Z","updated_at":"2026-02-25T05:36:56.106Z","avatar_url":"https://github.com/wellwelwel.png","language":"TypeScript","funding_links":["https://github.com/sponsors/wellwelwel"],"categories":[],"sub_categories":[],"readme":"# 🌀 wellwelwel [bot]\n\nCreate a personal **GitHub Action** + free server to dispatch a bot to comment on external contributions _(forks)_.\n\nFeel free to fork it and create your own bot _(see bellow)_ ✨\n\n---\n\n## 🕹️ Usage\n\n### Commenting directly from the workflow\n\n```yml\nname: Testing\non:\n  pull_request:\n  workflow_dispatch:\njobs:\n  test-bot:\n    runs-on: ubuntu-latest\n    steps:\n      - name: wellwelwel-bot\n        uses: wellwelwel/bot@v1.0.0\n        with:\n          update-if-includes: '\u003c!-- BOT-COMMENT --\u003e'\n          comment: 'Hey, @user! \u003c!-- BOT-COMMENT --\u003e'\n```\n\n### Commenting using a markdown file\n\n```yml\n- name: wellwelwel-bot\n  uses: wellwelwel/bot@v1\n  with:\n    update-if-includes: '\u003c!-- BOT-COMMENT-FILE --\u003e'\n    comment-from-file: './fixtures/comment-file.md'\n```\n\n[**./fixtures/comment-file.md**](./fixtures/comment-file.md):\n\n```md\nHey, @user _(from a file)_! \u003c!-- BOT-COMMENT-FILE --\u003e\n```\n\n\u003e [!TIP]\n\u003e\n\u003e - If you text `@user`, it will be replaced by the current user that opened the Pull Request.\n\u003e - Continue to the documentation to learn how to create your own Action.\n\n---\n\n## 💡 Motivation\n\nPreviously using [**peter-evans/create-or-update-comment@v4**](https://github.com/peter-evans/create-or-update-comment) to automate reports, unfortunately, the **GITHUB_TOKEN** has significant limitations, especially when it comes to forks.\n\nAlso, using `pull_request_target` isn't a safe practice, since it can allow others to use repository secrets directly in their forks.\n\nCreating a bot was the safest way to create automated comments with reports or even welcome you when I'm away in **Issues**, **Pull Requests** and **Discussions**.\n\n---\n\n## 🃏 How to fork it to make it your own\n\nFirst, Find all the _\"wellwelwel\"_ in the repository and replace it with your username or that of your organization.\n\n### 🏠 Local server\n\nInstall dependencies by running:\n\n```sh\nnpm ci\n```\n\nCreate a `.env` for each variable to use your server locally:\n\n```sh\nAPP_ID=''\nPORT=''\n```\n\nThen, put your app `.pem` certificate in `./private-key.pem`.\n\n- You can test your server locally using [**ngrok**](https://ngrok.com/) for free.\n- Once everything is your way, you can move up the server to the service you want.\n\nAvailable **npm** scripts:\n\n- `dev` _(TypeScript Watch Mode)_\n\nURL example: `https://***.ngrok-free.app/webhook`.\n\n---\n\n### 🛜 Serve — Easy, but Paid (Azure, VPS, EC2, etc.)\n\nRun the commands:\n\n- `build` _(Compile to JavaScript)_\n- `serve` _(Serves the Server in Production)_\n\nYou can decide whether to use the certificate as a file or using the `PRIVATE_KEY` local variable secret, including the same local variables (secrets) mentioned in the local server step.\n\nURL example: `https://***/webhook`.\n\n---\n\n### 🌥️ Wangler (Cloudflare Workers)\n\nFirst, convert your PKCS#1 private key (generated from **GitHub**) to PKCS#8:\n\n```sh\nopenssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.pem\n```\n\nThe private key needs to be tailored to a single line. Let's copy it to clipboard:\n\n```sh\n# Unix\nawk 'NF {sub(/\\r/, \"\"); printf \"%s\\\\n\", $0;}' private-key-pkcs8.pem | pbcopy\n\n# Windows\n(Get-Content private-key-pkcs8.pem) -join \"`n\" | Set-Clipboard\n```\n\nNow, we can set the secrets:\n\n```sh\n# Press `Enter` and paste the content from the clipboard (previous command)\nwrangler secret put PRIVATE_KEY\n```\n\nThen continue with the remaining secrets:\n\n```\nwrangler secret put APP_ID\n```\n\nNow in your **Cloudflare** account, you can connect your repository to the **Cloudflare Workers** and use the command `npm run wangler:serve` to serve it for free.\n\nURL example: `https://bot.***.workers.dev`.\n\n---\n\n### ⚗️ GitHub Actions\n\nSet you webhook URL in [**./scripts/dispatch_webhook.js**](./scripts/dispatch_webhook.js).\n\nTo publish in the marketplace, you can use **Git** tags:\n\n```sh\ngit tag -a v1 -m \"feat: create my first app\"\ngit push origin v1\n```\n\n---\n\n### 🤖 GitHub App\n\n\u003e [!IMPORTANT]\n\u003e When creating your **GitHub App**, make sure you select the option so that only you or your organization can use the app.\n\nIn `Repository permissions` you will select:\n\n- Contents (Read-only).\n- Discussions (Read and Write)\n- Issues (Read and Write)\n- Pull requests (Read and Write)\n\n---\n\n### 🔑 Access\n\nGrant your **GitHub App** permission to access the repositories you want. This will allow you to automate comments in any repository that you have allowed the app without any additional keys, including private repositories.\n\n### Last steps\n\nBefore creating your first Pull Request in your fork, go to the _\"Actions\"_ tab of your repository and activate the workflow actions.\n\nNow when you create your first Pull Request within your fork, you'll see a comment similar to this one, but with your own profile avatar:\n\n\u003e \u003cimg src=\"./fixtures/sample.png\" width=\"560\" /\u003e\n\n---\n\n\u003e [!TIP]\n\u003e Doing this process while listening to your favorite playlist can make the challenge more interesting 🎧\n\nMade with Love 💙\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwellwelwel%2Fbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwellwelwel%2Fbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwellwelwel%2Fbot/lists"}