mirror of https://github.com/renovatebot/renovate
306 lines
9.2 KiB
TypeScript
306 lines
9.2 KiB
TypeScript
import { codeBlock } from 'common-tags';
|
|
import { parse } from './parser';
|
|
import { extract } from './rules';
|
|
|
|
describe('modules/manager/bazel/parser', () => {
|
|
it('parses rules input', () => {
|
|
const input = codeBlock`
|
|
go_repository(name = "foo")
|
|
maybe(go_repository, name = "bar", deps = ["baz", "qux"])
|
|
_go_repository(name = "quux")
|
|
maybe(_go_repository, name = "corge", deps = ["grault", "garply"])
|
|
`;
|
|
|
|
const res = parse(input);
|
|
|
|
expect(res).toEqual([
|
|
{
|
|
type: 'record',
|
|
value: 'go_repository(name = "foo")',
|
|
offset: 0,
|
|
children: {
|
|
rule: { type: 'string', value: 'go_repository', offset: 0 },
|
|
name: { type: 'string', value: 'foo', offset: 22 },
|
|
},
|
|
},
|
|
{
|
|
type: 'record',
|
|
value: 'maybe(go_repository, name = "bar", deps = ["baz", "qux"])',
|
|
offset: 28,
|
|
children: {
|
|
rule: { type: 'string', value: 'go_repository', offset: 34 },
|
|
name: { type: 'string', value: 'bar', offset: 57 },
|
|
deps: {
|
|
type: 'array',
|
|
value: '["baz", "qux"]',
|
|
offset: 70,
|
|
children: [
|
|
{ type: 'string', value: 'baz', offset: 72 },
|
|
{ type: 'string', value: 'qux', offset: 79 },
|
|
],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
type: 'record',
|
|
value: '_go_repository(name = "quux")',
|
|
offset: 86,
|
|
children: {
|
|
rule: { type: 'string', value: '_go_repository', offset: 86 },
|
|
name: { type: 'string', value: 'quux', offset: 109 },
|
|
},
|
|
},
|
|
{
|
|
type: 'record',
|
|
value:
|
|
'maybe(_go_repository, name = "corge", deps = ["grault", "garply"])',
|
|
offset: 116,
|
|
children: {
|
|
rule: { type: 'string', value: '_go_repository', offset: 122 },
|
|
name: { type: 'string', value: 'corge', offset: 146 },
|
|
deps: {
|
|
type: 'array',
|
|
value: '["grault", "garply"]',
|
|
offset: 161,
|
|
children: [
|
|
{ type: 'string', value: 'grault', offset: 163 },
|
|
{ type: 'string', value: 'garply', offset: 173 },
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]);
|
|
expect(res?.map(extract)).toMatchObject([
|
|
{ rule: 'go_repository', name: 'foo' },
|
|
{ rule: 'go_repository', name: 'bar', deps: ['baz', 'qux'] },
|
|
{ rule: '_go_repository', name: 'quux' },
|
|
{ rule: '_go_repository', name: 'corge', deps: ['grault', 'garply'] },
|
|
]);
|
|
});
|
|
|
|
it('parses multiple archives', () => {
|
|
const input = codeBlock`
|
|
http_archive(
|
|
name = "aspect_rules_js",
|
|
sha256 = "db9f446752fe4100320cf8487e8fd476b9af0adf6b99b601bcfd70b289bb0598",
|
|
strip_prefix = "rules_js-1.1.2",
|
|
url = "https://github.com/aspect-build/rules_js/archive/refs/tags/v1.1.2.tar.gz",
|
|
)
|
|
http_archive(
|
|
name = "rules_nodejs",
|
|
sha256 = "5aef09ed3279aa01d5c928e3beb248f9ad32dde6aafe6373a8c994c3ce643064",
|
|
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.3/rules_nodejs-core-5.5.3.tar.gz"],
|
|
)
|
|
`;
|
|
|
|
const res = parse(input);
|
|
|
|
expect(res).toMatchObject([
|
|
{
|
|
children: {
|
|
rule: { value: 'http_archive' },
|
|
name: { value: 'aspect_rules_js' },
|
|
sha256: {
|
|
value:
|
|
'db9f446752fe4100320cf8487e8fd476b9af0adf6b99b601bcfd70b289bb0598',
|
|
},
|
|
strip_prefix: { value: 'rules_js-1.1.2' },
|
|
url: {
|
|
value:
|
|
'https://github.com/aspect-build/rules_js/archive/refs/tags/v1.1.2.tar.gz',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
children: {
|
|
rule: { value: 'http_archive' },
|
|
name: { value: 'rules_nodejs' },
|
|
sha256: {
|
|
value:
|
|
'5aef09ed3279aa01d5c928e3beb248f9ad32dde6aafe6373a8c994c3ce643064',
|
|
},
|
|
urls: {
|
|
type: 'array',
|
|
children: [
|
|
{
|
|
value:
|
|
'https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.3/rules_nodejs-core-5.5.3.tar.gz',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]);
|
|
|
|
expect(res?.map(extract)).toMatchObject([
|
|
{
|
|
rule: 'http_archive',
|
|
name: 'aspect_rules_js',
|
|
sha256:
|
|
'db9f446752fe4100320cf8487e8fd476b9af0adf6b99b601bcfd70b289bb0598',
|
|
strip_prefix: 'rules_js-1.1.2',
|
|
url: 'https://github.com/aspect-build/rules_js/archive/refs/tags/v1.1.2.tar.gz',
|
|
},
|
|
{
|
|
rule: 'http_archive',
|
|
name: 'rules_nodejs',
|
|
sha256:
|
|
'5aef09ed3279aa01d5c928e3beb248f9ad32dde6aafe6373a8c994c3ce643064',
|
|
urls: [
|
|
'https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.3/rules_nodejs-core-5.5.3.tar.gz',
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('parses http_archive', () => {
|
|
const input = codeBlock`
|
|
http_archive(
|
|
name = "rules_nodejs",
|
|
sha256 = "5aef09ed3279aa01d5c928e3beb248f9ad32dde6aafe6373a8c994c3ce643064",
|
|
url = "https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.3/rules_nodejs-core-5.5.3.tar.gz",
|
|
)
|
|
`;
|
|
|
|
const res = parse(input);
|
|
|
|
expect(res).toMatchObject([
|
|
{
|
|
children: {
|
|
name: { value: 'rules_nodejs' },
|
|
rule: { value: 'http_archive' },
|
|
sha256: {
|
|
value:
|
|
'5aef09ed3279aa01d5c928e3beb248f9ad32dde6aafe6373a8c994c3ce643064',
|
|
},
|
|
url: {
|
|
value:
|
|
'https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.3/rules_nodejs-core-5.5.3.tar.gz',
|
|
},
|
|
},
|
|
},
|
|
]);
|
|
|
|
expect(res?.map(extract)).toMatchObject([
|
|
{
|
|
rule: 'http_archive',
|
|
name: 'rules_nodejs',
|
|
sha256:
|
|
'5aef09ed3279aa01d5c928e3beb248f9ad32dde6aafe6373a8c994c3ce643064',
|
|
url: 'https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.3/rules_nodejs-core-5.5.3.tar.gz',
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('parses http_archive with prefixes and multiple urls', () => {
|
|
const input = codeBlock`
|
|
http_archive(
|
|
name = "bazel_toolchains",
|
|
sha256 = "4b1468b254a572dbe134cc1fd7c6eab1618a72acd339749ea343bd8f55c3b7eb",
|
|
strip_prefix = "bazel-toolchains-d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4",
|
|
urls = [
|
|
"https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz",
|
|
"https://github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz",
|
|
],
|
|
)
|
|
`;
|
|
|
|
const res = parse(input);
|
|
|
|
expect(res).toMatchObject([
|
|
{
|
|
children: {
|
|
name: { value: 'bazel_toolchains' },
|
|
rule: { value: 'http_archive' },
|
|
sha256: {
|
|
value:
|
|
'4b1468b254a572dbe134cc1fd7c6eab1618a72acd339749ea343bd8f55c3b7eb',
|
|
},
|
|
strip_prefix: {
|
|
value: 'bazel-toolchains-d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4',
|
|
},
|
|
urls: {
|
|
children: [
|
|
{
|
|
value:
|
|
'https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz',
|
|
},
|
|
{
|
|
value:
|
|
'https://github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]);
|
|
|
|
expect(res?.map(extract)).toMatchObject([
|
|
{
|
|
name: 'bazel_toolchains',
|
|
rule: 'http_archive',
|
|
sha256:
|
|
'4b1468b254a572dbe134cc1fd7c6eab1618a72acd339749ea343bd8f55c3b7eb',
|
|
strip_prefix:
|
|
'bazel-toolchains-d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4',
|
|
urls: [
|
|
'https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz',
|
|
'https://github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz',
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('parses Maven', () => {
|
|
const input = codeBlock`
|
|
maven_install(
|
|
artifacts = [
|
|
"com.example1:foo:1.1.1",
|
|
maven.artifact(
|
|
group = "com.example2",
|
|
artifact = "bar",
|
|
version = "2.2.2",
|
|
),
|
|
maven.artifact(
|
|
"com.example3",
|
|
"baz",
|
|
"3.3.3",
|
|
neverlink = True
|
|
)
|
|
],
|
|
repositories = [
|
|
"https://example1.com/maven2",
|
|
"https://example2.com/maven2",
|
|
]
|
|
)
|
|
`;
|
|
|
|
const res = parse(input);
|
|
|
|
expect(res?.map(extract)).toEqual([
|
|
{
|
|
rule: 'maven_install',
|
|
artifacts: [
|
|
'com.example1:foo:1.1.1',
|
|
{
|
|
_function: 'maven.artifact',
|
|
group: 'com.example2',
|
|
artifact: 'bar',
|
|
version: '2.2.2',
|
|
},
|
|
{
|
|
_function: 'maven.artifact',
|
|
'0': 'com.example3',
|
|
'1': 'baz',
|
|
'2': '3.3.3',
|
|
},
|
|
],
|
|
repositories: [
|
|
'https://example1.com/maven2',
|
|
'https://example2.com/maven2',
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
});
|