mirror of
https://github.com/renovatebot/renovate.git
synced 2025-01-10 05:56:26 +00:00
Compare commits
58 commits
9591206b39
...
5eab03ea74
Author | SHA1 | Date | |
---|---|---|---|
|
5eab03ea74 | ||
|
60754ce088 | ||
|
d018ae7711 | ||
|
3eb405d9ed | ||
|
e811b23df5 | ||
|
a2f46337dc | ||
|
0c1fc74f16 | ||
|
9179fa6f39 | ||
|
7e76bfd6e3 | ||
|
0a9af09b78 | ||
|
3e11881f4b | ||
|
d2c3b5edf4 | ||
|
87a43c9b66 | ||
|
c6591510b4 | ||
|
ed2260553a | ||
|
31d2a070ae | ||
|
d8f4cc5e90 | ||
|
70912bf17f | ||
|
9fbea6b7e3 | ||
|
149b2f6fc0 | ||
|
ab7854669b | ||
|
f9c72474df | ||
|
e1d43e59d7 | ||
|
9e144f5756 | ||
|
7eed106edf | ||
|
96fd373ed8 | ||
|
27fc2cff70 | ||
|
db6a562a5a | ||
|
e0a303c3c3 | ||
|
3f0e8d949f | ||
|
c3252ff5df | ||
|
23a0c059f6 | ||
|
870297a7c8 | ||
|
cdd1a0550f | ||
|
e2a3f50736 | ||
|
c8363e5ecc | ||
|
ce71499d94 | ||
|
0ecdb091f8 | ||
|
4bcf310a8d | ||
|
04793300a9 | ||
|
62d60c6071 | ||
|
5cf966264c | ||
|
51b6353056 | ||
|
101306e57c | ||
|
d3a54c7458 | ||
|
7edb754396 | ||
|
f0c2dceddc | ||
|
9146253594 | ||
|
31094498b3 | ||
|
46609cab40 | ||
|
0e0e5e07f5 | ||
|
ae85dccfff | ||
|
3de4d4b18c | ||
|
bc97524a93 | ||
|
24f0a849b4 | ||
|
0dc2ab1e2f | ||
|
44aeba3d96 | ||
|
752feae9ac |
13 changed files with 802 additions and 165 deletions
|
@ -22,7 +22,7 @@ services:
|
|||
|
||||
# Prometheus for storing metrics
|
||||
prometheus:
|
||||
image: prom/prometheus:v3.0.1
|
||||
image: prom/prometheus:v3.1.0
|
||||
ports:
|
||||
- '9090:9090' # Web UI
|
||||
- '4318' # OTLP HTTP
|
||||
|
|
|
@ -4,7 +4,7 @@ import type { Preset } from '../types';
|
|||
|
||||
export const presets: Record<string, Preset> = {
|
||||
safeEnv: {
|
||||
allowedEnv: ['GO*'],
|
||||
allowedEnv: ['GO*', 'RUSTC_BOOTSTRAP'],
|
||||
description:
|
||||
'Hopefully safe environment variables to allow users to configure.',
|
||||
},
|
||||
|
|
|
@ -1,74 +1,522 @@
|
|||
import { fs } from '../../../../test/util';
|
||||
import { GitRefsDatasource } from '../../datasource/git-refs';
|
||||
import { id as nixpkgsVersioning } from '../../versioning/nixpkgs';
|
||||
import { extractPackageFile } from '.';
|
||||
|
||||
jest.mock('../../../util/fs');
|
||||
|
||||
const flake1Lock = `{
|
||||
"nodes": {
|
||||
"root": {}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake2Lock = `{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1720031269,
|
||||
"narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9f4128e00b0ae8ec65918efeba59db998750ead6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake3Lock = `{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1728650607,
|
||||
"narHash": "sha256-0lOnVTzRXzpk5uxbHLm3Ti3tyPAvirAIQDfwEUd8arg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "612ee628421ba2c1abca4c99684862f76cb3b089",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake4Lock = `{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1672057183,
|
||||
"narHash": "sha256-GN7/10DNNvs1FPj9tlZA2qgNdFuYKKuS3qlHTqAxasQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b139e44d78c36c69bcbb825b20dbfa51e7738347",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"patchelf": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1718457448,
|
||||
"narHash": "sha256-FSoxTcRZMGHNJh8dNtKOkcUtjhmhU6yQXcZZfUPLhQM=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "a0f54334df36770b335c051e540ba40afcbf8378",
|
||||
"revCount": 844,
|
||||
"type": "git",
|
||||
"url": "https://github.com/NixOS/patchelf.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/NixOS/patchelf.git"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"patchelf": "patchelf"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake5Lock = `{
|
||||
"nodes": {
|
||||
"ijq": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1723569650,
|
||||
"narHash": "sha256-Ho/sAhEUeSug52JALgjrKVUPCBe8+PovbJj/lniKxp8=",
|
||||
"owner": "~gpanders",
|
||||
"repo": "ijq",
|
||||
"rev": "88f0d9ae98942bf49cba302c42b2a0f6e05f9b58",
|
||||
"type": "sourcehut"
|
||||
},
|
||||
"original": {
|
||||
"owner": "~gpanders",
|
||||
"repo": "ijq",
|
||||
"type": "sourcehut"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"ijq": "ijq"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake6Lock = `{
|
||||
"nodes": {
|
||||
"home-manager": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1728650932,
|
||||
"narHash": "sha256-mGKzqdsRyLnGNl6WjEr7+sghGgBtYHhJQ4mjpgRTCsU=",
|
||||
"owner": "rycee",
|
||||
"repo": "home-manager",
|
||||
"rev": "65ae9c147349829d3df0222151f53f79821c5134",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rycee",
|
||||
"repo": "home-manager",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake7Lock = `{
|
||||
"nodes": {
|
||||
"root": {}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 6
|
||||
}`;
|
||||
const flake8Lock = `{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1728492678,
|
||||
"narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=",
|
||||
"ref": "nixos-unstable",
|
||||
"rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7",
|
||||
"shallow": true,
|
||||
"type": "git",
|
||||
"url": "https://github.com/NixOS/nixpkgs"
|
||||
},
|
||||
"original": {
|
||||
"ref": "nixos-unstable",
|
||||
"shallow": true,
|
||||
"type": "git",
|
||||
"url": "https://github.com/NixOS/nixpkgs"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake9Lock = `{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1728538411,
|
||||
"narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake10Lock = `{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726560853,
|
||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1728492678,
|
||||
"narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-extra-pkgs": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"host": "github.corp.example.com",
|
||||
"lastModified": 1728666512,
|
||||
"narHash": "sha256-p+l16Zzyl2DXG695yks6KQP7NkjsnEksu5GBvtL1QYg=",
|
||||
"owner": "my-org",
|
||||
"repo": "nixpkgs-extra-pkgs",
|
||||
"rev": "6bf2706348447df6f8b86b1c3e54f87b0afda84f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"host": "github.corp.example.com",
|
||||
"owner": "my-org",
|
||||
"repo": "nixpkgs-extra-pkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs-extra-pkgs": "nixpkgs-extra-pkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
const flake11Lock = `{
|
||||
"nodes": {
|
||||
"data-mesher": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1727355895,
|
||||
"narHash": "sha256-grZIaLgk5GgoDuTt49RTCLBh458H4YJdIAU4B3onXRw=",
|
||||
"rev": "c7e39452affcc0f89e023091524e38b3aaf109e9",
|
||||
"type": "tarball",
|
||||
"url": "https://git.clan.lol/api/v1/repos/clan/data-mesher/archive/c7e39452affcc0f89e023091524e38b3aaf109e9.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://git.clan.lol/clan/data-mesher/archive/main.tar.gz"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"data-mesher",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726153070,
|
||||
"narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1726871744,
|
||||
"narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a1d92660c6b3b7c26fb883500a80ea9d33321be2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"data-mesher": "data-mesher"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"data-mesher",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726734507,
|
||||
"narHash": "sha256-VUH5O5AcOSxb0uL/m34dDkxFKP6WLQ6y4I1B4+N3L2w=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "ee41a466c2255a3abe6bc50fc6be927cdee57a9f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}`;
|
||||
|
||||
describe('modules/manager/nix/extract', () => {
|
||||
it('returns null when no nixpkgs', () => {
|
||||
const content = `{
|
||||
inputs = {};
|
||||
}`;
|
||||
const res = extractPackageFile(content);
|
||||
|
||||
expect(res).toBeNull();
|
||||
it('returns null when no inputs', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake1Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toBeNull();
|
||||
});
|
||||
|
||||
it('returns nixpkgs', () => {
|
||||
const content = `{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-21.11";
|
||||
};
|
||||
}`;
|
||||
|
||||
const res = extractPackageFile(content);
|
||||
|
||||
expect(res?.deps).toEqual([
|
||||
{
|
||||
depName: 'nixpkgs',
|
||||
currentValue: 'nixos-21.11',
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: 'https://github.com/NixOS/nixpkgs',
|
||||
versioning: nixpkgsVersioning,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('is case insensitive', () => {
|
||||
const content = `{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-21.11";
|
||||
};
|
||||
}`;
|
||||
|
||||
const res = extractPackageFile(content);
|
||||
|
||||
expect(res?.deps).toEqual([
|
||||
{
|
||||
depName: 'nixpkgs',
|
||||
currentValue: 'nixos-21.11',
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: 'https://github.com/NixOS/nixpkgs',
|
||||
versioning: nixpkgsVersioning,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('includes nixpkgs with no explicit ref', () => {
|
||||
const content = `{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs";
|
||||
};
|
||||
}`;
|
||||
|
||||
const res = extractPackageFile(content);
|
||||
|
||||
expect(res).toMatchObject({
|
||||
it('returns nixpkgs input', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake2Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toEqual({
|
||||
deps: [
|
||||
{
|
||||
currentValue: undefined,
|
||||
depName: 'nixpkgs',
|
||||
currentDigest: '9f4128e00b0ae8ec65918efeba59db998750ead6',
|
||||
currentValue: 'nixos-unstable',
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: 'https://github.com/NixOS/nixpkgs',
|
||||
replaceString: '9f4128e00b0ae8ec65918efeba59db998750ead6',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('includes nixpkgs with no explicit ref', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake3Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: '612ee628421ba2c1abca4c99684862f76cb3b089',
|
||||
datasource: 'git-refs',
|
||||
depName: 'nixpkgs',
|
||||
packageName: 'https://github.com/NixOS/nixpkgs',
|
||||
versioning: 'nixpkgs',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('includes patchelf from HEAD', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake4Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: 'a0f54334df36770b335c051e540ba40afcbf8378',
|
||||
datasource: 'git-refs',
|
||||
depName: 'patchelf',
|
||||
packageName: 'https://github.com/NixOS/patchelf.git',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('includes ijq from sourcehut without a flake', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake5Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: '88f0d9ae98942bf49cba302c42b2a0f6e05f9b58',
|
||||
datasource: 'git-refs',
|
||||
depName: 'ijq',
|
||||
packageName: 'https://git.sr.ht/~gpanders/ijq',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('includes home-manager from gitlab', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake6Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: '65ae9c147349829d3df0222151f53f79821c5134',
|
||||
datasource: 'git-refs',
|
||||
depName: 'home-manager',
|
||||
packageName: 'https://gitlab.com/rycee/home-manager',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('test other version', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake7Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toBeNull();
|
||||
});
|
||||
|
||||
it('includes nixpkgs with ref and shallow arguments', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake8Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: '5633bcff0c6162b9e4b5f1264264611e950c8ec7',
|
||||
datasource: 'git-refs',
|
||||
depName: 'nixpkgs',
|
||||
packageName: 'https://github.com/NixOS/nixpkgs',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('includes nixpkgs but using indirect type that cannot be updated', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake9Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toBeNull();
|
||||
});
|
||||
|
||||
it('includes flake from GitHub Enterprise', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake10Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: '6bf2706348447df6f8b86b1c3e54f87b0afda84f',
|
||||
datasource: 'git-refs',
|
||||
depName: 'nixpkgs-extra-pkgs',
|
||||
packageName:
|
||||
'https://github.corp.example.com/my-org/nixpkgs-extra-pkgs',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('includes flake with tarball type', async () => {
|
||||
fs.readLocalFile.mockResolvedValueOnce(flake11Lock);
|
||||
expect(await extractPackageFile('', 'flake.nix')).toMatchObject({
|
||||
deps: [
|
||||
{
|
||||
currentDigest: 'c7e39452affcc0f89e023091524e38b3aaf109e9',
|
||||
datasource: 'git-refs',
|
||||
depName: 'data-mesher',
|
||||
packageName: 'https://git.clan.lol/clan/data-mesher',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
|
|
@ -1,23 +1,140 @@
|
|||
import { logger } from '../../../logger';
|
||||
import { getSiblingFileName, readLocalFile } from '../../../util/fs';
|
||||
import { regEx } from '../../../util/regex';
|
||||
import { GitRefsDatasource } from '../../datasource/git-refs';
|
||||
import { id as nixpkgsVersioning } from '../../versioning/nixpkgs';
|
||||
import type { PackageDependency, PackageFileContent } from '../types';
|
||||
import { NixFlakeLock } from './schema';
|
||||
|
||||
const nixpkgsRegex = regEx(/"github:nixos\/nixpkgs(\/(?<ref>[a-z0-9-.]+))?"/i);
|
||||
// TODO: add support to update nixpkgs branches in flakes.nix using nixpkgsVersioning
|
||||
|
||||
// as documented upstream
|
||||
// https://github.com/NixOS/nix/blob/master/doc/manual/source/protocols/tarball-fetcher.md#gitea-and-forgejo-support
|
||||
const lockableHTTPTarballProtocol = regEx(
|
||||
'^https://(?<domain>[^/]+)/(?<owner>[^/]+)/(?<repo>[^/]+)/archive/(?<rev>.+).tar.gz$',
|
||||
);
|
||||
|
||||
export async function extractPackageFile(
|
||||
content: string,
|
||||
packageFile: string,
|
||||
): Promise<PackageFileContent | null> {
|
||||
const packageLockFile = getSiblingFileName(packageFile, 'flake.lock');
|
||||
const lockContents = await readLocalFile(packageLockFile, 'utf8');
|
||||
|
||||
logger.trace(`nix.extractPackageFile(${packageLockFile})`);
|
||||
|
||||
export function extractPackageFile(content: string): PackageFileContent | null {
|
||||
const deps: PackageDependency[] = [];
|
||||
|
||||
const match = nixpkgsRegex.exec(content);
|
||||
if (match?.groups) {
|
||||
const { ref } = match.groups;
|
||||
const flakeLockParsed = NixFlakeLock.safeParse(lockContents);
|
||||
if (!flakeLockParsed.success) {
|
||||
logger.debug(
|
||||
{ packageLockFile, error: flakeLockParsed.error },
|
||||
`invalid flake.lock file`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
const flakeLock = flakeLockParsed.data;
|
||||
const rootInputs = flakeLock.nodes['root'].inputs;
|
||||
|
||||
if (!rootInputs) {
|
||||
logger.debug(
|
||||
{ packageLockFile, error: flakeLockParsed.error },
|
||||
`flake.lock is missing "root" node`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
for (const [depName, flakeInput] of Object.entries(flakeLock.nodes)) {
|
||||
// the root input is a magic string for the entrypoint and only references other flake inputs
|
||||
if (depName === 'root') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip all locked nodes which cannot be updated
|
||||
if (!(depName in rootInputs)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const flakeLocked = flakeInput.locked;
|
||||
const flakeOriginal = flakeInput.original;
|
||||
|
||||
// istanbul ignore if: if we are not in a root node then original and locked always exist which cannot be easily expressed in the type
|
||||
if (flakeLocked === undefined || flakeOriginal === undefined) {
|
||||
logger.debug(
|
||||
{ packageLockFile },
|
||||
`Found empty flake input '${JSON.stringify(flakeInput)}', skipping`,
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// indirect inputs cannot be reliable updated because they depend on the flake registry
|
||||
if (flakeOriginal.type === 'indirect') {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (flakeLocked.type) {
|
||||
case 'github':
|
||||
deps.push({
|
||||
depName: 'nixpkgs',
|
||||
currentValue: ref,
|
||||
depName,
|
||||
currentValue: flakeOriginal.ref,
|
||||
currentDigest: flakeLocked.rev,
|
||||
replaceString: flakeLocked.rev,
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: 'https://github.com/NixOS/nixpkgs',
|
||||
versioning: nixpkgsVersioning,
|
||||
packageName: `https://${flakeOriginal.host ?? 'github.com'}/${flakeOriginal.owner}/${flakeOriginal.repo}`,
|
||||
});
|
||||
break;
|
||||
case 'gitlab':
|
||||
deps.push({
|
||||
depName,
|
||||
currentValue: flakeOriginal.ref,
|
||||
currentDigest: flakeLocked.rev,
|
||||
replaceString: flakeLocked.rev,
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: `https://${flakeOriginal.host ?? 'gitlab.com'}/${flakeOriginal.owner}/${flakeOriginal.repo}`,
|
||||
});
|
||||
break;
|
||||
case 'git':
|
||||
deps.push({
|
||||
depName,
|
||||
currentValue: flakeOriginal.ref,
|
||||
currentDigest: flakeLocked.rev,
|
||||
replaceString: flakeLocked.rev,
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: flakeOriginal.url,
|
||||
});
|
||||
break;
|
||||
case 'sourcehut':
|
||||
deps.push({
|
||||
depName,
|
||||
currentValue: flakeOriginal.ref,
|
||||
currentDigest: flakeLocked.rev,
|
||||
replaceString: flakeLocked.rev,
|
||||
datasource: GitRefsDatasource.id,
|
||||
packageName: `https://${flakeOriginal.host ?? 'git.sr.ht'}/${flakeOriginal.owner}/${flakeOriginal.repo}`,
|
||||
});
|
||||
break;
|
||||
case 'tarball':
|
||||
deps.push({
|
||||
depName,
|
||||
currentValue: flakeLocked.ref,
|
||||
currentDigest: flakeLocked.rev,
|
||||
replaceString: flakeLocked.rev,
|
||||
datasource: GitRefsDatasource.id,
|
||||
// type tarball always contains this link
|
||||
packageName: flakeOriginal.url!.replace(
|
||||
lockableHTTPTarballProtocol,
|
||||
'https://$<domain>/$<owner>/$<repo>',
|
||||
),
|
||||
});
|
||||
break;
|
||||
// istanbul ignore next: just a safeguard
|
||||
default:
|
||||
logger.debug(
|
||||
{ packageLockFile },
|
||||
`Unknown flake.lock type "${flakeLocked.type}", skipping`,
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (deps.length) {
|
||||
|
|
|
@ -9,7 +9,7 @@ export const url = 'https://nix.dev';
|
|||
|
||||
export const defaultConfig = {
|
||||
fileMatch: ['(^|/)flake\\.nix$'],
|
||||
commitMessageTopic: 'nixpkgs',
|
||||
commitMessageTopic: 'nix',
|
||||
commitMessageExtra: 'to {{newValue}}',
|
||||
enabled: false,
|
||||
};
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
The [`nix`](https://github.com/NixOS/nix) manager supports:
|
||||
|
||||
- [`lockFileMaintenance`](../../../configuration-options.md#lockfilemaintenance) updates for `flake.lock`
|
||||
- [nixpkgs](https://github.com/NixOS/nixpkgs) updates
|
||||
- input updates for `flake.lock`
|
||||
|
||||
For specifying `packageRules` it is important to know how `depName` and `packageName` are defined for nix updates:
|
||||
|
||||
- The `depName` field is equal to the nix flake input name, eg. `nix.inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";` would have the `depName` of `nixpkgs`
|
||||
- The `packageName` field is equal to the fully-qualified root URL of the package source, eg. `https://github.com/NixOS/nixpkgs` for the above example.
|
||||
|
|
41
lib/modules/manager/nix/schema.ts
Normal file
41
lib/modules/manager/nix/schema.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { z } from 'zod';
|
||||
import { Json } from '../../../util/schema-utils';
|
||||
|
||||
const InputType = z.enum([
|
||||
'git',
|
||||
'github',
|
||||
'gitlab',
|
||||
'indirect',
|
||||
'sourcehut',
|
||||
'tarball',
|
||||
]);
|
||||
|
||||
const LockedInput = z.object({
|
||||
ref: z.string().optional(),
|
||||
rev: z.string(),
|
||||
type: InputType,
|
||||
});
|
||||
|
||||
const OriginalInput = z.object({
|
||||
host: z.string().optional(),
|
||||
owner: z.string().optional(),
|
||||
repo: z.string().optional(),
|
||||
ref: z.string().optional(),
|
||||
type: InputType,
|
||||
url: z.string().optional(),
|
||||
});
|
||||
|
||||
const NixInput = z.object({
|
||||
inputs: z.record(z.string(), z.string().or(z.array(z.string()))).optional(),
|
||||
locked: LockedInput.optional(),
|
||||
original: OriginalInput.optional(),
|
||||
});
|
||||
|
||||
export const NixFlakeLock = Json.pipe(
|
||||
z.object({
|
||||
nodes: z.record(z.string(), NixInput),
|
||||
version: z.literal(7),
|
||||
}),
|
||||
);
|
||||
|
||||
export type NixFlakeLock = z.infer<typeof NixFlakeLock>;
|
|
@ -166,8 +166,8 @@ describe('modules/platform/bitbucket/pr-cache', () => {
|
|||
);
|
||||
|
||||
expect(res).toMatchObject([
|
||||
{ number: 1, title: 'title' },
|
||||
{ number: 2, title: 'title' },
|
||||
{ number: 1, title: 'title' },
|
||||
]);
|
||||
expect(cache).toEqual({
|
||||
httpCache: {},
|
||||
|
|
|
@ -11,6 +11,7 @@ import type { BitbucketPrCacheData, PagedResult, PrResponse } from './types';
|
|||
import { prFieldsFilter, prInfo, prStates } from './utils';
|
||||
|
||||
export class BitbucketPrCache {
|
||||
private items: Pr[] = [];
|
||||
private cache: BitbucketPrCacheData;
|
||||
|
||||
private constructor(
|
||||
|
@ -41,6 +42,7 @@ export class BitbucketPrCache {
|
|||
}
|
||||
repoCache.platform.bitbucket.pullRequestsCache = pullRequestCache;
|
||||
this.cache = pullRequestCache;
|
||||
this.updateItems();
|
||||
}
|
||||
|
||||
private static async init(
|
||||
|
@ -62,7 +64,7 @@ export class BitbucketPrCache {
|
|||
}
|
||||
|
||||
private getPrs(): Pr[] {
|
||||
return Object.values(this.cache.items);
|
||||
return this.items;
|
||||
}
|
||||
|
||||
static async getPrs(
|
||||
|
@ -77,6 +79,7 @@ export class BitbucketPrCache {
|
|||
private setPr(pr: Pr): void {
|
||||
logger.debug(`Adding PR #${pr.number} to the PR cache`);
|
||||
this.cache.items[pr.number] = pr;
|
||||
this.updateItems();
|
||||
}
|
||||
|
||||
static async setPr(
|
||||
|
@ -161,6 +164,16 @@ export class BitbucketPrCache {
|
|||
},
|
||||
`PR cache sync finished`,
|
||||
);
|
||||
|
||||
this.updateItems();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the pr cache starts with the most recent PRs.
|
||||
* JavaScript ensures that the cache is sorted by PR number.
|
||||
*/
|
||||
private updateItems(): void {
|
||||
this.items = Object.values(this.cache.items).reverse();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1166,10 +1166,10 @@ describe('modules/platform/gitea/index', () => {
|
|||
|
||||
const res = await gitea.getPrList();
|
||||
expect(res).toMatchObject([
|
||||
{ number: 1, title: 'Some PR' },
|
||||
{ number: 2, title: 'Other PR' },
|
||||
{ number: 3, title: 'Draft PR' },
|
||||
{ number: 4, title: 'Merged PR' },
|
||||
{ number: 3, title: 'Draft PR' },
|
||||
{ number: 2, title: 'Other PR' },
|
||||
{ number: 1, title: 'Some PR' },
|
||||
]);
|
||||
});
|
||||
|
||||
|
@ -1209,10 +1209,10 @@ describe('modules/platform/gitea/index', () => {
|
|||
const res = await gitea.getPrList();
|
||||
|
||||
expect(res).toMatchObject([
|
||||
{ number: 1, title: 'Some PR' },
|
||||
{ number: 2, title: 'Other PR' },
|
||||
{ number: 3, title: 'Draft PR' },
|
||||
{ number: 4, title: 'Merged PR' },
|
||||
{ number: 3, title: 'Draft PR' },
|
||||
{ number: 2, title: 'Other PR' },
|
||||
{ number: 1, title: 'Some PR' },
|
||||
]);
|
||||
});
|
||||
|
||||
|
@ -1244,16 +1244,16 @@ describe('modules/platform/gitea/index', () => {
|
|||
await initFakeRepo(scope);
|
||||
|
||||
const res1 = await gitea.getPrList();
|
||||
expect(res1).toMatchObject([{ number: 1 }, { number: 2 }]);
|
||||
expect(res1).toMatchObject([{ number: 2 }, { number: 1 }]);
|
||||
|
||||
memCache.set('gitea-pr-cache-synced', false);
|
||||
|
||||
const res2 = await gitea.getPrList();
|
||||
expect(res2).toMatchObject([
|
||||
{ number: 1 },
|
||||
{ number: 2 },
|
||||
{ number: 3 },
|
||||
{ number: 4 },
|
||||
{ number: 3 },
|
||||
{ number: 2 },
|
||||
{ number: 1 },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -11,6 +11,7 @@ import { API_PATH, toRenovatePR } from './utils';
|
|||
|
||||
export class GiteaPrCache {
|
||||
private cache: GiteaPrCacheData;
|
||||
private items: Pr[] = [];
|
||||
|
||||
private constructor(
|
||||
private repo: string,
|
||||
|
@ -31,6 +32,7 @@ export class GiteaPrCache {
|
|||
}
|
||||
repoCache.platform.gitea.pullRequestsCache = pullRequestCache;
|
||||
this.cache = pullRequestCache;
|
||||
this.updateItems();
|
||||
}
|
||||
|
||||
static forceSync(): void {
|
||||
|
@ -54,7 +56,7 @@ export class GiteaPrCache {
|
|||
}
|
||||
|
||||
private getPrs(): Pr[] {
|
||||
return Object.values(this.cache.items);
|
||||
return this.items;
|
||||
}
|
||||
|
||||
static async getPrs(
|
||||
|
@ -68,6 +70,7 @@ export class GiteaPrCache {
|
|||
|
||||
private setPr(item: Pr): void {
|
||||
this.cache.items[item.number] = item;
|
||||
this.updateItems();
|
||||
}
|
||||
|
||||
static async setPr(
|
||||
|
@ -137,6 +140,16 @@ export class GiteaPrCache {
|
|||
url = parseLinkHeader(res.headers.link)?.next?.url;
|
||||
}
|
||||
|
||||
this.updateItems();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the pr cache starts with the most recent PRs.
|
||||
* JavaScript ensures that the cache is sorted by PR number.
|
||||
*/
|
||||
private updateItems(): void {
|
||||
this.items = Object.values(this.cache.items).reverse();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -269,7 +269,7 @@
|
|||
"@openpgp/web-stream-tools": "0.1.3",
|
||||
"@renovate/eslint-plugin": "file:tools/eslint",
|
||||
"@semantic-release/exec": "6.0.3",
|
||||
"@swc/core": "1.10.1",
|
||||
"@swc/core": "1.10.2",
|
||||
"@types/auth-header": "1.0.6",
|
||||
"@types/aws4": "1.11.6",
|
||||
"@types/better-sqlite3": "7.6.12",
|
||||
|
|
148
pnpm-lock.yaml
148
pnpm-lock.yaml
|
@ -380,8 +380,8 @@ importers:
|
|||
specifier: 6.0.3
|
||||
version: 6.0.3(semantic-release@24.2.0(typescript@5.7.2))
|
||||
'@swc/core':
|
||||
specifier: 1.10.1
|
||||
version: 1.10.1
|
||||
specifier: 1.10.2
|
||||
version: 1.10.2
|
||||
'@types/auth-header':
|
||||
specifier: 1.0.6
|
||||
version: 1.0.6
|
||||
|
@ -540,7 +540,7 @@ importers:
|
|||
version: 2.31.0(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
|
||||
eslint-plugin-jest:
|
||||
specifier: 28.10.0
|
||||
version: 28.10.0(@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
|
||||
version: 28.10.0(@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
|
||||
eslint-plugin-jest-formatting:
|
||||
specifier: 3.1.0
|
||||
version: 3.1.0(eslint@8.57.1)
|
||||
|
@ -564,16 +564,16 @@ importers:
|
|||
version: 9.1.7
|
||||
jest:
|
||||
specifier: 29.7.0
|
||||
version: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
version: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-extended:
|
||||
specifier: 4.0.2
|
||||
version: 4.0.2(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))
|
||||
version: 4.0.2(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))
|
||||
jest-mock:
|
||||
specifier: 29.7.0
|
||||
version: 29.7.0
|
||||
jest-mock-extended:
|
||||
specifier: 3.0.7
|
||||
version: 3.0.7(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
|
||||
version: 3.0.7(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
|
||||
jest-snapshot:
|
||||
specifier: 29.7.0
|
||||
version: 29.7.0
|
||||
|
@ -609,10 +609,10 @@ importers:
|
|||
version: 3.0.3
|
||||
ts-jest:
|
||||
specifier: 29.2.5
|
||||
version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
|
||||
version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
|
||||
ts-node:
|
||||
specifier: 10.9.2
|
||||
version: 10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)
|
||||
version: 10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)
|
||||
type-fest:
|
||||
specifier: 4.31.0
|
||||
version: 4.31.0
|
||||
|
@ -1847,68 +1847,68 @@ packages:
|
|||
resolution: {integrity: sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==}
|
||||
engines: {node: '>=16.0.0'}
|
||||
|
||||
'@swc/core-darwin-arm64@1.10.1':
|
||||
resolution: {integrity: sha512-NyELPp8EsVZtxH/mEqvzSyWpfPJ1lugpTQcSlMduZLj1EASLO4sC8wt8hmL1aizRlsbjCX+r0PyL+l0xQ64/6Q==}
|
||||
'@swc/core-darwin-arm64@1.10.2':
|
||||
resolution: {integrity: sha512-xPDbCUfGdVjA/0yhRFVSyog73wO3/W3JNgx1PkOcCc+0OgZtgAnt4YD8QbSsUE+euc5bQJs/7HfJQ3305+HWVA==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@swc/core-darwin-x64@1.10.1':
|
||||
resolution: {integrity: sha512-L4BNt1fdQ5ZZhAk5qoDfUnXRabDOXKnXBxMDJ+PWLSxOGBbWE6aJTnu4zbGjJvtot0KM46m2LPAPY8ttknqaZA==}
|
||||
'@swc/core-darwin-x64@1.10.2':
|
||||
resolution: {integrity: sha512-Dm4R9ffQw4yrGjvdYxxuO5RViwkRkSsn64WF7YGYZIlhkyFoseibPnQlOsx5qnjquc8f3h1C8/806XG+y3rMaQ==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@swc/core-linux-arm-gnueabihf@1.10.1':
|
||||
resolution: {integrity: sha512-Y1u9OqCHgvVp2tYQAJ7hcU9qO5brDMIrA5R31rwWQIAKDkJKtv3IlTHF0hrbWk1wPR0ZdngkQSJZple7G+Grvw==}
|
||||
'@swc/core-linux-arm-gnueabihf@1.10.2':
|
||||
resolution: {integrity: sha512-aXTqgel7AueM7CcCOFFUq6+gJyD/A3rFBWxPT6wA34IC7oQ0IIFpJjBLl8zN6/0aZ4OQ1ExlQ7zoKaTlk5tBug==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@swc/core-linux-arm64-gnu@1.10.1':
|
||||
resolution: {integrity: sha512-tNQHO/UKdtnqjc7o04iRXng1wTUXPgVd8Y6LI4qIbHVoVPwksZydISjMcilKNLKIwOoUQAkxyJ16SlOAeADzhQ==}
|
||||
'@swc/core-linux-arm64-gnu@1.10.2':
|
||||
resolution: {integrity: sha512-HYFag6ULpnVMnHuKKAFuZH3kco/2eKKZ24I+gI2M4JlIW4soDmP8Oc2eAADIloln4SfQXzADX34m6merCWp65g==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@swc/core-linux-arm64-musl@1.10.1':
|
||||
resolution: {integrity: sha512-x0L2Pd9weQ6n8dI1z1Isq00VHFvpBClwQJvrt3NHzmR+1wCT/gcYl1tp9P5xHh3ldM8Cn4UjWCw+7PaUgg8FcQ==}
|
||||
'@swc/core-linux-arm64-musl@1.10.2':
|
||||
resolution: {integrity: sha512-N8es+V+M9GijYsxfiIG3NJ+lHgoZosX+yjblc5eOx0xrBDeqH3kNLhJpctOczrJk0rUjN+zX5x+8H8qurcEAaw==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@swc/core-linux-x64-gnu@1.10.1':
|
||||
resolution: {integrity: sha512-yyYEwQcObV3AUsC79rSzN9z6kiWxKAVJ6Ntwq2N9YoZqSPYph+4/Am5fM1xEQYf/kb99csj0FgOelomJSobxQA==}
|
||||
'@swc/core-linux-x64-gnu@1.10.2':
|
||||
resolution: {integrity: sha512-fI4rxJkWQaNeG4UcuqKJrc1JM+nAwIzzFba9+A4Aohc6z0EgPokrA1v7WmPUObO+cdZjVXdMpDGkhGQhbok1aQ==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@swc/core-linux-x64-musl@1.10.1':
|
||||
resolution: {integrity: sha512-tcaS43Ydd7Fk7sW5ROpaf2Kq1zR+sI5K0RM+0qYLYYurvsJruj3GhBCaiN3gkzd8m/8wkqNqtVklWaQYSDsyqA==}
|
||||
'@swc/core-linux-x64-musl@1.10.2':
|
||||
resolution: {integrity: sha512-ycDOxBgII/2xkusMgq2S9n81IQ8SeWk1FU0zuUsZrUkaXEq/78+nHFo/0IStPLrtRxzG2gJ0JZvfaa6jMxr79Q==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@swc/core-win32-arm64-msvc@1.10.1':
|
||||
resolution: {integrity: sha512-D3Qo1voA7AkbOzQ2UGuKNHfYGKL6eejN8VWOoQYtGHHQi1p5KK/Q7V1ku55oxXBsj79Ny5FRMqiRJpVGad7bjQ==}
|
||||
'@swc/core-win32-arm64-msvc@1.10.2':
|
||||
resolution: {integrity: sha512-s7/UrbdfYGdUar+Nj8jxNeXaFdryWnKuJU5udDONgk9gb1xp7K5TPxBL9j7EtCrAenM2sR9Bd84ZemwzyZ/VLw==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@swc/core-win32-ia32-msvc@1.10.1':
|
||||
resolution: {integrity: sha512-WalYdFoU3454Og+sDKHM1MrjvxUGwA2oralknXkXL8S0I/8RkWZOB++p3pLaGbTvOO++T+6znFbQdR8KRaa7DA==}
|
||||
'@swc/core-win32-ia32-msvc@1.10.2':
|
||||
resolution: {integrity: sha512-sz8f+dmrzb816Ji25G+vs8HMq6zHq1IMKF4hVUnSJKdNr2k789+qRjF1fnv3YDcz5kkeYSvolXqVS1mCezDebg==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@swc/core-win32-x64-msvc@1.10.1':
|
||||
resolution: {integrity: sha512-JWobfQDbTnoqaIwPKQ3DVSywihVXlQMbDuwik/dDWlj33A8oEHcjPOGs4OqcA3RHv24i+lfCQpM3Mn4FAMfacA==}
|
||||
'@swc/core-win32-x64-msvc@1.10.2':
|
||||
resolution: {integrity: sha512-XXYHuc5KdhuLx1nP8cEKW+5Kakxy+iq/jcuJ52+27E2uB+xxzLeXvbPvz645je3Cti5nQ4la2HIn6tpST5ufSw==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@swc/core@1.10.1':
|
||||
resolution: {integrity: sha512-rQ4dS6GAdmtzKiCRt3LFVxl37FaY1cgL9kSUTnhQ2xc3fmHOd7jdJK/V4pSZMG1ruGTd0bsi34O2R0Olg9Zo/w==}
|
||||
'@swc/core@1.10.2':
|
||||
resolution: {integrity: sha512-d3reIYowBL6gbp4jC6FRZ3hE0eWcWwqh0XcHd6k5rKF/oZA6jLb7gxIRduJhrn+jyLz/HCC8WyfomUkEcs7iZQ==}
|
||||
engines: {node: '>=10'}
|
||||
peerDependencies:
|
||||
'@swc/helpers': '*'
|
||||
|
@ -7490,7 +7490,7 @@ snapshots:
|
|||
jest-util: 29.7.0
|
||||
slash: 3.0.0
|
||||
|
||||
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))':
|
||||
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))':
|
||||
dependencies:
|
||||
'@jest/console': 29.7.0
|
||||
'@jest/reporters': 29.7.0
|
||||
|
@ -7504,7 +7504,7 @@ snapshots:
|
|||
exit: 0.1.2
|
||||
graceful-fs: 4.2.11
|
||||
jest-changed-files: 29.7.0
|
||||
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-haste-map: 29.7.0
|
||||
jest-message-util: 29.7.0
|
||||
jest-regex-util: 29.6.3
|
||||
|
@ -8586,51 +8586,51 @@ snapshots:
|
|||
'@smithy/types': 3.7.2
|
||||
tslib: 2.8.1
|
||||
|
||||
'@swc/core-darwin-arm64@1.10.1':
|
||||
'@swc/core-darwin-arm64@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-darwin-x64@1.10.1':
|
||||
'@swc/core-darwin-x64@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-linux-arm-gnueabihf@1.10.1':
|
||||
'@swc/core-linux-arm-gnueabihf@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-linux-arm64-gnu@1.10.1':
|
||||
'@swc/core-linux-arm64-gnu@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-linux-arm64-musl@1.10.1':
|
||||
'@swc/core-linux-arm64-musl@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-linux-x64-gnu@1.10.1':
|
||||
'@swc/core-linux-x64-gnu@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-linux-x64-musl@1.10.1':
|
||||
'@swc/core-linux-x64-musl@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-win32-arm64-msvc@1.10.1':
|
||||
'@swc/core-win32-arm64-msvc@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-win32-ia32-msvc@1.10.1':
|
||||
'@swc/core-win32-ia32-msvc@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core-win32-x64-msvc@1.10.1':
|
||||
'@swc/core-win32-x64-msvc@1.10.2':
|
||||
optional: true
|
||||
|
||||
'@swc/core@1.10.1':
|
||||
'@swc/core@1.10.2':
|
||||
dependencies:
|
||||
'@swc/counter': 0.1.3
|
||||
'@swc/types': 0.1.17
|
||||
optionalDependencies:
|
||||
'@swc/core-darwin-arm64': 1.10.1
|
||||
'@swc/core-darwin-x64': 1.10.1
|
||||
'@swc/core-linux-arm-gnueabihf': 1.10.1
|
||||
'@swc/core-linux-arm64-gnu': 1.10.1
|
||||
'@swc/core-linux-arm64-musl': 1.10.1
|
||||
'@swc/core-linux-x64-gnu': 1.10.1
|
||||
'@swc/core-linux-x64-musl': 1.10.1
|
||||
'@swc/core-win32-arm64-msvc': 1.10.1
|
||||
'@swc/core-win32-ia32-msvc': 1.10.1
|
||||
'@swc/core-win32-x64-msvc': 1.10.1
|
||||
'@swc/core-darwin-arm64': 1.10.2
|
||||
'@swc/core-darwin-x64': 1.10.2
|
||||
'@swc/core-linux-arm-gnueabihf': 1.10.2
|
||||
'@swc/core-linux-arm64-gnu': 1.10.2
|
||||
'@swc/core-linux-arm64-musl': 1.10.2
|
||||
'@swc/core-linux-x64-gnu': 1.10.2
|
||||
'@swc/core-linux-x64-musl': 1.10.2
|
||||
'@swc/core-win32-arm64-msvc': 1.10.2
|
||||
'@swc/core-win32-ia32-msvc': 1.10.2
|
||||
'@swc/core-win32-x64-msvc': 1.10.2
|
||||
|
||||
'@swc/counter@0.1.3': {}
|
||||
|
||||
|
@ -9668,13 +9668,13 @@ snapshots:
|
|||
optionalDependencies:
|
||||
typescript: 5.7.2
|
||||
|
||||
create-jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
create-jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
dependencies:
|
||||
'@jest/types': 29.6.3
|
||||
chalk: 4.1.2
|
||||
exit: 0.1.2
|
||||
graceful-fs: 4.2.11
|
||||
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-util: 29.7.0
|
||||
prompts: 2.4.2
|
||||
transitivePeerDependencies:
|
||||
|
@ -10094,13 +10094,13 @@ snapshots:
|
|||
dependencies:
|
||||
eslint: 8.57.1
|
||||
|
||||
eslint-plugin-jest@28.10.0(@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
|
||||
eslint-plugin-jest@28.10.0(@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
|
||||
dependencies:
|
||||
'@typescript-eslint/utils': 8.18.2(eslint@8.57.1)(typescript@5.7.2)
|
||||
eslint: 8.57.1
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
@ -11133,16 +11133,16 @@ snapshots:
|
|||
- babel-plugin-macros
|
||||
- supports-color
|
||||
|
||||
jest-cli@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
jest-cli@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
dependencies:
|
||||
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
'@jest/test-result': 29.7.0
|
||||
'@jest/types': 29.6.3
|
||||
chalk: 4.1.2
|
||||
create-jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
create-jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
exit: 0.1.2
|
||||
import-local: 3.2.0
|
||||
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-util: 29.7.0
|
||||
jest-validate: 29.7.0
|
||||
yargs: 17.7.2
|
||||
|
@ -11152,7 +11152,7 @@ snapshots:
|
|||
- supports-color
|
||||
- ts-node
|
||||
|
||||
jest-config@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
jest-config@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
'@jest/test-sequencer': 29.7.0
|
||||
|
@ -11178,7 +11178,7 @@ snapshots:
|
|||
strip-json-comments: 3.1.1
|
||||
optionalDependencies:
|
||||
'@types/node': 20.17.10
|
||||
ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)
|
||||
ts-node: 10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)
|
||||
transitivePeerDependencies:
|
||||
- babel-plugin-macros
|
||||
- supports-color
|
||||
|
@ -11211,12 +11211,12 @@ snapshots:
|
|||
jest-mock: 29.7.0
|
||||
jest-util: 29.7.0
|
||||
|
||||
jest-extended@4.0.2(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))):
|
||||
jest-extended@4.0.2(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))):
|
||||
dependencies:
|
||||
jest-diff: 29.7.0
|
||||
jest-get-type: 29.6.3
|
||||
optionalDependencies:
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
|
||||
jest-get-type@29.6.3: {}
|
||||
|
||||
|
@ -11267,9 +11267,9 @@ snapshots:
|
|||
slash: 3.0.0
|
||||
stack-utils: 2.0.6
|
||||
|
||||
jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
|
||||
jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
|
||||
dependencies:
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
ts-essentials: 10.0.4(typescript@5.7.2)
|
||||
typescript: 5.7.2
|
||||
|
||||
|
@ -11418,12 +11418,12 @@ snapshots:
|
|||
merge-stream: 2.0.0
|
||||
supports-color: 8.1.1
|
||||
|
||||
jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)):
|
||||
dependencies:
|
||||
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
'@jest/types': 29.6.3
|
||||
import-local: 3.2.0
|
||||
jest-cli: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-cli: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- babel-plugin-macros
|
||||
|
@ -13340,12 +13340,12 @@ snapshots:
|
|||
optionalDependencies:
|
||||
typescript: 5.7.2
|
||||
|
||||
ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
|
||||
ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
|
||||
dependencies:
|
||||
bs-logger: 0.2.6
|
||||
ejs: 3.1.10
|
||||
fast-json-stable-stringify: 2.1.0
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2))
|
||||
jest-util: 29.7.0
|
||||
json5: 2.2.3
|
||||
lodash.memoize: 4.1.2
|
||||
|
@ -13359,7 +13359,7 @@ snapshots:
|
|||
'@jest/types': 29.6.3
|
||||
babel-jest: 29.7.0(@babel/core@7.26.0)
|
||||
|
||||
ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2):
|
||||
ts-node@10.9.2(@swc/core@1.10.2)(@types/node@20.17.10)(typescript@5.7.2):
|
||||
dependencies:
|
||||
'@cspotcode/source-map-support': 0.8.1
|
||||
'@tsconfig/node10': 1.0.11
|
||||
|
@ -13377,7 +13377,7 @@ snapshots:
|
|||
v8-compile-cache-lib: 3.0.1
|
||||
yn: 3.1.1
|
||||
optionalDependencies:
|
||||
'@swc/core': 1.10.1
|
||||
'@swc/core': 1.10.2
|
||||
|
||||
tsconfig-paths@3.15.0:
|
||||
dependencies:
|
||||
|
|
Loading…
Reference in a new issue