Open-sourcing GAS Script

This commit is contained in:
kakkokari-gtyih 2023-12-21 19:32:32 +09:00
parent cd48d46318
commit b4e507da32
3 changed files with 82 additions and 1 deletions

View File

@ -1 +1,3 @@
pages/**/*-ignore.vue pages/**/*-ignore.vue
locales
__misc

View File

@ -84,6 +84,12 @@ yarn preview
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
## (おまけ) デプロイ時のオートメーションプログラム
`/__misc/gas/` に、Misskey Hubデプロイ時に自動実行しているプログラムを同梱しています。
Google Apps Scriptで動作します。
## License ## License
GNU Affero General Public License v3.0 GNU Affero General Public License v3.0

73
__misc/gas/code.gs Normal file
View File

@ -0,0 +1,73 @@
// プログラムを変更したら都度「デプロイ」を行うこと
// スクリプト プロパティを取得
const env = PropertiesService.getScriptProperties().getProperties();
// Misskey
const MI_API_TOKEN = env.MISSKEY_API_TOKEN ?? null;
// Cloudflare
const CF_API_TOKEN = env.CF_API_TOKEN ?? null;
const CF_ZONE_ID = env.CF_ZONE_ID ?? null;
// Webhook受信時のハンドラ
function doPost(e) {
const params = JSON.parse(e.postData.getDataAsString());
// プロダクションのデプロイ以外・デプロイ成功以外には反応しない
if (params?.deployment?.environment !== 'Production' || params?.action !== 'created') {
return;
}
// Cloudflareのキャッシュパージをやる
if (CF_API_TOKEN && CF_ZONE_ID) {
purgeCfCache();
}
// デプロイされたことをMisskeyに通知する
if (MI_API_TOKEN) {
postToMisskey(params);
}
}
function postToMisskey(d) {
var data = {
i: MI_API_TOKEN,
text: `$[tada 📢] **Misskey Hub <small>(Next)</small> が更新されました!**
早速チェックしましょう ▶ ${d?.repository?.homepage ?? 'https://misskey-hub.net/'}`,
visibility: 'public',
cw: null,
localOnly: false,
reactionAcceptance: 'nonSensitiveOnly',
poll: null,
};
var options = {
contentType: "application/json",
method: "POST",
payload: JSON.stringify(data),
};
const createResult = JSON.parse(UrlFetchApp.fetch("https://misskey.io/api/notes/create", options).getContentText());
Logger.log(createResult);
}
function purgeCfCache() {
var data = {
purge_everything: true,
};
var options = {
contentType: "application/json",
method: "POST",
headers: {
'Authorization': `Bearer ${CF_API_TOKEN}`,
},
payload: JSON.stringify(data),
};
const createResult = JSON.parse(UrlFetchApp.fetch(`https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache`, options).getContentText());
Logger.log(createResult);
}