mirror of
https://github.com/graycoreio/github-actions-magento2.git
synced 2026-06-15 05:51:20 +00:00
feat(supported-version): add user-defined kind (#28)
`kind` is a new input property for the `supported-version` action which allows one to define what specific versions of Magento they support. Currently, `kind` supports `latest`, `currently-supported`, and `custom`. See the README for `supported-version` if you want more specifics
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import * as core from '@actions/core';
|
||||
import { validateOrError } from './kind/compute-kind';
|
||||
import { getMatrixForKind } from './matrix/get-matrix-for-kind';
|
||||
|
||||
|
||||
export async function run(): Promise<void> {
|
||||
try {
|
||||
const kind = core.getInput("kind");
|
||||
validateOrError(kind);
|
||||
|
||||
const customVersions = core.getInput("custom_versions");
|
||||
|
||||
core.setOutput('matrix', getMatrixForKind(kind, customVersions));
|
||||
}
|
||||
catch (error) {
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
run()
|
||||
@@ -0,0 +1,11 @@
|
||||
import { isValidKind } from "./compute-kind";
|
||||
|
||||
describe('isValidKind', () => {
|
||||
it('returns `true` if its a valid kind', () => {
|
||||
expect(isValidKind("latest")).toBe(true);
|
||||
});
|
||||
|
||||
it('returns `false` if it is not a valid kind', () => {
|
||||
expect(isValidKind("taco")).toBe(false);
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Acceptable arguments for version `kind`
|
||||
*/
|
||||
export const KNOWN_KINDS = {
|
||||
'currently-supported': true,
|
||||
'latest': true,
|
||||
'custom': true,
|
||||
}
|
||||
|
||||
export const isValidKind = (kind: string): boolean => {
|
||||
return kind in KNOWN_KINDS;
|
||||
};
|
||||
|
||||
export const validateOrError = (kind: string): true => {
|
||||
if(isValidKind(kind)){
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
throw new Error(`Invalid kind provided, supported kinds are: ${Object.keys(KNOWN_KINDS).join(', ')}`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[
|
||||
"magento/project-community-edition:>=2.3 <2.4",
|
||||
"magento/project-community-edition:>=2.4.0 <2.4.1",
|
||||
"magento/project-community-edition:>=2.4.1 <2.4.2",
|
||||
"magento/project-community-edition:>=2.4.2 <2.4.3",
|
||||
"magento/project-community-edition:>=2.4.3 <2.4.4",
|
||||
"magento/project-community-edition:>=2.4.4 <2.4.5",
|
||||
"magento/project-community-edition"
|
||||
]
|
||||
@@ -0,0 +1,3 @@
|
||||
[
|
||||
"magento/project-community-edition"
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
import { getMatrixForKind } from "./get-matrix-for-kind";
|
||||
|
||||
describe('getMatrixForKind', () => {
|
||||
it('returns a matrix for `latest`', () => {
|
||||
const result = getMatrixForKind("latest");
|
||||
|
||||
expect(result.magento).toBeDefined();
|
||||
expect(result.include).toBeDefined();
|
||||
});
|
||||
|
||||
it('returns a matrix for `currently-supported`', () => {
|
||||
const result = getMatrixForKind("currently-supported");
|
||||
|
||||
expect(result.magento).toBeDefined();
|
||||
expect(result.include).toBeDefined();
|
||||
});
|
||||
|
||||
it('returns a matrix for valid `custom`', () => {
|
||||
const result = getMatrixForKind("custom", "magento/project-community-edition:2.3.7-p3");
|
||||
|
||||
expect(result.magento).toBeDefined();
|
||||
expect(result.include).toBeDefined();
|
||||
});
|
||||
|
||||
it('returns a matrix for valid multiple `custom`', () => {
|
||||
const result = getMatrixForKind("custom", "magento/project-community-edition:2.3.7-p3,magento/project-community-edition:2.4.0");
|
||||
|
||||
expect(result.magento).toBeDefined();
|
||||
expect(result.include).toBeDefined();
|
||||
});
|
||||
|
||||
it('errors for invalid `custom``', () => {
|
||||
expect(() => getMatrixForKind("custom")).toThrowError();
|
||||
});
|
||||
})
|
||||
@@ -0,0 +1,17 @@
|
||||
import { getMatrixForVersions } from "./get-matrix-for-versions";
|
||||
|
||||
import latestJson from '../kind/latest.json';
|
||||
import currentlySupportedJson from '../kind/currently-supported.json';
|
||||
|
||||
export const getMatrixForKind = (kind: string, versions: string = "") => {
|
||||
switch(kind){
|
||||
case 'latest':
|
||||
return getMatrixForVersions(latestJson);
|
||||
case 'currently-supported':
|
||||
return getMatrixForVersions(currentlySupportedJson);
|
||||
case 'custom':
|
||||
return getMatrixForVersions(versions.split(","))
|
||||
default:
|
||||
throw new Error(`Unreachable kind: ${kind} discovered, please report to the maintainers.`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import { GithubActionsMatrix, MagentoMatrixVersion } from "./matrix-type";
|
||||
import compositeVersionJson from '../versions/composite.json';
|
||||
import individualVersionJson from '../versions/individual.json';
|
||||
|
||||
const knownVersions : Record<string, MagentoMatrixVersion> = {...individualVersionJson, ...compositeVersionJson };
|
||||
|
||||
/**
|
||||
* Computes the Github Actions Matrix for given versions of Magento
|
||||
*/
|
||||
export const getMatrixForVersions = (versions: string[]): GithubActionsMatrix => {
|
||||
return versions.reduce((acc, current): GithubActionsMatrix => {
|
||||
if(knownVersions[current] === undefined){
|
||||
throw new Error("Unknown version while computing matrix");
|
||||
}
|
||||
|
||||
return {
|
||||
magento: [...acc.magento, current],
|
||||
include: [...acc.include, knownVersions[current]]
|
||||
}
|
||||
}, {magento: [], include: []});
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
export interface MagentoMatrixVersion {
|
||||
magento: string,
|
||||
php: string | number,
|
||||
composer: string | number,
|
||||
mysql: string,
|
||||
elasticsearch: string,
|
||||
rabbitmq: string,
|
||||
redis: string,
|
||||
varnish: string,
|
||||
nginx: string,
|
||||
os: string
|
||||
}
|
||||
|
||||
export interface GithubActionsMatrix {
|
||||
magento: string[],
|
||||
include: MagentoMatrixVersion[]
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"magento/project-community-edition:>=2.3 <2.4": {
|
||||
"magento": "magento/project-community-edition:>=2.3 <2.4",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:5.7",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-18.04"
|
||||
},
|
||||
"magento/project-community-edition:>=2.4.0 <2.4.1": {
|
||||
"magento": "magento/project-community-edition:>=2.4.0 <2.4.1",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:5.7",
|
||||
"elasticsearch": "elasticsearch:7.6.2",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:5.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:>=2.4.1 <2.4.2": {
|
||||
"magento": "magento/project-community-edition:>=2.4.1 <2.4.2",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.7.1",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:5.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:>=2.4.2 <2.4.3": {
|
||||
"magento": "magento/project-community-edition:>=2.4.2 <2.4.3",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.9.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:>=2.4.3 <2.4.4": {
|
||||
"magento": "magento/project-community-edition:>=2.4.3 <2.4.4",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:>=2.4.4 <2.4.5": {
|
||||
"magento": "magento/project-community-edition:>=2.4.4 <2.4.5",
|
||||
"php": 8.1,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.9",
|
||||
"redis": "redis:6.2",
|
||||
"varnish": "varnish:7.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition": {
|
||||
"magento": "magento/project-community-edition",
|
||||
"php": 8.1,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.9",
|
||||
"redis": "redis:6.2",
|
||||
"varnish": "varnish:7.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
{
|
||||
"magento/project-community-edition:2.3.7-p3": {
|
||||
"magento": "magento/project-community-edition:2.3.7-p3",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:5.7",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-18.04"
|
||||
},
|
||||
"magento/project-community-edition:2.4.0": {
|
||||
"magento": "magento/project-community-edition:2.4.0",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:5.7",
|
||||
"elasticsearch": "elasticsearch:7.6.2",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:5.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.0-p1": {
|
||||
"magento": "magento/project-community-edition:2.4.0-p1",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:5.7",
|
||||
"elasticsearch": "elasticsearch:7.6.2",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:5.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.1": {
|
||||
"magento": "magento/project-community-edition:2.4.1",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.7.1",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:5.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.1-p1": {
|
||||
"magento": "magento/project-community-edition:2.4.1-p1",
|
||||
"php": 7.4,
|
||||
"composer": 1,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.7.1",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:5.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.2": {
|
||||
"magento": "magento/project-community-edition:2.4.2",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.9.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.2-p1": {
|
||||
"magento": "magento/project-community-edition:2.4.2-p1",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.9.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.2-p2": {
|
||||
"magento": "magento/project-community-edition:2.4.2-p2",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.9.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.3": {
|
||||
"magento": "magento/project-community-edition:2.4.3",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.3-p1": {
|
||||
"magento": "magento/project-community-edition:2.4.3-p1",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.3-p2": {
|
||||
"magento": "magento/project-community-edition:2.4.3-p2",
|
||||
"php": 7.4,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.8",
|
||||
"redis": "redis:6.0",
|
||||
"varnish": "varnish:6.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
},
|
||||
"magento/project-community-edition:2.4.4": {
|
||||
"magento": "magento/project-community-edition:2.4.4",
|
||||
"php": 8.1,
|
||||
"composer": 2,
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.16.3",
|
||||
"rabbitmq": "rabbitmq:3.9",
|
||||
"redis": "redis:6.2",
|
||||
"varnish": "varnish:7.0",
|
||||
"nginx": "nginx:1.18",
|
||||
"os": "ubuntu-latest"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user