Skip to content

Commit 0b25c7f

Browse files
committed
feat(resolve-check-config): add support for check-store e2e-tests
1 parent 6018197 commit 0b25c7f

9 files changed

Lines changed: 57 additions & 7 deletions

File tree

.github/workflows/_internal-check-store.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,19 @@ jobs:
8585
env:
8686
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
8787

88+
- name: Opt in to e2e-test
89+
working-directory: ${{ steps.setup-magento.outputs.path }}
90+
run: |
91+
mkdir -p .github
92+
echo '{ "jobs": { "e2e-test": true } }' > .github/check-store.json
93+
8894
- uses: actions/upload-artifact@v7
8995
with:
9096
name: store-fixture-${{ matrix.version }}
9197
path: |
9298
${{ steps.setup-magento.outputs.path }}
9399
!${{ steps.setup-magento.outputs.path }}/vendor
100+
include-hidden-files: true
94101
retention-days: 3
95102

96103
check-store:

.github/workflows/check-store.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@ jobs:
5757
kind: custom
5858
custom_versions: ${{ steps.get-magento-version.outputs.project }}:${{ fromJSON(steps.get-magento-version.outputs.version) }}
5959

60-
- uses: graycoreio/github-actions-magento2/resolve-check-config@main
60+
## TODO: restore to graycoreio/github-actions-magento2/resolve-check-config@main before merge
61+
- uses: digitalrisedorset/github-actions-magento2/resolve-check-config@feat/check-store-e2e-support
6162
id: resolve
6263
with:
6364
kind: store
6465
matrix: ${{ steps.supported-version.outputs.matrix }}
66+
config_path: ${{ inputs.path }}/.github/check-store.json
6567

6668
unit-test:
6769
runs-on: ${{ matrix.os }}
@@ -245,9 +247,10 @@ jobs:
245247
e2e-test:
246248
runs-on: ${{ matrix.os }}
247249
needs: compute_matrix
250+
if: ${{ fromJSON(needs.compute_matrix.outputs.resolved)['e2e-test'].enabled != false }}
248251
services: ${{ matrix.services }}
249252
strategy:
250-
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
253+
matrix: ${{ fromJSON(needs.compute_matrix.outputs.resolved)['e2e-test'].matrix }}
251254

252255
steps:
253256
- uses: actions/checkout@v6

resolve-check-config/check-store.schema.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
"properties": {
1212
"unit-test": { "$ref": "#/$defs/jobConfig" },
1313
"coding-standard": { "$ref": "#/$defs/jobConfig" },
14-
"smoke-test": { "$ref": "#/$defs/jobConfig" }
14+
"smoke-test": { "$ref": "#/$defs/jobConfig" },
15+
"e2e-test": {
16+
"$ref": "#/$defs/jobConfig",
17+
"description": "Opt-in: e2e-test does not run unless enabled here."
18+
}
1519
},
1620
"additionalProperties": false
1721
}

resolve-check-config/dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resolve-check-config/examples/check-store.example.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"jobs": {
44
"unit-test": true,
55
"coding-standard": true,
6+
"e2e-test": true,
67
"integration-test": {
78
"services": ["search", "queue", "cache"]
89
},

resolve-check-config/src/kinds/store.spec.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const MATRIX: Matrix = {
1717

1818
describe('STORE_JOBS', () => {
1919
it('declares the check-store jobs', () => {
20-
expect(Object.keys(STORE_JOBS).sort()).toEqual(['coding-standard', 'smoke-test', 'unit-test']);
20+
expect(Object.keys(STORE_JOBS).sort()).toEqual(['coding-standard', 'e2e-test', 'smoke-test', 'unit-test']);
2121
});
2222

2323
it('declares smoke-test required tiers (end-user cannot toggle)', () => {
@@ -31,6 +31,16 @@ describe('STORE_JOBS', () => {
3131
]);
3232
});
3333

34+
it('declares e2e-test required tiers (end-user cannot toggle)', () => {
35+
expect(STORE_JOBS['e2e-test'].services).toEqual([]);
36+
expect([...STORE_JOBS['e2e-test'].requiredServices!].sort()).toEqual([
37+
'cache',
38+
'db',
39+
'search',
40+
'web',
41+
]);
42+
});
43+
3444
it('exposes empty service defaults for unit-test and coding-standard', () => {
3545
expect(STORE_JOBS['unit-test'].services).toEqual([]);
3646
expect(STORE_JOBS['coding-standard'].services).toEqual([]);
@@ -44,7 +54,7 @@ describe('STORE_JOBS', () => {
4454
describe('resolveStoreConfig', () => {
4555
it('emits every known job with default tier expansion, always including mysql for smoke-test', () => {
4656
const resolved = resolveStoreConfig({}, MATRIX);
47-
expect(Object.keys(resolved).sort()).toEqual(['coding-standard', 'smoke-test', 'unit-test']);
57+
expect(Object.keys(resolved).sort()).toEqual(['coding-standard', 'e2e-test', 'smoke-test', 'unit-test']);
4858
expect(resolved['unit-test'].matrix.include[0].services).toEqual({});
4959
expect(Object.keys(resolved['smoke-test'].matrix.include[0].services!).sort()).toEqual([
5060
'mysql',
@@ -71,6 +81,21 @@ describe('resolveStoreConfig', () => {
7181
]);
7282
});
7383

84+
it('disables e2e-test by default (opt-in job)', () => {
85+
const resolved = resolveStoreConfig({}, MATRIX);
86+
expect(resolved['e2e-test'].enabled).toBe(false);
87+
expect(resolved['unit-test'].enabled).toBe(true);
88+
expect(resolved['smoke-test'].enabled).toBe(true);
89+
});
90+
91+
it('enables e2e-test when the caller opts in', () => {
92+
const resolved = resolveStoreConfig(
93+
{ jobs: { 'e2e-test': true } },
94+
MATRIX,
95+
);
96+
expect(resolved['e2e-test'].enabled).toBe(true);
97+
});
98+
7499
it('honors enabled=false for a job', () => {
75100
const resolved = resolveStoreConfig(
76101
{ jobs: { 'smoke-test': false } },

resolve-check-config/src/kinds/store.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ export const STORE_JOBS: Record<string, JobDefaults> = {
1515
services: [],
1616
requiredServices: ['db', 'search', 'queue', 'cache', 'web'],
1717
},
18+
'e2e-test': {
19+
services: [],
20+
requiredServices: ['db', 'search', 'cache', 'web'],
21+
enabledByDefault: false,
22+
},
1823
};
1924

2025
export const KNOWN_JOBS_STORE: readonly string[] = Object.keys(STORE_JOBS);

resolve-check-config/src/parse.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const normalizeJobEntry = (
1414
defaults: JobDefaults,
1515
): { enabled: boolean; tiers: readonly Tier[] } => {
1616
if (raw === undefined) {
17-
return { enabled: true, tiers: defaults.services };
17+
return { enabled: defaults.enabledByDefault ?? true, tiers: defaults.services };
1818
}
1919
if (typeof raw === 'boolean') {
2020
return { enabled: raw, tiers: defaults.services };

resolve-check-config/src/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,15 @@ export interface Matrix {
5353
* regardless of caller overrides. Use it for tiers a job structurally
5454
* cannot run without (e.g. mysql for a running store smoke-test) and
5555
* which therefore should not appear in the user-facing schema enum.
56+
*
57+
* `enabledByDefault` controls the `enabled` value emitted when the
58+
* caller's config omits the job entirely. Defaults to `true`; set
59+
* `false` for opt-in jobs.
5660
*/
5761
export interface JobDefaults {
5862
services: readonly Tier[];
5963
requiredServices?: readonly Tier[];
64+
enabledByDefault?: boolean;
6065
}
6166

6267
/**

0 commit comments

Comments
 (0)