Adding donation platform fetching. Fixes #248

This commit is contained in:
Dessalines 2023-10-30 13:29:50 -04:00
parent 4bd4d7a0c4
commit 20b9d73a6b
6 changed files with 82 additions and 13 deletions

View file

@ -16,7 +16,7 @@ pipeline:
prettier_markdown_check: prettier_markdown_check:
image: tmknom/prettier:3.0.0 image: tmknom/prettier:3.0.0
commands: commands:
- prettier -c . "!dist" "!lemmy-docs" "!lemmy-translations" "!joinlemmy-translations" "!lemmy-js-client" "!lemmy-stats-crawler" "!src/shared/instance_stats.ts" - prettier -c . "!dist" "!lemmy-docs" "!lemmy-translations" "!joinlemmy-translations" "!lemmy-js-client" "!lemmy-stats-crawler" "!src/shared/instance_stats.ts" "!src/shared/donation_stats.ts"
yarn: yarn:
image: node:alpine image: node:alpine

View file

@ -4,8 +4,10 @@
./update_submodules.sh ./update_submodules.sh
yarn crawl yarn crawl
yarn update-donations
git add "src/shared/instance_stats.ts" git add "src/shared/instance_stats.ts"
git commit -m "Crawl instance statistics" git add "src/shared/donation_stats.ts"
git commit -m "Crawl and donation instance statistics"
# look for unused translations # look for unused translations
for langfile in joinlemmy-translations/translations/*.json; do for langfile in joinlemmy-translations/translations/*.json; do

View file

@ -8,6 +8,7 @@
"build:prod": "webpack --mode=production", "build:prod": "webpack --mode=production",
"clean": "yarn run rimraf dist", "clean": "yarn run rimraf dist",
"crawl": "node crawl.mjs", "crawl": "node crawl.mjs",
"update-donations": "node update_donations.mjs",
"lint": "node generate_translations.mjs && tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src && prettier --check \"src/**/*.{ts,tsx,js,css,scss}\"", "lint": "node generate_translations.mjs && tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src && prettier --check \"src/**/*.{ts,tsx,js,css,scss}\"",
"prebuild:dev": "yarn clean && node generate_translations.mjs && yarn tailwind", "prebuild:dev": "yarn clean && node generate_translations.mjs && yarn tailwind",
"prebuild:prod": "yarn clean && node generate_translations.mjs && yarn tailwind", "prebuild:prod": "yarn clean && node generate_translations.mjs && yarn tailwind",

View file

@ -1,3 +1,5 @@
import { donation_stats } from "../donation_stats";
export interface Coder { export interface Coder {
name: string; name: string;
link?: string; link?: string;
@ -112,21 +114,20 @@ export const HIGHLIGHTED_SPONSORS = [
// Don't do these until its automated // Don't do these until its automated
export const GENERAL_SPONSORS = []; export const GENERAL_SPONSORS = [];
// Updated 2023-10-11
// Monthly counts in EUR // Monthly counts in EUR
const liberapay: FundingPlatform = { const liberapay: FundingPlatform = {
supporterCount: 294, supporterCount: donation_stats[0].patrons,
monthlyEUR: 358.71 * 4.35, monthlyEUR: donation_stats[0].amount,
};
const patreon: FundingPlatform = {
supporterCount: 473,
monthlyEUR: 1513.57,
}; };
const openCollective: FundingPlatform = { const openCollective: FundingPlatform = {
supporterCount: 275, supporterCount: donation_stats[1].patrons,
monthlyEUR: 10585 / 12, monthlyEUR: donation_stats[1].amount,
};
const patreon: FundingPlatform = {
supporterCount: donation_stats[2].patrons,
monthlyEUR: donation_stats[2].amount,
}; };
const fundingPlatforms = [liberapay, patreon, openCollective]; const fundingPlatforms = [liberapay, patreon, openCollective];
@ -147,7 +148,7 @@ export const MEDIAN_DEV_MONTHLY_EUR = MEDIAN_DEV_SALARY / 12;
export const FUNDED_DEVS = TOTAL_RECURRING_MONTHLY_EUR / MEDIAN_DEV_MONTHLY_EUR; export const FUNDED_DEVS = TOTAL_RECURRING_MONTHLY_EUR / MEDIAN_DEV_MONTHLY_EUR;
// Goal // Goal
export const FUNDED_DEV_GOAL = 4; export const FUNDED_DEV_GOAL = 2;
// End fundraiser date // End fundraiser date
export const END_FUNDRAISER_DATE = new Date("2024-12-01"); export const END_FUNDRAISER_DATE = new Date("2024-12-01");

View file

@ -0,0 +1,17 @@
export const donation_stats = [
{
name_: "liberapay",
patrons: 292,
amount: 1545.9725682543303,
},
{
name_: "opencollective",
patrons: 274,
amount: 867.060770338,
},
{
name_: "patreon",
patrons: 490,
amount: 1424.156049036,
},
];

48
update_donations.mjs Normal file
View file

@ -0,0 +1,48 @@
import fs from "fs";
import fetch from "node-fetch";
const donationStatsFile = "src/shared/donation_stats.ts";
const USDtoEURUrl =
"https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/usd/eur.json";
const liberaPayUrl = "https://liberapay.com/Lemmy/public.json";
const openCollectiveUrl = "https://opencollective.com/lemmy.json";
const patreonUrl = "https://www.patreon.com/api/campaigns/2692831";
const usdToEurRes = await fetch(USDtoEURUrl);
const usdToEur = (await usdToEurRes.json()).eur;
// In weekly USD
const liberaPayRes = await fetch(liberaPayUrl);
const liberaPayData = await liberaPayRes.json();
// In yearly USD, decimal
const openCollectiveRes = await fetch(openCollectiveUrl);
const openCollectiveData = await openCollectiveRes.json();
// In monthly USD, decimal
const patreonRes = await fetch(patreonUrl);
const patreonData = await patreonRes.json();
const donationData = [
{
name_: "liberapay",
patrons: liberaPayData.npatrons,
amount: Number(liberaPayData.receiving.amount) * 4.348214 * usdToEur,
},
{
name_: "opencollective",
patrons: openCollectiveData.backersCount,
amount: (Number(openCollectiveData.yearlyIncome) / 100 / 12) * usdToEur,
},
{
name_: "patreon",
patrons: patreonData.data.attributes.patron_count,
amount: (Number(patreonData.data.attributes.pledge_sum) / 100) * usdToEur,
},
];
let data = `export const donation_stats = \n `;
data += JSON.stringify(donationData, null, 2) + ";";
fs.writeFileSync(donationStatsFile, data);