Add github action to build extension list (#127)

This commit is contained in:
Alexis Degrugillier 2022-01-12 06:01:39 -05:00 committed by GitHub
parent cc4fb91209
commit e7d1134343
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 109 additions and 55 deletions

37
.github/workflows/generate.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: Generate extension list
on:
schedule:
- cron: '11 11 * * *'
workflow_dispatch: ~
jobs:
build:
runs-on: ubuntu-latest
env:
FILE: extensions.json
steps:
- name: Checkout source code
uses: actions/checkout@v2
- name: Build JSON file
run: php ./generate.php
- name: Setup git
run: |
git config user.name "GitHub Actions Bot"
git config user.email "<>"
- name: Get changes
id: diff
run: |
DIFF=$(git diff --numstat -- $FILE | wc -l)
echo "::set-output name=DIFF::$DIFF"
- name: Commit changes
run: |
git add $FILE
git commit -m 'Update extension list'
git push origin $GITHUB_REF
if: steps.diff.outputs.DIFF != 0

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
tmp

View file

@ -8,7 +8,7 @@
"version": 1.3, "version": 1.3,
"entrypoint": "AutoRefresh", "entrypoint": "AutoRefresh",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/Eisa01\/FreshRSS---Auto-Refresh-Extension", "url": "https://github.com/Eisa01/FreshRSS---Auto-Refresh-Extension",
"method": "git", "method": "git",
"directory": "xExtension-AutoRefresh" "directory": "xExtension-AutoRefresh"
}, },
@ -19,7 +19,7 @@
"version": 0.3, "version": 0.3,
"entrypoint": "Copy2Clipboard", "entrypoint": "Copy2Clipboard",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/cn-tools\/cntools_FreshRssExtensions", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions",
"method": "git", "method": "git",
"directory": "xExtension-Copy2Clipboard" "directory": "xExtension-Copy2Clipboard"
}, },
@ -30,7 +30,7 @@
"version": 0.2, "version": 0.2,
"entrypoint": "CustomCSS", "entrypoint": "CustomCSS",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-CustomCSS" "directory": "xExtension-CustomCSS"
}, },
@ -41,7 +41,7 @@
"version": 0.2, "version": 0.2,
"entrypoint": "CustomJS", "entrypoint": "CustomJS",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-CustomJS" "directory": "xExtension-CustomJS"
}, },
@ -52,9 +52,9 @@
"version": "0.2.1", "version": "0.2.1",
"entrypoint": "DateFormat", "entrypoint": "DateFormat",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/aledeg\/xExtension-DateFormat", "url": "https://github.com/aledeg/xExtension-DateFormat",
"method": "git", "method": "git",
"directory": "6" "directory": "."
}, },
{ {
"name": "Dilberts Daily Comic", "name": "Dilberts Daily Comic",
@ -63,7 +63,7 @@
"version": "0.3.1", "version": "0.3.1",
"entrypoint": "Dilbert", "entrypoint": "Dilbert",
"type": "system", "type": "system",
"url": "https:\/\/github.com\/kevinpapst\/freshrss-dilbert", "url": "https://github.com/kevinpapst/freshrss-dilbert",
"method": "git", "method": "git",
"directory": "xExtension-Dilbert" "directory": "xExtension-Dilbert"
}, },
@ -74,7 +74,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "FeedTitleBuilder", "entrypoint": "FeedTitleBuilder",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/cn-tools\/cntools_FreshRssExtensions", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions",
"method": "git", "method": "git",
"directory": "xExtension-FeedTitleBuilder" "directory": "xExtension-FeedTitleBuilder"
}, },
@ -85,18 +85,18 @@
"version": 0.1, "version": 0.1,
"entrypoint": "FixedNavMenu", "entrypoint": "FixedNavMenu",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/oyox\/FreshRSS-extensions", "url": "https://github.com/oyox/FreshRSS-extensions",
"method": "git", "method": "git",
"directory": "xExtension-FixedNavMenu" "directory": "xExtension-FixedNavMenu"
}, },
{ {
"name": "GReader Redate", "name": "GReader Redate",
"author": "Julien Av\u00e9rous", "author": "Julien Avérous",
"description": "Use published date instead of fetching date.", "description": "Use published date instead of fetching date.",
"version": 1.1, "version": 1.1,
"entrypoint": "GReaderRedate", "entrypoint": "GReaderRedate",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/javerous\/freshrss-greader-redate", "url": "https://github.com/javerous/freshrss-greader-redate",
"method": "git", "method": "git",
"directory": "xExtension-GReaderRedate" "directory": "xExtension-GReaderRedate"
}, },
@ -107,7 +107,7 @@
"version": 0.5, "version": 0.5,
"entrypoint": "ImageProxy", "entrypoint": "ImageProxy",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-ImageProxy" "directory": "xExtension-ImageProxy"
}, },
@ -118,7 +118,7 @@
"version": 1.1, "version": 1.1,
"entrypoint": "Invidious", "entrypoint": "Invidious",
"type": "system", "type": "system",
"url": "https:\/\/github.com\/Korbak\/freshrss-invidious", "url": "https://github.com/Korbak/freshrss-invidious",
"method": "git", "method": "git",
"directory": "xExtension-Invidious" "directory": "xExtension-Invidious"
}, },
@ -129,7 +129,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "KeepFolderState", "entrypoint": "KeepFolderState",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/oyox\/FreshRSS-extensions", "url": "https://github.com/oyox/FreshRSS-extensions",
"method": "git", "method": "git",
"directory": "xExtension-KeepFolderState" "directory": "xExtension-KeepFolderState"
}, },
@ -140,9 +140,9 @@
"version": "0.1.4", "version": "0.1.4",
"entrypoint": "LatexSupport", "entrypoint": "LatexSupport",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/aledeg\/xExtension-LatexSupport", "url": "https://github.com/aledeg/xExtension-LatexSupport",
"method": "git", "method": "git",
"directory": "7" "directory": "."
}, },
{ {
"name": "Mobile Scroll Menu", "name": "Mobile Scroll Menu",
@ -151,7 +151,7 @@
"version": 0.2, "version": 0.2,
"entrypoint": "MobileScrollMenu", "entrypoint": "MobileScrollMenu",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/oyox\/FreshRSS-extensions", "url": "https://github.com/oyox/FreshRSS-extensions",
"method": "git", "method": "git",
"directory": "xExtension-MobileScrollMenu" "directory": "xExtension-MobileScrollMenu"
}, },
@ -162,7 +162,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "QuickCollapse", "entrypoint": "QuickCollapse",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-QuickCollapse" "directory": "xExtension-QuickCollapse"
}, },
@ -173,9 +173,9 @@
"version": 1.2, "version": 1.2,
"entrypoint": "ReadingTime", "entrypoint": "ReadingTime",
"type": "user", "type": "user",
"url": "https:\/\/framagit.org\/Lapineige\/FreshRSS_Extension-ReadingTime\/", "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/",
"method": "git", "method": "git",
"directory": "10" "directory": "."
}, },
{ {
"name": "ReadingTime", "name": "ReadingTime",
@ -184,7 +184,7 @@
"version": 1.2, "version": 1.2,
"entrypoint": "ReadingTime", "entrypoint": "ReadingTime",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-ReadingTime" "directory": "xExtension-ReadingTime"
}, },
@ -195,9 +195,9 @@
"version": "0.11.1", "version": "0.11.1",
"entrypoint": "RedditImage", "entrypoint": "RedditImage",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/aledeg\/xExtension-RedditImage", "url": "https://github.com/aledeg/xExtension-RedditImage",
"method": "git", "method": "git",
"directory": "8" "directory": "."
}, },
{ {
"name": "Share By Email", "name": "Share By Email",
@ -206,7 +206,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "ShareByEmail", "entrypoint": "ShareByEmail",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-ShareByEmail" "directory": "xExtension-ShareByEmail"
}, },
@ -217,7 +217,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "SmartMobileMenu", "entrypoint": "SmartMobileMenu",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/oyox\/FreshRSS-extensions", "url": "https://github.com/oyox/FreshRSS-extensions",
"method": "git", "method": "git",
"directory": "xExtension-SmartMobileMenu" "directory": "xExtension-SmartMobileMenu"
}, },
@ -228,7 +228,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "StickyFeeds", "entrypoint": "StickyFeeds",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-StickyFeeds" "directory": "xExtension-StickyFeeds"
}, },
@ -239,7 +239,7 @@
"version": 0.1, "version": 0.1,
"entrypoint": "Teem", "entrypoint": "Teem",
"type": "system", "type": "system",
"url": "https:\/\/github.com\/kevinpapst\/freshrss-teem", "url": "https://github.com/kevinpapst/freshrss-teem",
"method": "git", "method": "git",
"directory": "xExtension-Teem" "directory": "xExtension-Teem"
}, },
@ -250,9 +250,9 @@
"version": 1.11, "version": 1.11,
"entrypoint": "ThreePanesView", "entrypoint": "ThreePanesView",
"type": "user", "type": "user",
"url": "https:\/\/framagit.org\/nicofrand\/xextension-threepanesview", "url": "https://framagit.org/nicofrand/xextension-threepanesview",
"method": "git", "method": "git",
"directory": "11" "directory": "."
}, },
{ {
"name": "TinyTinyRSS API", "name": "TinyTinyRSS API",
@ -261,18 +261,18 @@
"version": 0.1, "version": 0.1,
"entrypoint": "TTRSS_API", "entrypoint": "TTRSS_API",
"type": "system", "type": "system",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-TTRSS_API" "directory": "xExtension-TTRSS_API"
}, },
{ {
"name": "Title-Wrap", "name": "Title-Wrap",
"author": "\u20a3rans de Jonge, Joris Kinable", "author": "rans de Jonge, Joris Kinable",
"description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.",
"version": 0.1, "version": 0.1,
"entrypoint": "TitleWrap", "entrypoint": "TitleWrap",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/FreshRSS\/Extensions", "url": "https://github.com/FreshRSS/Extensions",
"method": "git", "method": "git",
"directory": "xExtension-TitleWrap" "directory": "xExtension-TitleWrap"
}, },
@ -283,7 +283,7 @@
"version": 0.2, "version": 0.2,
"entrypoint": "TouchControl", "entrypoint": "TouchControl",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/oyox\/FreshRSS-extensions", "url": "https://github.com/oyox/FreshRSS-extensions",
"method": "git", "method": "git",
"directory": "xExtension-TouchControl" "directory": "xExtension-TouchControl"
}, },
@ -294,18 +294,18 @@
"version": "0.0.1", "version": "0.0.1",
"entrypoint": "WhiteList", "entrypoint": "WhiteList",
"type": "system", "type": "system",
"url": "https:\/\/github.com\/aledeg\/xExtension-WhiteList", "url": "https://github.com/aledeg/xExtension-WhiteList",
"method": "git", "method": "git",
"directory": "9" "directory": "."
}, },
{ {
"name": "YouTube\/PeerTube Video Feed", "name": "YouTube/PeerTube Video Feed",
"author": "Kevin Papst", "author": "Kevin Papst",
"description": "Embed YouTube\/PeerTube feeds inside article content.", "description": "Embed YouTube/PeerTube feeds inside article content.",
"version": 0.1, "version": 0.1,
"entrypoint": "YouTube", "entrypoint": "YouTube",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/kevinpapst\/freshrss-youtube", "url": "https://github.com/kevinpapst/freshrss-youtube",
"method": "git", "method": "git",
"directory": "xExtension-YouTube" "directory": "xExtension-YouTube"
}, },
@ -316,7 +316,7 @@
"version": 0.2, "version": 0.2,
"entrypoint": "YouTubeChannel2RssFeed", "entrypoint": "YouTubeChannel2RssFeed",
"type": "user", "type": "user",
"url": "https:\/\/github.com\/cn-tools\/cntools_FreshRssExtensions", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions",
"method": "git", "method": "git",
"directory": "xExtension-YouTubeChannel2RssFeed" "directory": "xExtension-YouTubeChannel2RssFeed"
} }

48
generate.php Normal file → Executable file
View file

@ -1,26 +1,35 @@
#!/usr/bin/env php
<?php <?php
// ------------------- //
// Prepare environment //
// ------------------- //
const VERSION = 0.1; const VERSION = 0.1;
const TYPE_GIT = 'git'; const TYPE_GIT = 'git';
$tempFolder = './tmp';
$extensions = []; $extensions = [];
$gitRepositories = [];
if (file_exists($tempFolder)) {
exec("rm -rf -- {$tempFolder}");
}
// --------------------------------------------------------------- // // --------------------------------------------------------------- //
// Parse the repositories.json file to extract extension locations // // Parse the repositories.json file to extract extension locations //
// --------------------------------------------------------------- // // --------------------------------------------------------------- //
$repositories = json_decode(file_get_contents('repositories.json'), true); try {
if (JSON_ERROR_NONE !== json_last_error()) { $repositories = json_decode(file_get_contents('repositories.json'), true, 512, JSON_THROW_ON_ERROR);
} catch (Exception $exception) {
echo 'The repositories.json file is not a valid JSON file.', PHP_EOL; echo 'The repositories.json file is not a valid JSON file.', PHP_EOL;
die; exit(1);
} }
$gitRepositories = [];
foreach ($repositories as $repository) { foreach ($repositories as $repository) {
if (null === $url = $repository['url'] ?? null) { if (null === $url = $repository['url'] ?? null) {
continue; continue;
} }
if (TYPE_GIT === $repository['type'] ?? null) { if (TYPE_GIT === $repository['type'] ?? null) {
$gitRepositories[] = $url; $gitRepositories[sha1($url)] = $url;
} }
} }
@ -29,19 +38,21 @@ foreach ($repositories as $repository) {
// ---------------------------------------- // // ---------------------------------------- //
foreach ($gitRepositories as $key => $gitRepository) { foreach ($gitRepositories as $key => $gitRepository) {
echo 'Processing ', $gitRepository, ' repository', PHP_EOL; echo 'Processing ', $gitRepository, ' repository', PHP_EOL;
exec("git clone --quiet --single-branch --depth 1 --no-tags {$gitRepository} /tmp/extensions/{$key}"); exec("GIT_TERMINAL_PROMPT=0 git clone --quiet --single-branch --depth 1 --no-tags {$gitRepository} {$tempFolder}/{$key}");
unset($metadataFiles); unset($metadataFiles);
exec("find /tmp/extensions/{$key} -iname metadata.json", $metadataFiles); exec("find {$tempFolder}/{$key} -iname metadata.json", $metadataFiles);
foreach ($metadataFiles as $metadataFile) { foreach ($metadataFiles as $metadataFile) {
$metadata = json_decode(file_get_contents($metadataFile), true); try {
if (JSON_ERROR_NONE !== json_last_error()) { $metadata = json_decode(file_get_contents($metadataFile), true, 512, JSON_THROW_ON_ERROR);
$directory = basename(dirname($metadataFile));
$metadata['url'] = $gitRepository;
$metadata['method'] = TYPE_GIT;
$metadata['directory'] = ($directory === sha1($gitRepository)) ? '.' : $directory;
$extensions[] = $metadata;
} catch (Exception $exception) {
continue; continue;
} }
$metadata['url'] = $gitRepository;
$metadata['method'] = TYPE_GIT;
$metadata['directory'] = basename(dirname($metadataFile));
$extensions[] = $metadata;
} }
} }
@ -55,7 +66,12 @@ $output = [
'version' => VERSION, 'version' => VERSION,
'extensions' => $extensions, 'extensions' => $extensions,
]; ];
file_put_contents('extensions.json', json_encode($output, JSON_PRETTY_PRINT) . PHP_EOL); try {
file_put_contents('extensions.json', json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR) . PHP_EOL);
echo PHP_EOL; echo PHP_EOL;
echo \count($extensions), ' extensions found', PHP_EOL; echo \count($extensions), ' extensions found.', PHP_EOL;
} catch (Exception $exception) {
echo 'The extensions.json file can not be generated.', PHP_EOL;
exit(1);
}