diff --git a/avm-transpiler/.gitignore b/avm-transpiler/.gitignore index 212de442f4e5..5996127a04ec 100644 --- a/avm-transpiler/.gitignore +++ b/avm-transpiler/.gitignore @@ -1,2 +1,5 @@ /target -.DS_Store \ No newline at end of file +.DS_Store + +# Generated Cargo.toml from template +Cargo.toml diff --git a/avm-transpiler/Cargo.lock b/avm-transpiler/Cargo.lock index 1be6bbf4c3d1..b166268d7611 100644 --- a/avm-transpiler/Cargo.lock +++ b/avm-transpiler/Cargo.lock @@ -5,6 +5,7 @@ version = 4 [[package]] name = "acir" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acir_field", "base64 0.22.1", @@ -31,6 +32,7 @@ dependencies = [ [[package]] name = "acir_field" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "ark-bn254", "ark-ff", @@ -44,6 +46,7 @@ dependencies = [ [[package]] name = "acvm" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acir", "acvm_blackbox_solver", @@ -58,6 +61,7 @@ dependencies = [ [[package]] name = "acvm_blackbox_solver" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acir", "blake2", @@ -471,6 +475,7 @@ dependencies = [ [[package]] name = "bn254_blackbox_solver" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acir", "acvm_blackbox_solver", @@ -495,6 +500,7 @@ dependencies = [ [[package]] name = "brillig" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acir_field", "serde", @@ -503,6 +509,7 @@ dependencies = [ [[package]] name = "brillig_vm" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acir", "acvm_blackbox_solver", @@ -926,6 +933,7 @@ dependencies = [ [[package]] name = "fm" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "codespan-reporting", "iter-extended", @@ -1126,6 +1134,7 @@ checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "iter-extended" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" [[package]] name = "itertools" @@ -1228,6 +1237,7 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "noir_protobuf" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "color-eyre", "prost", @@ -1236,6 +1246,7 @@ dependencies = [ [[package]] name = "noirc_abi" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acvm", "iter-extended", @@ -1251,10 +1262,12 @@ dependencies = [ [[package]] name = "noirc_arena" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" [[package]] name = "noirc_errors" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acvm", "base64 0.22.1", @@ -1272,6 +1285,7 @@ dependencies = [ [[package]] name = "noirc_evaluator" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acvm", "bn254_blackbox_solver", @@ -1303,6 +1317,7 @@ dependencies = [ [[package]] name = "noirc_frontend" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acvm", "bn254_blackbox_solver", @@ -1331,6 +1346,7 @@ dependencies = [ [[package]] name = "noirc_printable_type" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "acvm", "iter-extended", @@ -1341,6 +1357,7 @@ dependencies = [ [[package]] name = "noirc_span" version = "1.0.0-beta.15" +source = "git+https://github.com/noir-lang/noir?tag=nightly-2025-11-10#89c2b2d0a5c8a60db85a7224398cd9ed0f010c4e" dependencies = [ "codespan", "serde", diff --git a/avm-transpiler/Cargo.toml b/avm-transpiler/Cargo.toml deleted file mode 100644 index dc421719a3a0..000000000000 --- a/avm-transpiler/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "avm-transpiler" -version = "0.1.0" -authors = ["The Aztec Team "] -edition = "2024" -license = "MIT OR Apache-2.0" - -[lib] -name = "avm_transpiler" -crate-type = ["staticlib", "rlib"] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -# local -acvm = { path = "../noir/noir-repo/acvm-repo/acvm", features = ["bn254"] } -noirc_errors = { path = "../noir/noir-repo/compiler/noirc_errors" } -noirc_abi = { path = "../noir/noir-repo/tooling/noirc_abi" } -noirc_evaluator = { path = "../noir/noir-repo/compiler/noirc_evaluator", features = ["bn254"] } -noirc_frontend = { path = "../noir/noir-repo/compiler/noirc_frontend", features = ["test_utils"] } - -# FFI -libc = "0.2" - -# external -base64 = "0.21" -env_logger = "0.11" -log = "0.4" -serde_json = "1.0" -serde = { version = "1.0.136", features = ["derive"] } -regex = "1.11.1" -fxhash = "0.2.1" -once_cell = "1.20.3" diff --git a/avm-transpiler/Cargo.toml.template b/avm-transpiler/Cargo.toml.template new file mode 100644 index 000000000000..83a0740e5a95 --- /dev/null +++ b/avm-transpiler/Cargo.toml.template @@ -0,0 +1,33 @@ +[package] +name = "avm-transpiler" +version = "0.1.0" +authors = ["The Aztec Team "] +edition = "2024" +license = "MIT OR Apache-2.0" + +[lib] +name = "avm_transpiler" +crate-type = ["staticlib", "rlib"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +# noir dependencies - dynamically generated from noir-repo-ref +acvm = { git = "{{NOIR_GIT_URL}}", {{NOIR_REF_TYPE}} = "{{NOIR_REF_VALUE}}", features = ["bn254"] } +noirc_errors = { git = "{{NOIR_GIT_URL}}", {{NOIR_REF_TYPE}} = "{{NOIR_REF_VALUE}}" } +noirc_abi = { git = "{{NOIR_GIT_URL}}", {{NOIR_REF_TYPE}} = "{{NOIR_REF_VALUE}}" } +noirc_evaluator = { git = "{{NOIR_GIT_URL}}", {{NOIR_REF_TYPE}} = "{{NOIR_REF_VALUE}}", features = ["bn254"] } +noirc_frontend = { git = "{{NOIR_GIT_URL}}", {{NOIR_REF_TYPE}} = "{{NOIR_REF_VALUE}}", features = ["test_utils"] } + +# FFI +libc = "0.2" + +# external +base64 = "0.21" +env_logger = "0.11" +log = "0.4" +serde_json = "1.0" +serde = { version = "1.0.136", features = ["derive"] } +regex = "1.11.1" +fxhash = "0.2.1" +once_cell = "1.20.3" diff --git a/avm-transpiler/bootstrap.sh b/avm-transpiler/bootstrap.sh index 1586db97712b..19a558425253 100755 --- a/avm-transpiler/bootstrap.sh +++ b/avm-transpiler/bootstrap.sh @@ -11,8 +11,55 @@ export SOURCE_DATE_EPOCH=0 export GIT_DIRTY=false export RUSTFLAGS="-Dwarnings" +# Generate Cargo.toml from template based on noir-repo-ref +function generate_cargo_toml { + local ref_content=$(head -n 1 ../noir/noir-repo-ref) + local noir_git_url + local noir_ref_type + local noir_ref_value + + # Detect if noir-repo-ref contains a URL (has ://) or is a simple tag/version + if [[ "$ref_content" == *"://"* ]]; then + # Unhappy path: Custom repository URL + if [[ "$ref_content" == *"#"* ]]; then + noir_git_url="${ref_content%#*}" + noir_ref_value="${ref_content##*#}" + # Determine if it's a branch or commit hash + if [[ "$noir_ref_value" =~ ^[0-9a-f]{40}$ ]]; then + noir_ref_type="rev" + else + noir_ref_type="branch" + fi + else + noir_git_url="$ref_content" + noir_ref_type="branch" + noir_ref_value="master" + fi + else + # Happy path: Official release tag + noir_git_url="https://github.com/noir-lang/noir" + noir_ref_type="tag" + noir_ref_value="$ref_content" + fi + + echo "Generating Cargo.toml from template..." + echo " Git URL: $noir_git_url" + echo " Ref type: $noir_ref_type" + echo " Ref value: $noir_ref_value" + + # Generate Cargo.toml from template using sed + sed -e "s|{{NOIR_GIT_URL}}|$noir_git_url|g" \ + -e "s|{{NOIR_REF_TYPE}}|$noir_ref_type|g" \ + -e "s|{{NOIR_REF_VALUE}}|$noir_ref_value|g" \ + Cargo.toml.template > Cargo.toml +} + function build_native { echo_header "avm-transpiler build_native" + + # Generate Cargo.toml from template before building + generate_cargo_toml + artifact=avm-transpiler-$hash.tar.gz if ! cache_download $artifact; then # Serialize cargo/rustup operations to avoid race conditions when running parallel builds @@ -33,6 +80,9 @@ function build_cross { local target=$1 echo_header "avm-transpiler build_cross $target" + # Generate Cargo.toml from template before building + generate_cargo_toml + cross_compile_artifact=avm-transpiler-cross-$target-$hash.tar.gz if ! cache_download $cross_compile_artifact; then # We build libraries to be linked by barretenberg diff --git a/bootstrap.sh b/bootstrap.sh index 6735f2cb0204..d3732822a7f3 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -16,11 +16,6 @@ export NUM_TXES=8 cmd=${1:-} [ -n "$cmd" ] && shift -if [ ! -v NOIR_HASH ] && [ "$cmd" != "clean" ]; then - export NOIR_HASH=$(./noir/bootstrap.sh hash) - [ -n "$NOIR_HASH" ] -fi - function encourage_dev_container { echo -e "${bold}${red}ERROR: Toolchain incompatibility. We encourage use of our dev container. See build-images/README.md.${reset}" } @@ -139,11 +134,9 @@ function install_hooks { set -euo pipefail (cd barretenberg/cpp && ./format.sh staged) ./yarn-project/precommit.sh -./noir-projects/precommit.sh ./yarn-project/constants/precommit.sh EOF chmod +x $hooks_dir/pre-commit - echo "(cd noir && ./postcheckout.sh \$@)" >$hooks_dir/post-checkout chmod +x $hooks_dir/post-checkout } @@ -169,7 +162,7 @@ function sort_by_cpus { function test_cmds { if [ "$#" -eq 0 ]; then # Ordered with longest running first, to ensure they get scheduled earliest. - set -- spartan yarn-project/end-to-end aztec-up yarn-project noir-projects boxes playground barretenberg l1-contracts noir docs + set -- spartan yarn-project/end-to-end aztec-up yarn-project noir-projects boxes playground barretenberg l1-contracts docs fi parallel -k --line-buffer './{}/bootstrap.sh test_cmds' ::: $@ | filter_test_cmds | sort_by_cpus } @@ -231,7 +224,6 @@ function build { # These projects are dependent on each other and must be built linearly. serial_projects=( - noir avm-transpiler barretenberg noir-projects @@ -363,14 +355,12 @@ function release { projects=( barretenberg/cpp barretenberg/ts - noir l1-contracts noir-projects/aztec-nr yarn-project boxes aztec-up playground - # docs # released as part of ci release-image ) if [ $(arch) == arm64 ]; then diff --git a/noir/.noir-repo.rebuild_patterns_tests b/noir/.noir-repo.rebuild_patterns_tests deleted file mode 100644 index d3ec0a33c158..000000000000 --- a/noir/.noir-repo.rebuild_patterns_tests +++ /dev/null @@ -1 +0,0 @@ -^test_programs/execution_success/ diff --git a/noir/README.md b/noir/README.md deleted file mode 100644 index 0f99c668527d..000000000000 --- a/noir/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Aztec's Build of Noir - -We subrepo [noir](https://github.com/noir-lang/noir) into the folder `noir-repo` during the build. -This folder contains dockerfiles and scripts for performing our custom build of noir for the monorepo. - -# Syncing with the main Noir repository - -In order to keep aztec-packages in step with the main Noir repository we need to periodically sync between them. - -Ideally there should be a one-way sync from Noir to aztec-packages, but occasionally, when the `bb` interface changes, -or if some integration test fails and the Noir bug is fixed locally, changes have to go both ways. - -## Syncing from Noir to aztec-packages - -During the build the Noir repository is cloned or updated according to the contents of the [noir-repo-ref](./noir-repo-ref) -file, which can be a tag, branch name or commit hash. The value can be overriden using the `NOIR_REPO_REF` environment variable, -for example to run the integration tests in aztec-packages against a yet-to-be-released branch of Noir. - -If the ref contains a branch, it's pulled with each build triggered by `bootstrap.sh`, but for repeatable builds it should -point at a tag instead or commit instead, which would be updated with a regular PR opened in aztec-packages, so we can run -the test suite before changes take effect. - -To start the sync run [this action](https://github.com/AztecProtocol/aztec-packages/actions/workflows/pull-noir.yml) manually (click the "Run Workflow" button in the top right). aztec-bot will then open a new PR which updates the reference. This will might merge conflicts with master which will need to be resolved. - -## Syncing from aztec-packages to Noir - -When syncing from aztec-packages to Noir it's important to check that the latest release of `bb` uses the same ACIR serialization format as the current master commit. This is because Noir uses a released version of barretenberg rather than being developed in sync with it, it's then not possible to sync if there's been serialization changes since the latest release. - -When we make changes in `noir-repo` and commit them, we can check out a branch and push them back to Noir, where a PR can be opened to merge them back -into an appropriate branch (could be `master` or some kind of integration branch). It is important to exclude the [fixup](./scripts/sync-in-fixup.sh) that the local checkout performs from the PR by running the [fixdown](./scripts/sync-out-fixup.sh) script. - -Syncing can be postponed by creating a few commits in `noir-repo`, but instead of opening a PR against Noir, creating a [git patch](https://git-scm.com/docs/git-format-patch) instead using, which is committed to aztec-packages and is applied to any subsequent checkout. A patch file can be made using the following command: - -```shell -./bootstrap.sh make-patch -``` - -After this `./noir-repo.patch` should have the changes committed on top of the latest checkout, and if we commit this file to `aztec-packages` then it is automatically applied by any subsequent checkouts of `noir-repo`. - -To start an automated sync run [this action](https://github.com/AztecProtocol/aztec-packages/actions/workflows/mirror-noir-subrepo.yml) manually (click the "Run Workflow" button in the top right). aztec-bot will then open a new PR in the `noir-lang/noir` repository which does the initial sync, this will have merge conflicts with master which will need to be resolved. diff --git a/noir/bootstrap.sh b/noir/bootstrap.sh index 5f441ab6ec07..ffb90ec92a1e 100755 --- a/noir/bootstrap.sh +++ b/noir/bootstrap.sh @@ -6,7 +6,6 @@ set -eou pipefail cmd=${1:-} [ -n "$cmd" ] && shift -# Must be in dependency order for releasing. export js_projects=" @noir-lang/types @noir-lang/noir_js @@ -16,100 +15,18 @@ export js_projects=" " export js_include=$(printf " --include %s" $js_projects) -# Update the noir-repo and compute hashes. -function noir_sync { - # Don't send anything to `stdout`, so as not to interfere with `test_cmds` and `hash`. - dump_fail "scripts/sync.sh init && scripts/sync.sh update" >&2 -} - -# Get the cache content hash. It should only be based on files committed to `aztec-packages` -# in order to be able to support using `AZTEC_CACHE_COMMIT` for historical queries. -function noir_content_hash { - # Currently we don't make a distinction between test and non-test hash - tests=${1:-0} - - # If there are changes in the noir-repo which aren't just due to the patch applied to it, - # then just disable the cache, unless the noir-repo is in an evolving feature branch. - noir_hash=$(cache_content_hash .rebuild_patterns) - - if [ "${AZTEC_CACHE_COMMIT:-HEAD}" != "HEAD" ]; then - # Ignore the current content of noir-repo, it doesn't support history anyway. - echo $noir_hash - else - cache_mode=$(scripts/sync.sh cache-mode) - case "$cache_mode" in - "noir") - echo $noir_hash - ;; - "noir-repo") - echo $(hash_str $noir_hash $(noir_repo_content_hash .noir-repo.rebuild_patterns .noir-repo.rebuild_patterns_tests)) - ;; - *) - echo $cache_mode - ;; - esac - fi -} - -if [ ! -v NOIR_HASH ] && [ "$cmd" != "clean" ]; then - noir_sync - export NOIR_HASH=$(noir_content_hash) -fi - -# Get the actual commit hash from the noir-repo-ref file -export GIT_COMMIT="$(git -C noir-repo rev-list --max-count 1 "$(cat noir-repo-ref)")-aztec" -export SOURCE_DATE_EPOCH=0 -export GIT_DIRTY=false -export RUSTFLAGS="-Dwarnings" - -# Calculate the content hash for caching, taking into account that `noir-repo` -# is not part of the `aztec-packages` repo itself, so the `git ls-tree` used -# by `cache_content_hash` would not take those files into account. -function noir_repo_content_hash { - echo $(REPO_PATH=./noir-repo AZTEC_CACHE_COMMIT=HEAD cache_content_hash $@) -} - -# Builds nargo, acvm and profiler binaries. -function build_native { - set -euo pipefail - local hash=$NOIR_HASH - - if ! dpkg -l pkg-config libssl-dev >/dev/null 2>&1; then - sudo apt update && sudo apt install -y pkg-config libssl-dev - fi - - if cache_download noir-$hash.tar.gz; then - return - fi - - cd noir-repo - parallel --tag --line-buffer --halt now,fail=1 ::: \ - "cargo fmt --all --check" \ - "cargo build --locked --release --target-dir target" \ - "cargo clippy --target-dir target/clippy --workspace --locked --release" - cd .. - cache_upload noir-$hash.tar.gz noir-repo/target/release/{nargo,acvm,noir-profiler} -} - -# Builds js packages. +# Builds TypeScript packages from local noir-repo clone (unhappy path). function build_packages { set -euo pipefail - local hash=$NOIR_HASH - - if cache_download noir-packages-$hash.tar.gz; then - cd noir-repo - npm_install_deps - return - fi cd noir-repo npm_install_deps - yarn workspaces foreach -A --parallel --topological-dev --verbose $js_include run build + yarn workspaces foreach -A --parallel --topological-dev --verbose $js_include run build # We create a folder called packages, that contains each package as it would be published to npm, named correctly. # These can be useful for testing, or to portal into other projects. - yarn workspaces foreach -A --parallel $js_include pack + yarn workspaces foreach -A --parallel $js_include pack cd .. rm -rf packages && mkdir -p packages @@ -121,16 +38,46 @@ function build_packages { # Find all files in packages dir and use sed to in-place replace @noir-lang with @aztec/noir- find packages -type f -exec sed -i 's|@noir-lang/|@aztec/noir-|g' {} \; +} + +# Creates forwarding packages that re-export official npm packages (happy path). +function setup_forwarding_packages { + set -euo pipefail + local version=$1 + + rm -rf packages && mkdir -p packages - cache_upload noir-packages-$hash.tar.gz \ - packages \ - noir-repo/acvm-repo/acvm_js/nodejs \ - noir-repo/acvm-repo/acvm_js/web \ - noir-repo/tooling/noir_codegen/lib \ - noir-repo/tooling/noir_js/lib \ - noir-repo/tooling/noir_js_types/lib \ - noir-repo/tooling/noirc_abi_wasm/nodejs \ - noir-repo/tooling/noirc_abi_wasm/web + for project in $js_projects; do + local pkg_name=${project#*/} # Remove @noir-lang/ prefix + local aztec_name="@aztec/noir-${pkg_name}" + local pkg_dir="packages/${pkg_name}" + + mkdir -p "$pkg_dir" + + # Get the official package to extract its version + local npm_version=$(npm view "${project}@${version}" version 2>/dev/null || echo "$version") + + # Create package.json + cat > "$pkg_dir/package.json" < "$pkg_dir/index.js" + + # Create index.d.ts that re-exports types + echo "export * from '${project}';" > "$pkg_dir/index.d.ts" + done + + echo "Forwarding packages created in packages/" } function install_deps { @@ -146,135 +93,97 @@ function install_deps { just --justfile ./noir-repo/justfile install-js-tools } -export -f build_native build_packages noir_content_hash install_deps +export -f build_packages setup_forwarding_packages install_deps function build { - echo_header "noir build" - denoise "retry install_deps" - parallel --tag --line-buffer --halt now,fail=1 denoise ::: build_native build_packages - # if [ -x ./scripts/fix_incremental_ts.sh ]; then - # ./scripts/fix_incremental_ts.sh - # fi -} + echo_header "noir install" + + # Read first line (nargo version/tag or URL) + local ref_content=$(head -n 1 ./noir-repo-ref) + # Read second line if present (package version for happy path) + local pkg_version=$(sed -n '2p' ./noir-repo-ref) + + # Detect if noir-repo-ref contains a URL (has ://) or is a simple tag/version + if [[ "$ref_content" == *"://"* ]]; then + # Unhappy path: Clone and build from source + echo "Detected repository URL in noir-repo-ref, building from source..." + + # Parse URL and optional branch/tag + local repo_url branch_or_tag + if [[ "$ref_content" == *"#"* ]]; then + repo_url="${ref_content%#*}" + branch_or_tag="${ref_content##*#}" + else + repo_url="$ref_content" + branch_or_tag="master" + fi + + # Clone the repo + if [ -d noir-repo/.git ]; then + echo "noir-repo already exists, pulling latest..." + cd noir-repo + git fetch origin + git checkout "$branch_or_tag" + git pull origin "$branch_or_tag" || true + cd .. + else + echo "Cloning $repo_url (branch/tag: $branch_or_tag)..." + git clone "$repo_url" noir-repo + cd noir-repo + git checkout "$branch_or_tag" + cd .. + fi + + # Install noirup if needed + if ! command -v noirup &>/dev/null; then + curl -L https://raw.githubusercontent.com/noir-lang/noirup/refs/heads/main/install | bash + fi + + # Install nargo from local path + echo "Installing nargo from local noir-repo..." + $HOME/.nargo/bin/noirup -p noir-repo + + # Build TypeScript packages + echo "Building TypeScript packages..." + build_packages -function test { - echo_header "noir test" - test_cmds | filter_test_cmds | parallelize -} - -# Prints the commands to run tests, one line per test, prefixed with the appropriate content hash. -function test_cmds { - local test_hash=$NOIR_HASH - cd noir-repo - - # I'm turning these off. We do zero development of noir in this repository so if they're failing then it's because - # aztec CI is borked. - - # NOIR_TEST_FILTER="not (package(noir_ast_fuzzer_fuzz) or package(noir_ast_fuzzer))" - # cargo nextest list --workspace --locked --release -Tjson-pretty -E "$NOIR_TEST_FILTER" 2>/dev/null | \ - # jq -r ' - # .["rust-suites"][] | - # .testcases as $tests | - # .["binary-path"] as $binary | - # $tests | - # to_entries[] | - # select(.value.ignored == false and .value["filter-match"].status == "matches") | - # "noir/scripts/run_test.sh \($binary) \(.key)"' | \ - # sed "s|$PWD/target/release/deps/||" | \ - # awk "{print \"$test_hash \" \$0 }" - # # The test below is de-activated because it is failing with serialization changes, - # # probably due to some cache issue. There is not much value in testing the Noir repo here. - # # echo "$test_hash cd noir/noir-repo && GIT_COMMIT=$GIT_COMMIT NARGO=$PWD/target/release/nargo" \ - # # "yarn workspaces foreach -A --parallel --topological-dev --verbose $js_include run test" - - # # This is a test as it runs over our test programs (format is usually considered a build step). - # echo "$test_hash noir/bootstrap.sh format --check" -} - -function format { - # Check format of noir programs in the noir repo. - export PATH="$(pwd)/noir-repo/target/release:${PATH}" - arg=${1:-} - cd noir-repo/test_programs - if [ "$arg" = "--check" ]; then - # different passing of check than nargo fmt - ./format.sh check else - ./format.sh + # Happy path: Use official packages via forwarding + echo "Detected version tag in noir-repo-ref, using official packages..." + + # Use package version from second line if present, otherwise use nargo version + if [ -z "$pkg_version" ]; then + pkg_version="$ref_content" + fi + + # Install noirup if needed + if ! command -v noirup &>/dev/null; then + curl -L https://raw.githubusercontent.com/noir-lang/noirup/refs/heads/main/install | bash + fi + + # Install nargo with version + echo "Installing nargo version $ref_content..." + $HOME/.nargo/bin/noirup -v "$ref_content" + + # Create forwarding packages using the package version + echo "Setting up forwarding packages for version $pkg_version..." + setup_forwarding_packages "$pkg_version" + + # For backwards compatibility, create noir-repo structure + mkdir -p noir-repo/target/release + ln -sf $HOME/.nargo/bin/nargo noir-repo/target/release/nargo fi - cd ../noir_stdlib - nargo fmt $arg -} - -function release { - local dist_tag=$(dist_tag) - local version=${REF_NAME#v} - cd packages - - for package in $js_projects; do - local dir=${package#*/} - [ ! -d "$dir" ] && echo "Project path not found: $dir" && exit 1 - cd $dir - - jq --arg v $version '.version = $v' package.json >tmp.json - mv tmp.json package.json - - retry "deploy_npm $dist_tag $version" - cd .. - done -} - -# Bump the Noir repo reference on a given branch to a given ref. -# The branch might already exist, e.g. this could be a daily job bumping the version to the -# latest nightly, and we might have to deal with updating the patch file because the latest -# Noir code conflicts with the contents of the patch, or we're debugging some integration -# test failure on CI. In that case just push another commit to the branch to bump the version -# further without losing any other commit on the branch. -function bump_noir_repo_ref { - branch=$1 - ref=$2 - git fetch --depth 1 origin $branch || true - git checkout --track origin/$branch || git checkout $branch || git checkout -b $branch - scripts/sync.sh write-noir-repo-ref $ref - git add noir-repo-ref - - # Update the Cargo.lock file in the transpiler to match the new ref. - cargo update --workspace --manifest-path="../avm-transpiler/Cargo.toml" - - # Build nargo and run formatter on `noir-projects` - build_native - ../noir-projects/bootstrap.sh format - git add ../avm-transpiler - git commit -m "chore: Update noir-repo-ref to $ref" || true - do_or_dryrun git push --set-upstream origin $branch } case "$cmd" in "clean") - # Double `f` needed to delete the nested git repository. - git clean -ffdx - ;; - "ci") - build - test + git clean -fdx ;; ""|"fast"|"full") build ;; - test_cmds|build_native|build_packages|format|test|release) - $cmd "$@" - ;; "hash") - echo $NOIR_HASH - ;; - "hash-tests") - echo $NOIR_HASH - ;; - "make-patch") - scripts/sync.sh make-patch - ;; - "bump-noir-repo-ref") - bump_noir_repo_ref $@ + nargo --version | sed -n 's/(git version hash: \([^,]*\).*/\1/p' ;; "noir-sync") # Noop, we synced above. diff --git a/noir/noir-repo-ref b/noir/noir-repo-ref index 21adbebeaca5..4be742fbba66 100644 --- a/noir/noir-repo-ref +++ b/noir/noir-repo-ref @@ -1 +1,2 @@ nightly-2025-11-10 +1.0.0-beta.15-c117dfa.nightly diff --git a/noir/postcheckout.sh b/noir/postcheckout.sh deleted file mode 100755 index 268a02d26d5f..000000000000 --- a/noir/postcheckout.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# Post-checkout hook for warning the user to create a patch file before running a build, -# if there are outstanding commits that could get lost if we switch to a different noir-repo checkout. -set -euo pipefail - -cd $(dirname $0) - -is_branch=${3:-} - -if [ "$is_branch" == "1" ] && scripts/sync.sh needs-patch; then - echo "Warning: the noir-repo has outstanding commits that need to be put in a patch file" - echo "with the './noir/bootstrap.sh make-patch' command, then committed to the appropriate branch" - echo "in aztec-packages in order to ensure they don't get lost if the noir-repo is switched." -fi diff --git a/noir/scripts/fix_incremental_ts.sh b/noir/scripts/fix_incremental_ts.sh deleted file mode 100755 index ab54606420a6..000000000000 --- a/noir/scripts/fix_incremental_ts.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# Hack to workaround incremental builds not working on mac when mounted into dev container. -# Drops the fractional part of file timestamps. -set -eu - -cd $(dirname $0)/../noir-repo - -if [ "${HOST_OSTYPE:-}" == "darwin" ]; then - echo -n "Fixing incremental timestamps... " - find target -type f -print0 | xargs -0 -P $(nproc) -I {} sh -c 'touch -d @$(stat --format="%Y" {}) {}' - echo "Done." -fi \ No newline at end of file diff --git a/noir/scripts/run_test.sh b/noir/scripts/run_test.sh deleted file mode 100755 index 00abd7fdf485..000000000000 --- a/noir/scripts/run_test.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -eu - -cd $(dirname $0)/../noir-repo - -export RAYON_NUM_THREADS=1 - -./target/release/deps/$1 --exact $2 diff --git a/noir/scripts/sync-in-fixup.sh b/noir/scripts/sync-in-fixup.sh deleted file mode 100755 index 378fab2b718e..000000000000 --- a/noir/scripts/sync-in-fixup.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -eu - -cd $(dirname $0)/../noir-repo - -# Remove requirement for `wasm-opt` to be installed -sed -i.bak "s/^require_command wasm-opt/#require_command wasm-opt/" ./tooling/noirc_abi_wasm/build.sh -sed -i.bak "s/^require_command wasm-opt/#require_command wasm-opt/" ./acvm-repo/acvm_js/build.sh diff --git a/noir/scripts/sync-out-fixup.sh b/noir/scripts/sync-out-fixup.sh deleted file mode 100755 index bcdbf8371df0..000000000000 --- a/noir/scripts/sync-out-fixup.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -eu - -cd $(dirname $0)/../noir-repo - -# Add requirement for `wasm-opt` to be installed -sed -i.bak "s/^#require_command wasm-opt/require_command wasm-opt/" ./tooling/noirc_abi_wasm/build.sh -sed -i.bak "s/^#require_command wasm-opt/require_command wasm-opt/" ./acvm-repo/acvm_js/build.sh diff --git a/noir/scripts/sync.sh b/noir/scripts/sync.sh deleted file mode 100755 index 82932e9650bf..000000000000 --- a/noir/scripts/sync.sh +++ /dev/null @@ -1,430 +0,0 @@ -#!/usr/bin/env bash -set -eu - -# Commands related to syncing with the noir-repo. - -NOIR_REPO_URL=https://github.com/noir-lang/noir.git -# Special message we use to indicate the commit we do after the fixup. -# This commit has changes we do *not* want to migrate back to Noir, -# they exist only to make the Noir codebase work with the projects -# in aztec-packages, rather than their released versions. -FIXUP_COMMIT_MSG="Noir local fixup commit." -# Special message we use to indicate the commit we do after applying -# any patch file committed in aztec-packages, which contains changes -# Aztec developers made to Noir. These are changes we do want to see -# migrated back to Noir eventually, after which the patch file can -# be removed. -PATCH_COMMIT_MSG="Noir local patch commit." -# There can be a patch file committed in `aztec-packages` with commits -# to be applied on top of any Noir checkout. -# The `noir/bootstrap.sh make-patch` commands takes all commits since -# the local fixup commit and compiles them into this single patch file, -# (so it will include previously applied patch commits as well as new ones), -# replacing any previous value. -# The patch commits can be pushed to Noir if they represent bugfixes; -# to do so we have to rebase on the origin and remove the fixup commit. -NOIR_REPO_PATCH=noir-repo.patch -# Certain commands such as `noir/bootstrap.sh test_cmds` are expected to print -# executable scripts, which would be corrupted by any extra logs coming from here. -NOIR_REPO_VERBOSE=${NOIR_REPO_VERBOSE:-0} - -cd $(dirname $0)/.. - -function log { - if [ "${NOIR_REPO_VERBOSE}" -eq 1 ]; then - echo $@ - fi -} - -# Read the commitish that we have to check out from the marker file -# or an env var to facilitate overriding it on CI for nightly tests. -function read_wanted_ref { - ref=${NOIR_REPO_REF:-} - if [ ! -z "$ref" ]; then - echo $ref - return - fi - cat noir-repo-ref -} - -function write_wanted_ref { - ref=$1 - if [ -z "$ref" ]; then - echo "noir-repo-ref cannot be empty" - exit 1 - fi - echo $ref > noir-repo-ref -} - -# Return the current branch name, or fail if we're not on a branch. -function branch_name { - repo_exists && git -C noir-repo symbolic-ref --short -q HEAD -} - -# Check that the repo exists -function repo_exists { - [ -d noir-repo ] && [ -d noir-repo/.git ] -} - -# Check if we are on a branch. -function is_on_branch { - test $(branch_name) -} - -# Check if we are on a detached HEAD, which means if we switch branches -# it would be difficult to recover any changes committed on this branch. -function is_detached_head { - repo_exists && ! is_on_branch -} - -# Check if noir-repo has uncommitted changes. -function has_uncommitted_changes { - ! repo_exists && return 1 - # Add any untracked files, because otherwise we might switch branches, - # apply the patch fixup, create an artifical commit and inadvertedly - # add these files to a commit they have nothing to do with. - if git -C noir-repo add . && \ - git -C noir-repo diff --quiet && \ - git -C noir-repo diff --cached --quiet ; then - return 1 # false - else - return 0 # true - fi -} - -# Check if the last commit is marked with the local patch message. -function is_last_commit_patch { - ! repo_exists && return 1 - last_msg=$(git -C noir-repo rev-list --max-count=1 --no-commit-header --format=%B HEAD) - test "$last_msg" == "$PATCH_COMMIT_MSG" -} - -# Check if we have applied the fixup in any commit in the log. -# It is possible that we checkout a branch, apply the patch, then go into noir-repo -# and work on various fixes, committing them as we go. In that case the patch won't -# be the last commit, but it doesn't have to be applied again if we switch away -# from our branch and then come back to it later. -function has_patch_commit { - ! repo_exists && return 1 - if git -C noir-repo rev-list --no-commit-header --format=%B HEAD | grep -q --max-count=1 "$PATCH_COMMIT_MSG" ; then - return 0 # true - else - return 1 # false - fi -} - -# Find the commit hash of the last applied fixup commit. -# This is a commit we don't want to include in a patch file. -function find_fixup_commit { - ! repo_exists && return 1 - fixup=$(git -C noir-repo log --oneline --no-abbrev-commit --grep "$FIXUP_COMMIT_MSG" --max-count=1 | awk '{print $1}') - [ -z "$fixup" ] && return 1 - echo $fixup -} - -# Find the commit hash of the last checkout. -function find_checkout_commit { - ! repo_exists && return 1 - fixup=$(find_fixup_commit) - [ -z "$fixup" ] && return 1 - git -C noir-repo rev-parse "$fixup~1" -} - -# Check if a ref is a tag we have locally -function has_tag { - ! repo_exists && return 1 - tag=$1 - test $(git -C noir-repo tag --list $tag) -} - -# Get the commit a tag *currently* refers to on the remote and check if we have it in our local history. -function has_tag_commit { - ! repo_exists && return 1 - tag=$1 - rev=$(git -C noir-repo ls-remote --tags origin $tag | awk '{print $1}') - if [ ! -z "$rev" ]; then - # NB `git show` would tell if we have the commit, but it would not necessarily be an ancestor. - if git -C noir-repo log --oneline --no-abbrev-commit | grep -q --max-count=1 "$rev"; then - return 0 - fi - fi - return 1 -} - -# Indicate that the `make-patch` command should be used to create a new patch file. -# If we're not on a detached head but a stable branch, then we can safely come back -# to these commits and we don't need to make them into a patch file to preserve them. -function needs_patch { - is_detached_head && has_patch_commit && ! is_last_commit_patch -} - -# Indicate that both the fixup and the patch has been applied. -function has_fixup_and_patch { - find_fixup_commit>/dev/null && has_patch_commit -} - -# Indicate that we have to switch to the wanted branch. -function needs_switch { - ! repo_exists && return 0 # true - want=$(read_wanted_ref) - have=false - # Are we on the wanted branch? - if is_on_branch && [ "$(branch_name)" == "$want" ]; then - have=true - fi - # Are we descending from the wanted commit? - if [ "$(find_checkout_commit)" == "$want" ]; then - have=true - fi - # Are we descending from the wanted tag? - if has_tag "$want" && has_tag_commit "$want"; then - have=true - fi - # If we're on the wanted checkout, it could be that we rebased on origin in order - # to push the branch without the fixup commit. In that case we'd need to do a fresh - # checkout to re-apply the fixup and the patches. - if [ $have == true ] && has_fixup_and_patch; then - return 1 # false - else - return 0 # true - fi -} - -# Find the latest nightly tag in the upstream repo -function latest_nightly { - git ls-remote --tags --sort -refname $NOIR_REPO_URL nightly-* | head -n 1 | awk '{split($2,a,"/"); print a[3]}' -} - -# Create an empty marker commit to show that patches have been applied or put in a patch file. -function commit_patch_marker { - # The output is redirected to stderr, otherwise a message like - # `[detached HEAD e4c68760f0] Noir local patch commit.` appears - # in the output, becoming part of e.g. `noir/bootstrap.sh hash` - git -C noir-repo commit -m "$PATCH_COMMIT_MSG" --allow-empty --no-gpg-sign >&2 -} - -# Apply the fixup script and any local patch file. -function patch_repo { - log Applying fixup on noir-repo - # Redirect the `bb` reference to the local one. - scripts/sync-in-fixup.sh - git -C noir-repo add . && git -C noir-repo commit -m "$FIXUP_COMMIT_MSG" --allow-empty --no-gpg-sign >&2 - # Apply any patch file. - if [ -f $NOIR_REPO_PATCH ]; then - log Applying patches from $NOIR_REPO_PATCH - git -C noir-repo am ../$NOIR_REPO_PATCH --no-gpg-sign >&2 - else - log "No patch file to apply" - fi - # Create an empty marker commit to show that patches have been applied. - commit_patch_marker -} - -# Check out a tag, branch or commit. -function switch_repo { - ref=$1 - log Switching noir-repo to $ref - git -C noir-repo fetch --tags --depth 1 origin - # If we try to switch to some random commit after a branch it might not find it locally. - git -C noir-repo fetch --depth 1 origin $ref || true - # Try to check out an existing branch, or remote commit. - if git -C noir-repo checkout $ref; then - # If it's a branch we just need to pull the latest changes. - if is_on_branch; then - git -C noir-repo pull --rebase - fi - else - # If the checkout failed, then it should be a remote branch or tag - git -C noir-repo checkout --track origin/$ref - fi - # If we haven't applied the patch yet, we have to do it (again). - if ! has_patch_commit; then - patch_repo - else - log "Patches already applied" - fi -} - -# Clone the repository if it doesn't exist. -function init_repo { - url=$NOIR_REPO_URL - ref=$(read_wanted_ref) - if [ -d noir-repo ] && [ ! -d noir-repo/.git ]; then - # In all probability we just have some build leftovers after switching branches on aztec-packages, - # but play it safe and preserve them: instead of deleting `noir-repo` just re-initialize it. - git -C noir-repo init - git -C noir-repo remote add origin $url - git -C noir-repo config advice.detachedHead false - switch_repo $ref - elif [ ! -d noir-repo ]; then - log Initializing noir-repo to $ref - # If we're cloning from a tag with --depth=1, we won't be able to switch to a branch later. - # On CI we won't be switching branches, but on dev machines we can, so there make a full checkout. - depth=$([ ! -z "${CI_FULL:-}" ] && echo "--depth 1" || echo "") - # Switch off detached head warnings in the cloned repo. - advice="-c advice.detachedHead=false" - # `--branch` doesn't work for commit hashes - git clone $advice $depth --branch $ref $url noir-repo \ - || git clone $advice $url noir-repo && git -C noir-repo checkout $ref - patch_repo - fi -} - -# Bring the noir-repo in line with the commit marker. -function update_repo { - want=$(read_wanted_ref) - if ! needs_switch; then - log "noir-repo already on $want" - if is_on_branch; then - # If we're on a branch, then we there might be new commits. - # Rebasing so our local patch commit ends up on top. - # Quiet so we don't interfere with `test_cmds` - git -C noir-repo pull --rebase --quiet - return - elif ! has_tag $want; then - # We are on what we wanted and it's _not_ a tag, so it must be a commit, and we have nothing more to do. - return - elif has_tag_commit $want; then - # We checked out a tag, and it looks like it hasn't been moved to a different commit. - return - else - log "The current commit of the tag doesn't appear in our history." - fi - fi - - # We need to switch branches. - - if has_uncommitted_changes; then - echo "Error: noir-repo has uncommitted changes which could get lost if we switch to $want" - echo "Please commit these changes and consider pushing them upstream to make sure they are not lost." - exit 1 - fi - - if needs_patch; then - echo "Error: noir-repo is on a detached HEAD and the last commit is not the patch marker commit;" - echo "switching to $want could mean losing those commits." - echo "Please use the 'make-patch' command to create a $NOIR_REPO_PATCH file and commit it in aztec-packages, " - echo "so that it is re-applied after each checkout. Make sure to commit the patch on the branch where it should be." - exit 1 - fi - - switch_repo $want -} - -# Create a patch file from any outstanding commits in noir-repo -function make_patch { - if is_last_commit_patch; then - echo "The last commit is the patch commit, there is nothing new to put in a patch." - exit 0 - fi - fixup_rev=$(find_fixup_commit) - if [ -z "$fixup_rev" ]; then - echo "Could not determine the fixup commit hash, which is the commit we would like to apply patches from" - exit 1 - fi - mkdir -p patches - # The patch marker commit could be in the middle: fixup-commit from-patch-1 from-patch-2 patch-commit new-fix-1 new-fix-2 - # wo we write all patches to files, then exclude the one which is just the empty patch commit. - git -C noir-repo format-patch -o ../patches $fixup_rev..HEAD - # In theory we should be able to apply empty patches `git am --allow-empty`, but it seems to choke on them, - # so we only keep non-empty patches, which conveniently also excludes `000*-Noir-local-patch-commit.patch` as well. - rm -f $NOIR_REPO_PATCH - for patch in $(find patches -name "*.patch"); do - # --- seems to separtate the files in a patch; in an empty patch it does not appear - if cat $patch | grep -q "\-\-\-" ; then - cat $patch >> $NOIR_REPO_PATCH - fi - done - rm -rf patches - # Create an empty patch marker commit at the end to show that it is safe to switch now. - if ! is_last_commit_patch; then - commit_patch_marker - fi -} - -# Decide what kind of caching we should do. -function cache_mode { - if has_uncommitted_changes; then - # Same magic word as the ci3 scripts like `cache_content_hash` use. - echo "disabled-cache" - elif is_on_branch; then - # If we're on a branch (not a tag or a commit) then we can only cache - # based on the evolving content of the noir-repo itself. - echo "noir-repo" - elif is_last_commit_patch; then - # If we're on a detached head and the last commit is the patch, - # then we can use the noir-repo-ref and the patch file as cache key. - echo "noir" - else - # Otherwise we're on a tag and added some extra commits which are - # not part of a patch yet, so we can't use the cache. - echo "disabled-cache" - fi -} - -# Show debug information -function info { - function pad { - printf "%$2.${2#-}s" "$1"; - } - function echo_info { - echo "$(pad "$1:" -25)" $2 - } - function yesno { - $@ && echo "yes" || echo "no" - } - want=$(read_wanted_ref) - echo_info "Repo exists" $(yesno repo_exists) - echo_info "Fixup commit" $(find_fixup_commit || echo "n/a") - echo_info "Checkout commit" $(find_checkout_commit || echo "n/a") - echo_info "Wanted" $want - echo_info "Needs switch" $(yesno needs_switch) - echo_info "Needs patch" $(yesno needs_patch) - echo_info "Detached" $(yesno is_detached_head) - echo_info "On branch" $(yesno is_on_branch) - echo_info "Branch name" $(branch_name || echo "n/a") - echo_info "Has wanted tag" $(yesno has_tag $want) - echo_info "Has tag commit" $(yesno has_tag_commit $want) - echo_info "Has patch commit" $(yesno has_patch_commit) - echo_info "Last commit is patch" $(yesno is_last_commit_patch) - echo_info "Has fixup and patch" $(yesno has_fixup_and_patch) - echo_info "Has uncommitted changes" $(yesno has_uncommitted_changes) - echo_info "Latest nightly" $(latest_nightly) - echo_info "Cache mode" $(cache_mode) -} - -cmd=${1:-} -[ -n "$cmd" ] && shift - -case "$cmd" in - "init") - init_repo - ;; - "update") - update_repo - ;; - "make-patch") - make_patch - ;; - "needs-patch") - [ -d noir-repo ] && [ -d noir-repo/.git ] && needs_patch && exit 0 || exit 1 - ;; - "cache-mode") - echo $(cache_mode) - ;; - "latest-nightly") - echo $(latest_nightly) - ;; - "read-noir-repo-ref") - echo $(read_wanted_ref) - ;; - "write-noir-repo-ref") - write_wanted_ref $1 - ;; - "info") - info - ;; - *) - echo "Unknown command: $cmd" - exit 1 -esac diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 7d344b09fdeb..0485c94fbd3b 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -15358,20 +15358,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.2 - resolution: "istanbul-lib-instrument@npm:6.0.2" - dependencies: - "@babel/core": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^7.5.4" - checksum: 10/3aee19be199350182827679a137e1df142a306e9d7e20bb5badfd92ecc9023a7d366bc68e7c66e36983654a02a67401d75d8debf29fc6d4b83670fde69a594fc - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.2, istanbul-lib-instrument@npm:^6.0.3": +"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2, istanbul-lib-instrument@npm:^6.0.3": version: 6.0.3 resolution: "istanbul-lib-instrument@npm:6.0.3" dependencies: