Use env vars
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import tokens from '../tokens.json';
|
||||
import 'dotenv/config';
|
||||
|
||||
type GithubAuthor = {
|
||||
name: string;
|
||||
@@ -115,7 +115,7 @@ const fetchCommits = async (
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${tokens.githubToken}`,
|
||||
Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
|
||||
},
|
||||
body: JSON.stringify({ query, variables }),
|
||||
})
|
||||
|
||||
@@ -10,7 +10,6 @@ import path from 'path';
|
||||
import fs from 'fs';
|
||||
import readline from 'readline';
|
||||
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
||||
import tokens from '../tokens.json';
|
||||
import {
|
||||
ActionByTranslationUrlByUserUrl,
|
||||
ContributionsByLanguage,
|
||||
@@ -74,25 +73,23 @@ const extractContributionInfoFromChanges = (
|
||||
|
||||
const getUsernameByUserUrlMap = async (
|
||||
userUrlsByTranslationUrl: UserUrlsByTranslationUrl,
|
||||
authToken: string,
|
||||
): Promise<Record<string, string>> =>
|
||||
Object.fromEntries(
|
||||
(await Promise.all(
|
||||
Object.values(userUrlsByTranslationUrl)
|
||||
.flat()
|
||||
.map(async (userUrl) => [userUrl, await getUsername(userUrl, authToken)]),
|
||||
.map(async (userUrl) => [userUrl, await getUsername(userUrl)]),
|
||||
)) satisfies [string, string][],
|
||||
);
|
||||
|
||||
const getLanguageNameByTranslationUrl = async (
|
||||
userUrlsByTranslationUrl: UserUrlsByTranslationUrl,
|
||||
authToken: string,
|
||||
): Promise<LanguageNameByTranslationUrl> =>
|
||||
Object.fromEntries(
|
||||
(await Promise.all(
|
||||
Object.keys(userUrlsByTranslationUrl)
|
||||
.flat()
|
||||
.map(async (translationUrl) => [translationUrl, await getLanguageName(translationUrl, authToken)]),
|
||||
.map(async (translationUrl) => [translationUrl, await getLanguageName(translationUrl)]),
|
||||
)) satisfies [string, string][],
|
||||
);
|
||||
|
||||
@@ -129,8 +126,8 @@ const doesLanguageOfChangeMeetTranslatePercentThreshold = (
|
||||
return meetsTranslatedPercentThreshold(langaugeStats.translated_percent);
|
||||
};
|
||||
|
||||
const getContributorsForRange = async (url: string, authToken: string): Promise<ContributionsByLanguage> => {
|
||||
const weblateChanges = await fetchWeblateChanges(url, authToken);
|
||||
const getContributorsForRange = async (url: string): Promise<ContributionsByLanguage> => {
|
||||
const weblateChanges = await fetchWeblateChanges(url);
|
||||
const weblateLanguageStats = await fetchWeblateLanguageStats();
|
||||
|
||||
const validWeblateChanges = weblateChanges.filter((change) =>
|
||||
@@ -147,8 +144,8 @@ const getContributorsForRange = async (url: string, authToken: string): Promise<
|
||||
const { userUrlsByTranslationUrl, actionsByTranslationUrlByUserUrl } =
|
||||
extractContributionInfoFromChanges(validWeblateChanges);
|
||||
|
||||
const usernameByUserUrl = await getUsernameByUserUrlMap(userUrlsByTranslationUrl, authToken);
|
||||
const languageNameByTranslationUrl = await getLanguageNameByTranslationUrl(userUrlsByTranslationUrl, authToken);
|
||||
const usernameByUserUrl = await getUsernameByUserUrlMap(userUrlsByTranslationUrl);
|
||||
const languageNameByTranslationUrl = await getLanguageNameByTranslationUrl(userUrlsByTranslationUrl);
|
||||
|
||||
return getUserContributionByLanguage(
|
||||
userUrlsByTranslationUrl,
|
||||
@@ -238,7 +235,7 @@ export const createTranslationChangelog = async (
|
||||
|
||||
const url = `https://hosted.weblate.org/api/components/suwayomi/suwayomi-webui/changes/?timestamp_after=${timestampAfter}×tamp_before=${timestampBefore}&${creditRelevantActions.map((action) => `action=${action}`).join('&')}`;
|
||||
|
||||
const contributorsForRange = await getContributorsForRange(url, tokens.weblateToken);
|
||||
const contributorsForRange = await getContributorsForRange(url);
|
||||
const knownContributorsByLanguage = await getKnownContributorsByLanguage();
|
||||
|
||||
const contributionInfo: { language: string; contributors: string[] }[] = Object.entries(contributorsForRange).map(
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"githubToken": "",
|
||||
"weblateToken": ""
|
||||
}
|
||||
@@ -13,14 +13,14 @@ import {
|
||||
WeblateLanguageStatistic,
|
||||
WeblateUserPayload,
|
||||
} from '@/../tools/scripts/weblate/Weblate.types.ts';
|
||||
import tokens from '../tokens.json';
|
||||
import 'dotenv/config';
|
||||
import { TRANSLATED_PERCENT_THRESHOLD } from '@/../tools/scripts/weblate/Weblate.constants.ts';
|
||||
|
||||
export const fetchData = async <T = any>(url: string, authToken: string): Promise<T> => {
|
||||
export const fetchData = async <T = any>(url: string): Promise<T> => {
|
||||
const response = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Authorization: `Token ${authToken}`,
|
||||
...(process.env.WEBLATE_TOKEN ? { Authorization: `Token ${process.env.WEBLATE_TOKEN}` } : {}),
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
@@ -34,36 +34,29 @@ export const fetchData = async <T = any>(url: string, authToken: string): Promis
|
||||
|
||||
export const fetchWeblateChanges = async (
|
||||
url: string,
|
||||
authToken: string,
|
||||
weblateChangeResults: WeblateChangeResult[] = [],
|
||||
): Promise<WeblateChangeResult[]> => {
|
||||
const weblateChangePage = await fetchData<WeblateChangePayload>(url, authToken);
|
||||
const weblateChangePage = await fetchData<WeblateChangePayload>(url);
|
||||
|
||||
if (!weblateChangePage.next) {
|
||||
return [...weblateChangePage.results, ...weblateChangeResults];
|
||||
}
|
||||
|
||||
return fetchWeblateChanges(weblateChangePage.next, authToken, [
|
||||
...weblateChangePage.results,
|
||||
...weblateChangeResults,
|
||||
]);
|
||||
return fetchWeblateChanges(weblateChangePage.next, [...weblateChangePage.results, ...weblateChangeResults]);
|
||||
};
|
||||
|
||||
export const getUsername = async (url: string, authToken: string): Promise<string> => {
|
||||
const userPayload = await fetchData<WeblateUserPayload>(url, authToken);
|
||||
export const getUsername = async (url: string): Promise<string> => {
|
||||
const userPayload = await fetchData<WeblateUserPayload>(url);
|
||||
return userPayload.full_name;
|
||||
};
|
||||
|
||||
export const getLanguageName = async (url: string, authToken: string): Promise<string> => {
|
||||
const languagePayload = await fetchData<WeblateLanguagePayload>(url, authToken);
|
||||
export const getLanguageName = async (url: string): Promise<string> => {
|
||||
const languagePayload = await fetchData<WeblateLanguagePayload>(url);
|
||||
return languagePayload.language.name.replace(/\(([a-zA-Z]+) Han script\)/g, '($1)');
|
||||
};
|
||||
|
||||
export const fetchWeblateLanguageStats = async () =>
|
||||
fetchData(
|
||||
'https://hosted.weblate.org/api/components/suwayomi/suwayomi-webui/statistics/?format=json-flat',
|
||||
tokens.weblateToken,
|
||||
);
|
||||
fetchData('https://hosted.weblate.org/api/components/suwayomi/suwayomi-webui/statistics/?format=json-flat');
|
||||
|
||||
const dateRegex = /[0-9]{4}-[0-9]{2}-[0-9]{2}/g;
|
||||
const isValidIS08601Date = (date: string): boolean => !!date.match(dateRegex);
|
||||
|
||||
Reference in New Issue
Block a user