Skip to content

Commit 8ad326c

Browse files
fix(scripts): fix Esbuild scripts to allow to run on Windows (#5930)
* fix(scripts): fix Esbuild scripts to allow to run on Windows * run wdio tests as part of main test pipeline * more improvements * prettier * minor tweak * progress * more fixes * some optimizations * prettier * lint
1 parent 6ef1334 commit 8ad326c

16 files changed

Lines changed: 113 additions & 116 deletions

.github/workflows/build.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ on:
88
jobs:
99
build_core:
1010
name: Core
11-
runs-on: 'ubuntu-22.04'
11+
strategy:
12+
matrix:
13+
os: ['ubuntu-22.04', 'windows-latest']
14+
runs-on: ${{ matrix.os }}
1215
steps:
1316
- name: Checkout Code
1417
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
@@ -29,6 +32,7 @@ jobs:
2932
shell: bash
3033

3134
- name: Upload Build Artifacts
35+
if: ${{ matrix.os == 'ubuntu-22.04' }}
3236
uses: ./.github/workflows/actions/upload-archive
3337
with:
3438
name: stencil-core

.github/workflows/main.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,8 @@ jobs:
5757
name: Unit Tests
5858
needs: [build_core]
5959
uses: ./.github/workflows/test-unit.yml
60+
61+
wdio_tests:
62+
name: WebdriverIO Tests
63+
needs: [build_core]
64+
uses: ./.github/workflows/test-wdio.yml

.github/workflows/test-wdio.yml

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
11
name: WebdriverIO Tests
22

33
on:
4-
merge_group:
5-
pull_request:
6-
push:
7-
branches:
8-
- 'main'
4+
workflow_call:
5+
# Make this a reusable workflow, no value needed
6+
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
97

108
jobs:
11-
build_core:
12-
name: Build
13-
uses: ./.github/workflows/build.yml
14-
159
run_wdio:
1610
name: Run WebdriverIO Component Tests (${{ matrix.browser }})
1711
runs-on: ubuntu-22.04
18-
needs: [build_core]
1912
strategy:
2013
matrix:
2114
browser: [CHROME, FIREFOX, EDGE]
@@ -24,6 +17,9 @@ jobs:
2417
- name: Checkout Code
2518
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
2619

20+
- name: Get Core Dependencies
21+
uses: ./.github/workflows/actions/get-core-dependencies
22+
2723
- name: Use Node Version from Volta
2824
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
2925
with:

scripts/esbuild/cli.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { join } from 'path';
55
import { getBanner } from '../utils/banner';
66
import { BuildOptions } from '../utils/options';
77
import { writePkgJson } from '../utils/write-pkg-json';
8-
import { getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
8+
import { externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';
99

1010
/**
1111
* Runs esbuild to bundle the `cli` submodule
@@ -30,7 +30,7 @@ export async function buildCli(opts: BuildOptions) {
3030
// this isn't strictly necessary to alias - however, this minimizes cuts down the bundle size by ~70kb.
3131
cliAliases['prompts'] = 'prompts/lib/index.js';
3232

33-
const external = getEsbuildExternalModules(opts, opts.output.cliDir);
33+
const external = [...externalNodeModules, '../testing/*'];
3434

3535
const cliEsbuildOptions = {
3636
...getBaseEsbuildOptions(),

scripts/esbuild/compiler.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { join } from 'path';
66
import { getBanner } from '../utils/banner';
77
import { BuildOptions, createReplaceData } from '../utils/options';
88
import { writePkgJson } from '../utils/write-pkg-json';
9-
import { getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
9+
import { externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';
1010
import { bundleParse5 } from './utils/parse5';
1111
import { bundleTerser } from './utils/terser';
1212
import { bundleTypeScriptSource, tsCacheFilePath } from './utils/typescript-source';
@@ -44,10 +44,15 @@ export async function buildCompiler(opts: BuildOptions) {
4444
transpileDts = transpileDts.replace('@stencil/core/internal', '../internal/index');
4545
await fs.writeFile(join(opts.output.compilerDir, 'transpile.d.ts'), transpileDts);
4646

47-
const alias = getEsbuildAliases();
47+
const alias: Record<string, string> = {
48+
...getEsbuildAliases(),
49+
glob: './sys/node/glob.js',
50+
'@sys-api-node': '../sys/node/index.js',
51+
};
4852

4953
const external = [
50-
...getEsbuildExternalModules(opts, opts.output.compilerDir),
54+
...externalNodeModules,
55+
'../mock-doc/index.cjs',
5156
'../sys/node/autoprefixer.js',
5257
'../sys/node/index.js',
5358
];

scripts/esbuild/dev-server.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ export async function buildDevServer(opts: BuildOptions) {
7878
'./open-in-editor-api',
7979
];
8080

81-
const devServerAliases = getEsbuildAliases();
81+
const devServerAliases = {
82+
...getEsbuildAliases(),
83+
glob: '../../sys/node/glob.js',
84+
'@stencil/core/mock-doc': '../../mock-doc/index.cjs',
85+
};
8286
const devServerIndexEsbuildOptions = {
8387
...getBaseEsbuildOptions(),
8488
alias: devServerAliases,
@@ -98,6 +102,8 @@ export async function buildDevServer(opts: BuildOptions) {
98102
...getBaseEsbuildOptions(),
99103
alias: {
100104
...devServerAliases,
105+
glob: '../../sys/node/glob.js',
106+
'@stencil/core/mock-doc': '../../mock-doc/index.cjs',
101107
'@sys-api-node': '../sys/node/index.js',
102108
},
103109
entryPoints: [join(inputDir, 'server-process.js')],
@@ -118,7 +124,9 @@ export async function buildDevServer(opts: BuildOptions) {
118124
} satisfies ESBuildOptions;
119125

120126
const connectorAlias = {
127+
glob: '../../sys/node/glob.js',
121128
'@stencil/core/dev-server/client': join(inputDir, 'client', 'index.js'),
129+
'@stencil/core/mock-doc': '../../mock-doc/index.cjs',
122130
};
123131
const connectorEsbuildOptions = {
124132
...getBaseEsbuildOptions(),

scripts/esbuild/internal-platform-client.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { join } from 'path';
77
import { getBanner } from '../utils/banner';
88
import { BuildOptions, createReplaceData } from '../utils/options';
99
import { writePkgJson } from '../utils/write-pkg-json';
10-
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules } from './utils';
10+
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases } from './utils';
1111

1212
/**
1313
* Create objects containing ESbuild options for the two bundles which need to
@@ -41,7 +41,7 @@ export async function getInternalClientBundles(opts: BuildOptions): Promise<ESBu
4141
const internalClientAliases = getEsbuildAliases();
4242
internalClientAliases['@platform'] = join(inputClientDir, 'index.ts');
4343

44-
const clientExternal = getEsbuildExternalModules(opts, opts.output.internalDir);
44+
const clientExternal = externalNodeModules;
4545

4646
const internalClientBundle: ESBuildOptions = {
4747
...getBaseEsbuildOptions(),
@@ -69,14 +69,10 @@ export async function getInternalClientBundles(opts: BuildOptions): Promise<ESBu
6969

7070
const polyfills = await fs.readdir(join(opts.srcDir, 'client', 'polyfills'));
7171
for (const polyFillFile of polyfills) {
72-
patchBrowserAliases[join('./polyfills', polyFillFile)] = join(opts.srcDir, 'client', 'polyfills');
72+
patchBrowserAliases[`polyfills/${polyFillFile}`] = join(opts.srcDir, 'client', 'polyfills');
7373
}
7474

75-
const patchBrowserExternal = [
76-
...getEsbuildExternalModules(opts, opts.output.internalDir),
77-
'@stencil/core',
78-
'@stencil/core/mock-doc',
79-
];
75+
const patchBrowserExternal = [...externalNodeModules, '@stencil/core', '@stencil/core/mock-doc'];
8076

8177
const internalClientPatchBrowserBundle: ESBuildOptions = {
8278
...getBaseEsbuildOptions(),

scripts/esbuild/internal-platform-hydrate.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { getBanner } from '../utils/banner';
66
import { bundleDts } from '../utils/bundle-dts';
77
import { BuildOptions } from '../utils/options';
88
import { writePkgJson } from '../utils/write-pkg-json';
9-
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules } from './utils';
9+
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases } from './utils';
1010

1111
/**
1212
* Create objects containing ESbuild options for the two bundles comprising
@@ -35,7 +35,7 @@ export async function getInternalPlatformHydrateBundles(opts: BuildOptions): Pro
3535

3636
const hydratePlatformInput = join(hydrateSrcDir, 'platform', 'index.js');
3737

38-
const external = getEsbuildExternalModules(opts, outputInternalHydrateDir);
38+
const external = externalNodeModules;
3939

4040
const internalHydrateAliases = getEsbuildAliases();
4141
internalHydrateAliases['@platform'] = hydratePlatformInput;

scripts/esbuild/internal-platform-testing.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { join } from 'path';
44

55
import { BuildOptions } from '../utils/options';
66
import { writePkgJson } from '../utils/write-pkg-json';
7-
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules } from './utils';
7+
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases } from './utils';
88

99
/**
1010
* Get an ESBuild configuration object for the internal testing bundle. This
@@ -31,9 +31,10 @@ export async function getInternalTestingBundle(opts: BuildOptions): Promise<ESBu
3131
const internalTestingAliases = {
3232
...getEsbuildAliases(),
3333
'@platform': inputTestingPlatform,
34+
'@stencil/core/mock-doc': '../../mock-doc/index.cjs',
3435
};
3536

36-
const external = getEsbuildExternalModules(opts, opts.output.internalDir);
37+
const external: string[] = [...externalNodeModules, '../../mock-doc/index.cjs'];
3738

3839
const internalTestingBuildOptions: ESBuildOptions = {
3940
...getBaseEsbuildOptions(),

scripts/esbuild/screenshot.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { join } from 'path';
55
import { getBanner } from '../utils/banner';
66
import { BuildOptions } from '../utils/options';
77
import { writePkgJson } from '../utils/write-pkg-json';
8-
import { getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
8+
import { externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';
99

1010
const screenshotBuilds = {
1111
'Stencil Screenshot': 'index',
@@ -39,9 +39,7 @@ export async function buildScreenshot(opts: BuildOptions) {
3939
});
4040

4141
const aliases = getEsbuildAliases();
42-
43-
const external = getEsbuildExternalModules(opts, opts.output.screenshotDir);
44-
42+
const external = externalNodeModules;
4543
const baseScreenshotOptions = {
4644
...getBaseEsbuildOptions(),
4745
alias: aliases,

0 commit comments

Comments
 (0)