Skip to content

Commit

Permalink
ENH New method to get metadata without a network request
Browse files Browse the repository at this point in the history
  • Loading branch information
emteknetnz committed Oct 17, 2024
1 parent 32a718e commit bb9ca4d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
Metadata and some supporting PHP logic for determining which branches of various GitHub repositories relate to which versions of Silverstripe CMS.

> [!IMPORTANT]
> Only the `main` branch of this repository is maintained.
> Only the `main` branch of this repository is maintained. Stable tags must be manually created from the `main` branch. There is no auto tagging via a GitHub action. All branches other than `main` are legacy and should not be referenced going forward.
You can fetch the JSON by simply fetching the raw copy of `repositories.json` file, e.g. <https://raw.githubusercontent.com/silverstripe/supported-modules/main/repositories.json>.

If you've included this module as a compser dependency then you can use `SilverStripe\SupportedModules\MetaData::getAllRepositoryMetaData()` which will fetch the latest version of the JSON file from raw.githubusercontent.com.
If you've included this module as a compser dependency then you can use `SilverStripe\SupportedModules\MetaData::getAllRepositoryMetaData()` which will fetch the latest version of the JSON file from raw.githubusercontent.com. There is a local copy of `repositories.json` in the module, though it is not guaranteed to be up to date, so only use this if fetching a fresh copy of this file is not viable.

## Format

Expand Down
21 changes: 19 additions & 2 deletions src/MetaData.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,30 @@ public static function removeReposNotInCmsMajor(array $metadata, string|int $cms
}

/**
* Get all metadata about all repositories we have information about.
* Get all metadata about all repositories we have information about. This will make a newtwork
* request to fetch the latest data from the supported-modules repository.
* @param bool $categorised If true, output is grouped by category.
*/
public static function getAllRepositoryMetaData(bool $categorised = true): array
{
return MetaData::getRepositoryMetaDataInner($categorised, false);
}

/**
* Get all metadata about all repositories we have information about from the local file.
* Use this if making a network request is not possible or desired, and the downside from the data
* being potentially out-of-date is acceptable.
* @param bool $categorised If true, output is grouped by category.
*/
public static function getAllRepositoryMetaDataFromLocal(bool $categorised = true): array
{
return MetaData::getRepositoryMetaDataInner($categorised, true);
}

private static function getRepositoryMetaDataInner(bool $categorised = true, bool $doFetch = true): array
{
if (empty(self::$repositoryMetaData)) {
if (self::$isRunningUnitTests) {
if (self::$isRunningUnitTests || !$doFetch) {
$rawJson = file_get_contents(__DIR__ . '/../repositories.json');
} else {
// Dynamicallly fetch the latest data from the supported-modules repository
Expand Down

0 comments on commit bb9ca4d

Please sign in to comment.