Skip to content

Commit 7950845

Browse files
committed
Merge branch 'main' into copilot/consolidate-playgrounds-examples
2 parents de71494 + cdf6f5c commit 7950845

105 files changed

Lines changed: 2807 additions & 1535 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/size-limit/bun.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/actions/size-limit/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
},
1212
"packageManager": "bun@1.2.22",
1313
"dependencies": {
14-
"arkregex": "0.0.3",
14+
"arkregex": "0.0.4",
1515
"typescript": "5.9.3"
1616
}
1717
}

.github/actions/size-limit/src/index.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,17 @@ await installAndBuild(config, config.isReleasePR);
6060
// Run size-limit on current branch
6161
const { results, hasErrors } = await runSizeLimit(config.filter);
6262

63+
// Debug: Log results before filtering
64+
console.log(`🔍 Found ${results.length} total results before filtering`);
65+
console.log(
66+
`🔍 Changed packages: ${changedPackages ? Array.from(changedPackages).join(", ") || "(none)" : "(all)"}`,
67+
);
68+
6369
// Filter results to only include changed packages (if in PR context)
6470
const filteredResults = filterChangedPackages(results, changedPackages);
6571

72+
console.log(`🔍 ${filteredResults.length} results after filtering`);
73+
6674
// Log baseline and current sizes for debugging (especially for release PRs)
6775
logDebugInfo(filteredResults, baselineSizes, config.isReleasePR);
6876

@@ -71,6 +79,7 @@ calculateDiffs(filteredResults, baselineSizes, config.isReleasePR);
7179

7280
// Create the table
7381
const result = createTable(filteredResults);
82+
console.log(result);
7483
if (filteredResults.length === 0 && results.length > 0) {
7584
console.log("⚠️ Could not parse size-limit output");
7685
}

.github/actions/size-limit/src/package/changes.ts

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,34 +62,51 @@ export const getChangedPackages = async (
6262
// Map changed files to packages
6363
for (const file of changedFiles) {
6464
// Check if file is in packages directory
65-
const packagesMatch = file.match(
66-
/^packages\/([@a-z0-9][@a-z0-9/_-]*)\//i,
67-
);
68-
if (packagesMatch?.[1]) {
69-
const packageDir = packagesMatch[1];
65+
if (file.startsWith("packages/")) {
66+
// Find the nearest package.json
67+
const parts = file.split("/");
68+
// Start from the directory containing the file, go up until we hit "packages"
69+
// parts[0] is "packages"
70+
let packageFound = false;
71+
72+
// Iterate from deep to shallow, but stop before "packages" (index 0)
73+
for (let i = parts.length - 1; i > 0; i--) {
74+
const potentialPackageDir = parts.slice(1, i).join("/");
75+
if (!potentialPackageDir) continue;
76+
77+
const packageJsonPath = join(
78+
process.cwd(),
79+
"packages",
80+
potentialPackageDir,
81+
"package.json",
82+
);
7083

71-
// Get actual package name from package.json
72-
const packageJsonPath = join(
73-
process.cwd(),
74-
"packages",
75-
packageDir,
76-
"package.json",
77-
);
78-
if (existsSync(packageJsonPath)) {
79-
try {
80-
const packageJson = JSON.parse(
81-
readFileSync(packageJsonPath, "utf-8"),
82-
);
83-
if (packageJson.name) {
84-
changedPackages.add(packageJson.name);
85-
} else {
86-
changedPackages.add(packageDir);
84+
if (existsSync(packageJsonPath)) {
85+
try {
86+
const packageJson = JSON.parse(
87+
readFileSync(packageJsonPath, "utf-8"),
88+
);
89+
if (packageJson.name) {
90+
changedPackages.add(packageJson.name);
91+
packageFound = true;
92+
break;
93+
}
94+
} catch {
95+
// Ignore invalid package.json
8796
}
88-
} catch {
89-
changedPackages.add(packageDir);
9097
}
91-
} else {
92-
changedPackages.add(packageDir);
98+
}
99+
100+
// Fallback: if we couldn't find a package.json, try to guess the package directory
101+
// This handles cases where package.json might be deleted or we can't read it
102+
if (!packageFound) {
103+
// Regex that handles scoped and unscoped packages
104+
const packagesMatch = file.match(
105+
/^packages\/((?:@[^/]+\/)?[^/]+)\//i,
106+
);
107+
if (packagesMatch?.[1]) {
108+
changedPackages.add(packagesMatch[1]);
109+
}
93110
}
94111
}
95112
}

.github/actions/size-limit/src/size-limit/package.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ export const runSizeLimitOnPackage = async (
9494

9595
return {
9696
...config,
97-
webpack: false, // Use esbuild instead of webpack
98-
// Configure esbuild to mark Node.js built-in modules as external
97+
// Use esbuild (default in preset-small-lib) and configure it to mark Node.js built-in modules as external
9998
// This tells esbuild not to try to bundle these modules
10099
// size-limit passes this to esbuild's external option
101100
ignore: [
@@ -106,6 +105,12 @@ export const runSizeLimitOnPackage = async (
106105
: []),
107106
...nodeBuiltinModules.map((m) => `node:${m}`),
108107
...nodeBuiltinModules,
108+
// Automatically ignore peerDependencies
109+
// This prevents bundling large peer dependencies like arktype or vite
110+
// which should be external in the final bundle anyway
111+
...(packageJson.peerDependencies
112+
? Object.keys(packageJson.peerDependencies)
113+
: []),
109114
],
110115
};
111116
});

.github/workflows/release.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ on:
55
branches:
66
- main
77

8-
concurrency: ${{ github.workflow }}-${{ github.ref }}
9-
108
jobs:
119
release:
1210
name: Release

.github/workflows/size-limit.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ on:
55
- main
66
paths:
77
- "packages/**"
8+
workflow_dispatch:
9+
810
jobs:
911
changes:
1012
if: github.repository == 'yamcodes/arkenv'
@@ -23,7 +25,7 @@ jobs:
2325
- 'packages/**'
2426
2527
size-limit:
26-
if: github.repository == 'yamcodes/arkenv' && needs.changes.outputs.packages == 'true'
28+
if: github.repository == 'yamcodes/arkenv' && (needs.changes.outputs.packages == 'true' || github.event_name == 'workflow_dispatch')
2729
needs: changes
2830
runs-on: ubuntu-latest
2931
env:

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ jobs:
3333
cache: pnpm
3434
- name: Install dependencies
3535
run: pnpm install
36+
- name: Build packages
37+
run: pnpm run build --filter=./packages/*
3638
- run: pnpm run test
3739

3840
test-typesafety:

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,6 @@ pnpm-debug.log*
4141

4242
# coverage
4343
coverage/
44+
45+
# size-limit
46+
esbuild-why*.html

apps/playgrounds/bun-react/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"devDependencies": {
2121
"@types/bun": "catalog:",
2222
"@types/react": "catalog:",
23-
"@types/react-dom": "catalog:"
23+
"@types/react-dom": "catalog:",
24+
"rimraf": "catalog:"
2425
},
2526
"arkenvExamples": [
2627
{

0 commit comments

Comments
 (0)