Skip to content

Commit

Permalink
refactor(devbox): Refactor schema and improve logging (#33978)
Browse files Browse the repository at this point in the history
Co-authored-by: Will Brennan <will.brennan@cultureamp.com>
Co-authored-by: Will Brennan <will@moondev.co.uk>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
  • Loading branch information
5 people authored Jan 31, 2025
1 parent 0300c4e commit 19ae54f
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 221 deletions.
132 changes: 56 additions & 76 deletions lib/modules/manager/devbox/extract.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ describe('modules/manager/devbox/extract', () => {
it('returns a package dependency when the devbox JSON file has a single package', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": ["nodejs@20.1.8"]
}
`,
{
"packages": ["nodejs@20.1.8"]
}
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -33,7 +33,6 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
],
});
Expand All @@ -42,12 +41,12 @@ describe('modules/manager/devbox/extract', () => {
it('returns a package dependency when the devbox JSON file has a single package with a version object', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8"
{
"packages": {
"nodejs": "20.1.8"
}
}
}
`,
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -56,7 +55,6 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
],
});
Expand All @@ -65,12 +63,12 @@ describe('modules/manager/devbox/extract', () => {
it('returns invalid-version when the devbox JSON file has a single package with an invalid version', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "^20.1.8"
{
"packages": {
"nodejs": "^20.1.8"
}
}
}
`,
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -79,7 +77,6 @@ describe('modules/manager/devbox/extract', () => {
currentValue: '^20.1.8',
datasource: 'devbox',
depName: 'nodejs',
packageName: 'nodejs',
skipReason: 'invalid-version',
},
],
Expand All @@ -89,10 +86,10 @@ describe('modules/manager/devbox/extract', () => {
it('returns a package dependency when the devbox JSON file has multiple packages', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": ["nodejs@20.1.8", "yarn@1.22.10"]
}
`,
{
"packages": ["nodejs@20.1.8", "yarn@1.22.10"]
}
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -101,13 +98,11 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
packageName: 'yarn',
},
],
});
Expand All @@ -116,13 +111,13 @@ describe('modules/manager/devbox/extract', () => {
it('returns a package dependency when the devbox JSON file has multiple packages with in a packages object', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10"
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10"
}
}
}
`,
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -131,13 +126,11 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
packageName: 'yarn',
},
],
});
Expand All @@ -146,17 +139,17 @@ describe('modules/manager/devbox/extract', () => {
it('returns a package dependency when the devbox JSON file has multiple packages with package objects', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": {
"version": "20.1.8"
},
"yarn": {
"version": "1.22.10"
{
"packages": {
"nodejs": {
"version": "20.1.8"
},
"yarn": {
"version": "1.22.10"
}
}
}
}
`,
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -165,13 +158,11 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
packageName: 'yarn',
},
],
});
Expand All @@ -180,14 +171,14 @@ describe('modules/manager/devbox/extract', () => {
it('returns invalid dependencies', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10",
"invalid": "invalid"
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10",
"invalid": "invalid"
}
}
}
`,
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -196,19 +187,16 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
packageName: 'yarn',
},
{
currentValue: 'invalid',
datasource: 'devbox',
depName: 'invalid',
packageName: 'invalid',
skipReason: 'invalid-version',
},
],
Expand All @@ -218,16 +206,16 @@ describe('modules/manager/devbox/extract', () => {
it('returns invalid dependencies with package objects', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10",
"invalid": {
"version": "invalid"
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10",
"invalid": {
"version": "invalid"
}
}
}
}
`,
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -236,19 +224,16 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
packageName: 'yarn',
},
{
currentValue: 'invalid',
datasource: 'devbox',
depName: 'invalid',
packageName: 'invalid',
skipReason: 'invalid-version',
},
],
Expand All @@ -258,10 +243,10 @@ describe('modules/manager/devbox/extract', () => {
it('returns invalid dependencies from the packages array', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": ["nodejs@20.1.8", "yarn@1.22.10", "invalid@invalid", "invalid2"]
}
`,
{
"packages": ["nodejs@20.1.8", "yarn@1.22.10", "invalid@invalid", "invalid2"]
}
`,
'devbox.lock',
);
expect(result).toEqual({
Expand All @@ -270,26 +255,21 @@ describe('modules/manager/devbox/extract', () => {
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
packageName: 'nodejs',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
packageName: 'yarn',
},
{
currentValue: 'invalid',
datasource: 'devbox',
depName: 'invalid',
packageName: 'invalid',
skipReason: 'invalid-version',
},
{
currentValue: undefined,
datasource: 'devbox',
depName: 'invalid2',
packageName: 'invalid2',
skipReason: 'not-a-version',
},
],
Expand All @@ -299,10 +279,10 @@ describe('modules/manager/devbox/extract', () => {
it('returns null if there are no dependencies', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": []
}
`,
{
"packages": []
}
`,
'devbox.lock',
);
expect(result).toBeNull();
Expand Down
20 changes: 5 additions & 15 deletions lib/modules/manager/devbox/extract.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
import { logger } from '../../../logger';
import { logger, withMeta } from '../../../logger';
import type { PackageFileContent } from '../types';
import { DevboxFileSchema } from './schema';
import { DevboxSchema } from './schema';

export function extractPackageFile(
content: string,
packageFile: string,
): PackageFileContent | null {
logger.trace('devbox.extractPackageFile()');

const parsedFile = DevboxFileSchema.safeParse(content);
if (parsedFile.error) {
logger.debug(
{ packageFile, error: parsedFile.error },
'Error parsing devbox.json',
);
const deps = withMeta({ packageFile }, () => DevboxSchema.parse(content));
if (!deps.length) {
return null;
}

const deps = parsedFile.data.packages;

if (deps.length) {
return { deps };
}

return null;
return { deps };
}
Loading

0 comments on commit 19ae54f

Please sign in to comment.