mirror of
https://github.com/docker/bake-action.git
synced 2026-05-02 12:44:12 +02:00
Merge pull request #416 from crazy-max/refactor-git-context
refactor: use new gitContext for bake source resolution
This commit is contained in:
@@ -445,6 +445,31 @@ jobs:
|
||||
-
|
||||
name: Build
|
||||
uses: ./
|
||||
with:
|
||||
files: |
|
||||
./test/config.hcl
|
||||
|
||||
git-context-query:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
|
||||
with:
|
||||
version: v0.33.0
|
||||
driver-opts: |
|
||||
image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }}
|
||||
-
|
||||
name: Build
|
||||
uses: ./
|
||||
with:
|
||||
files: |
|
||||
./test/config.hcl
|
||||
env:
|
||||
BUILDX_SEND_GIT_QUERY_AS_INPUT: true
|
||||
|
||||
git-context-and-local:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -468,6 +493,7 @@ jobs:
|
||||
uses: ./
|
||||
with:
|
||||
files: |
|
||||
./test/config.hcl
|
||||
cwd://${{ steps.meta.outputs.bake-file }}
|
||||
|
||||
multi-output:
|
||||
|
||||
@@ -4,6 +4,7 @@ import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
|
||||
import {Bake} from '@docker/actions-toolkit/lib/buildx/bake.js';
|
||||
import {Build} from '@docker/actions-toolkit/lib/buildx/build.js';
|
||||
import {Builder} from '@docker/actions-toolkit/lib/buildx/builder.js';
|
||||
import {Buildx} from '@docker/actions-toolkit/lib/buildx/buildx.js';
|
||||
import {Docker} from '@docker/actions-toolkit/lib/docker/docker.js';
|
||||
@@ -39,6 +40,55 @@ vi.spyOn(Bake.prototype, 'getDefinition').mockImplementation(async (): Promise<B
|
||||
return <BakeDefinition>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'bake-def.json'), {encoding: 'utf-8'}).trim());
|
||||
});
|
||||
|
||||
describe('getInputs', () => {
|
||||
const originalEnv = process.env;
|
||||
|
||||
beforeEach(() => {
|
||||
process.env = Object.keys(process.env).reduce((object, key) => {
|
||||
if (!key.startsWith('INPUT_')) {
|
||||
object[key] = process.env[key];
|
||||
}
|
||||
return object;
|
||||
}, {});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
process.env = originalEnv;
|
||||
});
|
||||
|
||||
function setRequiredBooleanInputs(): void {
|
||||
setInput('no-cache', 'false');
|
||||
setInput('pull', 'false');
|
||||
setInput('load', 'false');
|
||||
setInput('push', 'false');
|
||||
}
|
||||
|
||||
test('uses Build git context when source input is empty', async () => {
|
||||
const gitContext = 'https://github.com/docker/bake-action.git?ref=refs/heads/master&checksum=0123456789abcdef';
|
||||
const gitContextSpy = vi.spyOn(Build.prototype, 'gitContext').mockResolvedValue(gitContext);
|
||||
setRequiredBooleanInputs();
|
||||
const inputs = await context.getInputs();
|
||||
expect(inputs.source).toEqual({
|
||||
remoteRef: gitContext
|
||||
});
|
||||
expect(gitContextSpy).toHaveBeenCalledTimes(1);
|
||||
gitContextSpy.mockRestore();
|
||||
});
|
||||
|
||||
test('renders defaultContext source templates from Build git context', async () => {
|
||||
const gitContext = 'https://github.com/docker/bake-action.git#refs/heads/master';
|
||||
const gitContextSpy = vi.spyOn(Build.prototype, 'gitContext').mockResolvedValue(gitContext);
|
||||
setRequiredBooleanInputs();
|
||||
setInput('source', '{{defaultContext}}:subdir');
|
||||
const inputs = await context.getInputs();
|
||||
expect(inputs.source).toEqual({
|
||||
remoteRef: `${gitContext}:subdir`
|
||||
});
|
||||
expect(gitContextSpy).toHaveBeenCalledTimes(1);
|
||||
gitContextSpy.mockRestore();
|
||||
});
|
||||
});
|
||||
|
||||
describe('getArgs', () => {
|
||||
const originalEnv = process.env;
|
||||
beforeEach(() => {
|
||||
@@ -343,6 +393,54 @@ describe('getArgs', () => {
|
||||
['BUILDX_NO_DEFAULT_ATTESTATIONS', '1']
|
||||
])
|
||||
],
|
||||
[
|
||||
15,
|
||||
'0.29.0',
|
||||
new Map<string, string>([
|
||||
['load', 'false'],
|
||||
['no-cache', 'false'],
|
||||
['push', 'false'],
|
||||
['pull', 'false'],
|
||||
['files', './foo.hcl'],
|
||||
]),
|
||||
[
|
||||
'bake',
|
||||
'https://github.com/docker/bake-action.git?ref=refs/heads/master',
|
||||
'--allow', 'fs=*',
|
||||
'--file', './foo.hcl',
|
||||
'--metadata-file', metadataJson,
|
||||
'--set', `lint.attest=type=provenance,mode=min,inline-only=true,builder-id=https://github.com/docker/bake-action/actions/runs/123456789/attempts/1`,
|
||||
'--set', `validate-docs.attest=type=provenance,mode=min,inline-only=true,builder-id=https://github.com/docker/bake-action/actions/runs/123456789/attempts/1`,
|
||||
'--set', `validate-vendor.attest=type=provenance,mode=min,inline-only=true,builder-id=https://github.com/docker/bake-action/actions/runs/123456789/attempts/1`
|
||||
],
|
||||
new Map<string, string>([
|
||||
['BUILDX_SEND_GIT_QUERY_AS_INPUT', 'true']
|
||||
])
|
||||
],
|
||||
[
|
||||
16,
|
||||
'0.28.0',
|
||||
new Map<string, string>([
|
||||
['load', 'false'],
|
||||
['no-cache', 'false'],
|
||||
['push', 'false'],
|
||||
['pull', 'false'],
|
||||
['files', './foo.hcl'],
|
||||
]),
|
||||
[
|
||||
'bake',
|
||||
'https://github.com/docker/bake-action.git#refs/heads/master',
|
||||
'--allow', 'fs=*',
|
||||
'--file', './foo.hcl',
|
||||
'--metadata-file', metadataJson,
|
||||
'--set', `lint.attest=type=provenance,mode=min,inline-only=true,builder-id=https://github.com/docker/bake-action/actions/runs/123456789/attempts/1`,
|
||||
'--set', `validate-docs.attest=type=provenance,mode=min,inline-only=true,builder-id=https://github.com/docker/bake-action/actions/runs/123456789/attempts/1`,
|
||||
'--set', `validate-vendor.attest=type=provenance,mode=min,inline-only=true,builder-id=https://github.com/docker/bake-action/actions/runs/123456789/attempts/1`
|
||||
],
|
||||
new Map<string, string>([
|
||||
['BUILDX_SEND_GIT_QUERY_AS_INPUT', 'true']
|
||||
])
|
||||
],
|
||||
])(
|
||||
'[%d] given %o with %o as inputs, returns %o',
|
||||
async (num: number, buildxVersion: string, inputs: Map<string, string>, expected: Array<string>, envs: Map<string, string> | undefined) => {
|
||||
|
||||
+28
-15
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -24,7 +24,7 @@
|
||||
"packageManager": "yarn@4.9.2",
|
||||
"dependencies": {
|
||||
"@actions/core": "^3.0.0",
|
||||
"@docker/actions-toolkit": "^0.79.0",
|
||||
"@docker/actions-toolkit": "^0.87.0",
|
||||
"handlebars": "^4.7.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
+5
-5
@@ -4,7 +4,6 @@ import * as handlebars from 'handlebars';
|
||||
|
||||
import {Bake} from '@docker/actions-toolkit/lib/buildx/bake.js';
|
||||
import {Build} from '@docker/actions-toolkit/lib/buildx/build.js';
|
||||
import {Context} from '@docker/actions-toolkit/lib/context.js';
|
||||
import {GitHub} from '@docker/actions-toolkit/lib/github/github.js';
|
||||
import {Toolkit} from '@docker/actions-toolkit/lib/toolkit.js';
|
||||
import {Util} from '@docker/actions-toolkit/lib/util.js';
|
||||
@@ -46,7 +45,7 @@ export async function getInputs(): Promise<Inputs> {
|
||||
push: core.getBooleanInput('push'),
|
||||
sbom: core.getInput('sbom'),
|
||||
set: Util.getInputList('set', {ignoreComma: true, quote: false}),
|
||||
source: getBakeContext(core.getInput('source')),
|
||||
source: await getBakeContext(core.getInput('source')),
|
||||
targets: Util.getInputList('targets'),
|
||||
'github-token': core.getInput('github-token')
|
||||
};
|
||||
@@ -139,12 +138,13 @@ async function getCommonArgs(inputs: Inputs): Promise<Array<string>> {
|
||||
return args;
|
||||
}
|
||||
|
||||
function getBakeContext(sourceInput: string): BakeContext {
|
||||
async function getBakeContext(sourceInput: string): Promise<BakeContext> {
|
||||
const defaultContext = await new Build().gitContext();
|
||||
let bakeContext = handlebars.compile(sourceInput)({
|
||||
defaultContext: Context.gitContext()
|
||||
defaultContext: defaultContext
|
||||
});
|
||||
if (!bakeContext) {
|
||||
bakeContext = Context.gitContext();
|
||||
bakeContext = defaultContext;
|
||||
}
|
||||
if (Util.isValidRef(bakeContext)) {
|
||||
return {
|
||||
|
||||
+9
-4
@@ -6,21 +6,26 @@ group "release" {
|
||||
targets = ["db", "app-plus"]
|
||||
}
|
||||
|
||||
# Special target: https://github.com/docker/metadata-action#bake-definition
|
||||
target "docker-metadata-action" {
|
||||
tags = [
|
||||
"localhost:5000/name/app:latest",
|
||||
"localhost:5000/name/app:1.0.0"
|
||||
]
|
||||
}
|
||||
|
||||
target "db" {
|
||||
context = "./test"
|
||||
tags = ["docker.io/tonistiigi/db"]
|
||||
}
|
||||
|
||||
target "app" {
|
||||
inherits = ["docker-metadata-action"]
|
||||
context = "./test"
|
||||
dockerfile = "Dockerfile"
|
||||
args = {
|
||||
name = "foo"
|
||||
}
|
||||
tags = [
|
||||
"localhost:5000/name/app:latest",
|
||||
"localhost:5000/name/app:1.0.0"
|
||||
]
|
||||
}
|
||||
|
||||
target "cross" {
|
||||
|
||||
@@ -12,9 +12,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@actions/artifact@npm:^6.2.0":
|
||||
version: 6.2.0
|
||||
resolution: "@actions/artifact@npm:6.2.0"
|
||||
"@actions/artifact@npm:^6.2.1":
|
||||
version: 6.2.1
|
||||
resolution: "@actions/artifact@npm:6.2.1"
|
||||
dependencies:
|
||||
"@actions/core": "npm:^3.0.0"
|
||||
"@actions/github": "npm:^9.0.0"
|
||||
@@ -30,7 +30,7 @@ __metadata:
|
||||
archiver: "npm:^7.0.1"
|
||||
jwt-decode: "npm:^4.0.0"
|
||||
unzip-stream: "npm:^0.3.1"
|
||||
checksum: 10/fa931b1222c0e08bca85d3cb18c2cd5ae912cce3f09ab3acd4ec3486e864337d65177089a14aef124d9696b9dd5309b273a9251e230172c79c2444af2c43443e
|
||||
checksum: 10/1fad9b079ee2ab07f964b93bf7b4fc594d115199219baed74ac3bf2a8675e0b7ea57252eccbcdaaaa8fc8375742d23585cbd054f3b2d029c091817e0f257ce93
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -367,11 +367,11 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docker/actions-toolkit@npm:^0.79.0":
|
||||
version: 0.79.0
|
||||
resolution: "@docker/actions-toolkit@npm:0.79.0"
|
||||
"@docker/actions-toolkit@npm:^0.87.0":
|
||||
version: 0.87.0
|
||||
resolution: "@docker/actions-toolkit@npm:0.87.0"
|
||||
dependencies:
|
||||
"@actions/artifact": "npm:^6.2.0"
|
||||
"@actions/artifact": "npm:^6.2.1"
|
||||
"@actions/cache": "npm:^6.0.0"
|
||||
"@actions/core": "npm:^3.0.0"
|
||||
"@actions/exec": "npm:^3.0.0"
|
||||
@@ -380,20 +380,20 @@ __metadata:
|
||||
"@actions/io": "npm:^3.0.2"
|
||||
"@actions/tool-cache": "npm:^4.0.0"
|
||||
"@sigstore/bundle": "npm:^4.0.0"
|
||||
"@sigstore/sign": "npm:^4.1.0"
|
||||
"@sigstore/tuf": "npm:^4.0.1"
|
||||
"@sigstore/sign": "npm:^4.1.1"
|
||||
"@sigstore/tuf": "npm:^4.0.2"
|
||||
"@sigstore/verify": "npm:^3.1.0"
|
||||
async-retry: "npm:^1.3.3"
|
||||
csv-parse: "npm:^6.1.0"
|
||||
csv-parse: "npm:^6.2.1"
|
||||
gunzip-maybe: "npm:^1.4.2"
|
||||
handlebars: "npm:^4.7.8"
|
||||
handlebars: "npm:^4.7.9"
|
||||
he: "npm:^1.2.0"
|
||||
js-yaml: "npm:^4.1.1"
|
||||
jwt-decode: "npm:^4.0.0"
|
||||
semver: "npm:^7.7.4"
|
||||
tar-stream: "npm:^3.1.7"
|
||||
tmp: "npm:^0.2.5"
|
||||
checksum: 10/d64849ba49b2b59e2e93237a70be03fd7c43b1f7f01bac3f7557616ba5f59be785cb12a273bbb6a71c1e0d959f1bc6c673111b587c57bd2d6da105dcc500921a
|
||||
checksum: 10/439d0763a394ecd0632cff10c6b88400f6f519612b9b2dedc032dc7e427e9628af59f1fc153c37b0c685a2bdef8bc2a901aa7c743080bc4ab312276e447dbf55
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -676,6 +676,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@gar/promise-retry@npm:^1.0.2":
|
||||
version: 1.0.3
|
||||
resolution: "@gar/promise-retry@npm:1.0.3"
|
||||
checksum: 10/0d13ea3bb1025755e055648f6e290d2a7e0c87affaf552218f09f66b3fcd9ea9d5c9cc5fe2aa6e285e1530437768e40f9448fe9a86f4f3417b216dcf488d3d1a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@humanfs/core@npm:^0.19.1":
|
||||
version: 0.19.1
|
||||
resolution: "@humanfs/core@npm:0.19.1"
|
||||
@@ -812,6 +819,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@npmcli/redact@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "@npmcli/redact@npm:4.0.0"
|
||||
checksum: 10/5d52df2b5267f4369c97a2b2f7c427e3d7aa4b6a83e7a1b522e196f6e9d50024c620bd0cb2052067c74d1aaa0c330d9bc04e1d335bfb46180e705bb33423e74c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-token@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "@octokit/auth-token@npm:6.0.0"
|
||||
@@ -1210,6 +1224,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sigstore/core@npm:^3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "@sigstore/core@npm:3.2.0"
|
||||
checksum: 10/2425d20297d57a5f5a62f0e6c2f4280818015ea00b3defebdac63f13c7d01db988602c316c16e374ba091c3649dd9a22ae8c9ba3ac165f736b0503164c5da5f5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sigstore/protobuf-specs@npm:^0.5.0":
|
||||
version: 0.5.0
|
||||
resolution: "@sigstore/protobuf-specs@npm:0.5.0"
|
||||
@@ -1217,27 +1238,27 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sigstore/sign@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "@sigstore/sign@npm:4.1.0"
|
||||
"@sigstore/sign@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "@sigstore/sign@npm:4.1.1"
|
||||
dependencies:
|
||||
"@gar/promise-retry": "npm:^1.0.2"
|
||||
"@sigstore/bundle": "npm:^4.0.0"
|
||||
"@sigstore/core": "npm:^3.1.0"
|
||||
"@sigstore/core": "npm:^3.2.0"
|
||||
"@sigstore/protobuf-specs": "npm:^0.5.0"
|
||||
make-fetch-happen: "npm:^15.0.3"
|
||||
make-fetch-happen: "npm:^15.0.4"
|
||||
proc-log: "npm:^6.1.0"
|
||||
promise-retry: "npm:^2.0.1"
|
||||
checksum: 10/e5441d4cacf0f203f329e96bb7a3ca77682cfdf90d6448ad368344056fd8d55c01742e2b636545d55364490a87988f767f2b23168b2d9cc52ef3d8fe9e9496aa
|
||||
checksum: 10/c9424813ed83ae26111dd3a190dbfd776901cfc245ebb9aa68e133a7ffcbf8fc053f01d999a451e44805a291921ba4d2dfe80e3fd41b20cd5becd26aae5f5e7c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sigstore/tuf@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "@sigstore/tuf@npm:4.0.1"
|
||||
"@sigstore/tuf@npm:^4.0.2":
|
||||
version: 4.0.2
|
||||
resolution: "@sigstore/tuf@npm:4.0.2"
|
||||
dependencies:
|
||||
"@sigstore/protobuf-specs": "npm:^0.5.0"
|
||||
tuf-js: "npm:^4.1.0"
|
||||
checksum: 10/1a9725aa95eba55badf24442fe8a71c6d68f8b7d17a6b2a5e4b5590117f0181881b3485cfa57ea375b7c3a38421dbffdfcbe86e6623d903e17e3a8359837e268
|
||||
checksum: 10/14882b8e71be4185ec417744b97a47392a50da00aafd4207a46bb74b40aa019ebf22d928052fd2d31a8da0da1efe7ebebac5a70898b31a74239a1ada997be754
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2055,10 +2076,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"csv-parse@npm:^6.1.0":
|
||||
version: 6.1.0
|
||||
resolution: "csv-parse@npm:6.1.0"
|
||||
checksum: 10/607d92611435fdfb7631242644a2582bfb218fad8c6c6d6416db31647c2e63a3110f16c9837de6baaa3edf318212765cfc6e72d672d99690fd7f565d6c93d6f4
|
||||
"csv-parse@npm:^6.2.1":
|
||||
version: 6.2.1
|
||||
resolution: "csv-parse@npm:6.2.1"
|
||||
checksum: 10/7fbde1225c6df6aaea01a202934e1f15ce16ed55e544ead0d066b0c4dc9ae1a2fc881b412889cbf115cd74cbf14ea17388b394e8a31e05cb412dd7dc6114bebd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2098,7 +2119,7 @@ __metadata:
|
||||
resolution: "docker-buildx-bake@workspace:."
|
||||
dependencies:
|
||||
"@actions/core": "npm:^3.0.0"
|
||||
"@docker/actions-toolkit": "npm:^0.79.0"
|
||||
"@docker/actions-toolkit": "npm:^0.87.0"
|
||||
"@eslint/js": "npm:^9.39.3"
|
||||
"@types/node": "npm:^24.11.0"
|
||||
"@typescript-eslint/eslint-plugin": "npm:^8.56.1"
|
||||
@@ -2708,24 +2729,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"handlebars@npm:^4.7.8":
|
||||
version: 4.7.8
|
||||
resolution: "handlebars@npm:4.7.8"
|
||||
dependencies:
|
||||
minimist: "npm:^1.2.5"
|
||||
neo-async: "npm:^2.6.2"
|
||||
source-map: "npm:^0.6.1"
|
||||
uglify-js: "npm:^3.1.4"
|
||||
wordwrap: "npm:^1.0.0"
|
||||
dependenciesMeta:
|
||||
uglify-js:
|
||||
optional: true
|
||||
bin:
|
||||
handlebars: bin/handlebars
|
||||
checksum: 10/bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"handlebars@npm:^4.7.9":
|
||||
version: 4.7.9
|
||||
resolution: "handlebars@npm:4.7.9"
|
||||
@@ -3197,7 +3200,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"make-fetch-happen@npm:^15.0.1, make-fetch-happen@npm:^15.0.3":
|
||||
"make-fetch-happen@npm:^15.0.1":
|
||||
version: 15.0.4
|
||||
resolution: "make-fetch-happen@npm:15.0.4"
|
||||
dependencies:
|
||||
@@ -3216,6 +3219,26 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"make-fetch-happen@npm:^15.0.4":
|
||||
version: 15.0.5
|
||||
resolution: "make-fetch-happen@npm:15.0.5"
|
||||
dependencies:
|
||||
"@gar/promise-retry": "npm:^1.0.0"
|
||||
"@npmcli/agent": "npm:^4.0.0"
|
||||
"@npmcli/redact": "npm:^4.0.0"
|
||||
cacache: "npm:^20.0.1"
|
||||
http-cache-semantics: "npm:^4.1.1"
|
||||
minipass: "npm:^7.0.2"
|
||||
minipass-fetch: "npm:^5.0.0"
|
||||
minipass-flush: "npm:^1.0.5"
|
||||
minipass-pipeline: "npm:^1.2.4"
|
||||
negotiator: "npm:^1.0.0"
|
||||
proc-log: "npm:^6.0.0"
|
||||
ssri: "npm:^13.0.0"
|
||||
checksum: 10/d2649effb06c00cb2b266057cb1c8c1e99cfc8d1378e7d9c26cc8f00be41bc63d59b77a5576ed28f8105acc57fb16220b64217f8d3a6a066a594c004aa163afa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minimatch@npm:^10.1.1":
|
||||
version: 10.1.1
|
||||
resolution: "minimatch@npm:10.1.1"
|
||||
|
||||
Reference in New Issue
Block a user