diff --git a/.github/workflows/add-instance-updown.yml b/.github/workflows/add-instance-updown.yml new file mode 100644 index 0000000..c6859cd --- /dev/null +++ b/.github/workflows/add-instance-updown.yml @@ -0,0 +1,148 @@ +name: Add instance to uptimerobot + +on: + issues: + types: [opened, reopened] + +jobs: + + replycomment: + + runs-on: ubuntu-latest + permissions: write-all + steps: + - uses: actions/checkout@v3 + if: contains(github.event.issue.labels.*.name, 'instance-add') + - uses: actions/setup-node@v3 + if: contains(github.event.issue.labels.*.name, 'instance-add') + with: + node-version: 16 + - run: npm install request linkifyjs updown.io + if: contains(github.event.issue.labels.*.name, 'instance-add') + - uses: actions/github-script@v6 + if: contains(github.event.issue.labels.*.name, 'instance-add') + with: + script: | + var issueInfo = (await github.rest.issues.get({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + })).data; + var linkify = require("linkifyjs"); + var issueTitleParseUrl = linkify.find(issueInfo.title); + if (issueTitleParseUrl.length !== 0) { + if (issueInfo.title.includes(".onion")) { + var replyComment = + ['Hello! I have detected that you are requesting to add an onion URL.', + 'Please create a pull request instead for adding your onion url as an alternative to your clearnet URL: https://github.com/iv-org/documentation/edit/master/docs/instances.md' + ].join('\n'); + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: replyComment + }); + await github.rest.issues.update({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + state: 'closed' + }); + } + else { + var instanceHostname = (new URL(issueTitleParseUrl[0].href)).hostname; + var request = require("request"); + var optionsAddNewCheck = { method: 'POST', + url: 'https://updown.io/api/checks?api-key=${{ secrets.UPDOWN_API_KEY }}', + json:true, + headers: + { 'content-type': 'application/x-www-form-urlencoded' }, + form: + { url: 'https://' + instanceHostname, + period: '300', + mute_until: 'forever', + published: 'true', + alias: instanceHostname, + string_match: 'An alternative front-end to YouTube' } }; + + + request(optionsAddNewCheck, async function (error, response, body) { + if (error) throw new Error(error); + console.log(body); + if (body.token) { + var optionsGetStatusPages = { + method: 'GET', + url: 'https://updown.io/api/status_pages?api-key=${{ secrets.UPDOWN_API_KEY }}', + json: true + }; + + request(optionsGetStatusPages, async function (error, response, body) { + if (error) throw new Error(error); + const statusPage = body.filter(element => element.token === "resvf"); + let checksOfStatusPage = statusPage[0].checks; + + checksOfStatusPage.push(body.token) + + var optionsAddCheckToStatusPage = { + method: 'PUT', + url: 'https://updown.io/api/status_pages/resvf?api-key=${{ secrets.UPDOWN_API_KEY }}', + json: true, + headers: { + 'content-type': 'application/json' + }, + body: JSON.stringify({checks: checksOfStatusPage}) + }; + + request(optionsAddCheckToStatusPage, async function (error, response, body) { + if (error) throw new Error(error); + }); + }); + + var replyComment = + ['Hello! Your instance has been added to our monitoring system: https://updown.io/' + body.token, + 'You need to wait 30 days before we add your instance, this is to evaluate that your instance will keep a good uptime for one month.', + '', + 'Make sure you double checked all the mandatory checks or this will slow down the process of adding your instance!', + '', + 'Please consult these two important tutorials:', + '', + '- Escaping the YouTube block ([403 errors in playback](https://github.com/iv-org/invidious/issues/4045)): https://docs.invidious.io/ipv6-rotator/', + '', + '- Improving the performance and the stability of your public instance: https://docs.invidious.io/improve-public-instance/', + '', + 'It is highly recommended to follow these tutorials because it will allow the instance to stay stable and performant over the long term.', + '', + 'Please consider joining the Matrix room for public instance maintainers by joining our Matrix room: https://matrix.to/#/#invidious:matrix.org', + 'then pinging @ unixfox, @ TheFrenchGhosty and @ SamantazFox for asking to be invited to the Matrix room.', + 'We discuss troubles managing a public instance, sharing some advices and more.' + ].join('\n'); + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: replyComment + }) + await github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['wait-30-days'] + }) + } + }); + + } + } + else { + var replyComment = + ['Domain not detected in the title, please edit the title by correcting it like this:', + 'Issue title example: `[New instance] https://myinstance.com`' + ].join('\n'); + + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: replyComment + }) + }