Quarkus Registry Descriptor
This project provides a model and a parser API to handle the Quarkus extension registry.
Definitions
Repository
A repository is a local directory (which can be cloned from a Git repository) with the following structure:
.
├── extensions
│   └── jsf.json
└── platforms.json 
Extensions
For maintenance purposes, each extension is declared in its own file and has the following structure:
{
  "group-id": "org.apache.myfaces.core.extensions.quarkus",
  "artifact-id": "quarkus-myfaces",
  "releases": [
    {
      "version": "2.3-next",
      "quarkus-core":  "1.3.1.Final"
    },
    {
      "version": "2.4-next",
      "quarkus-core": "1.3.2.Final"
    }
  ]
} 
The Quarkus extension MUST be released to a Maven repository. The descriptor states the GAV and the Quarkus version for each release (which is listed here for performance purposes - if not specified, the parser will attempt to resolve using the Maven Resolver API)
Platforms
Platforms are a set of extensions of a specific version and MUST exist as a BOM. Since the order is important, it is declared as a single JSON (ordered by priority - the preferred BOMs in the top)
[
  {
    "group-id": "io.quarkus",
    "artifact-id": "quarkus-universe-bom",
    "releases": [
      {
        "version": "1.3.1.Final"
      },
      {
        "version": "1.3.2.Final"
      }
    ]
  },
  {
    "group-id": "io.quarkus",
    "artifact-id": "quarkus-bom",
    "artifact-id-json": "quarkus-bom-descriptor-json",
    "releases": [
      {
        "version": "1.3.1.Final"
      },
      {
        "version": "1.3.2.Final"
      },
      {
        "version": "1.4.0.CR1"
      }
    ]
  }
] 
The idea is to provide an utility that would allow to perform all sorts of queries across the registry, such as:
- which Quarkus Core versions are available;
 - which platforms are available;
 - which extensions are available.
 
For a given Quarkus Core version:
- list the available platforms;
 - list all the extensions including those that aren't a part of any platform.
 
For a given platform:
- list the platform versions available (i.e. releases of this platform);
 - list Quarkus Core versions it supports.
 
For a given platform release:
- Quarkus Core version;
 - Extension releases that are included.
 
For a given extension:
- list available versions of the extension (i.e. releases of the extension);
 - (The list could be easily extended)
 
For a given extension release:
- Quarkus Core versions it was found to be compatible with;
 - Platforms it is appearing in.