documentation/.github/workflows/add-instance-updown.yml

150 lines
6.9 KiB
YAML

name: Add instance to updown.io
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
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 }}',
headers: {
'content-type': 'application/json'
},
json: {checks: checksOfStatusPage}
};
request(optionsAddCheckToStatusPage, async function (error, response, body) {
if (error) throw new Error(error);
console.log(body)
});
});
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
})
}