diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-11-02 16:32:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-02 16:32:30 +0100 |
commit | 5dea510b021d78a2c9b6aef9462ae6f4e0fd527a (patch) | |
tree | 728b3663f2852fae25df72ab2599c3cbebfc8ac9 /cli/tests | |
parent | 630abb58b08827e63e56f519bf59a84c3283ab23 (diff) |
fix(lock): autodiscovery of lockfile (#16498)
This commit adds autodiscovery of lockfile.
This only happens if Deno discovers the configuration file (either
"deno.json" or "deno.jsonc"). In such case Deno tries to load
"deno.lock"
file that sits next to the configuration file, or creates one for user
if
the lockfile doesn't exist yet.
As a consequence, "--lock" and "--lock-write" flags had been updated.
"--lock" no longer requires a value, if one is not provided, it defaults
to "./deno.lock" resolved from the current working directory.
"--lock-write"
description was updated to say that it forces to overwrite a lockfile.
Autodiscovery is currently not handled by the LSP.
Diffstat (limited to 'cli/tests')
-rw-r--r-- | cli/tests/integration/npm_tests.rs | 48 | ||||
-rw-r--r-- | cli/tests/integration/run_tests.rs | 13 | ||||
-rw-r--r-- | cli/tests/testdata/jsx/deno.lock | 7 | ||||
-rw-r--r-- | cli/tests/testdata/npm/lock_file/main.out | 11 | ||||
-rw-r--r-- | cli/tests/testdata/run/auto_discover_lockfile/deno.json | 3 | ||||
-rw-r--r-- | cli/tests/testdata/run/auto_discover_lockfile/deno.lock | 7 | ||||
-rw-r--r-- | cli/tests/testdata/run/auto_discover_lockfile/main.out | 5 | ||||
-rw-r--r-- | cli/tests/testdata/run/auto_discover_lockfile/main.ts | 1 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_types/deno.lock | 6 | ||||
-rw-r--r-- | cli/tests/testdata/run/lock_write_requires_lock.out | 3 |
10 files changed, 92 insertions, 12 deletions
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs index a5b443171..72af72a76 100644 --- a/cli/tests/integration/npm_tests.rs +++ b/cli/tests/integration/npm_tests.rs @@ -998,6 +998,54 @@ fn lock_file_missing_top_level_package() { ); } +#[test] +fn auto_discover_lock_file() { + let _server = http_server(); + + let deno_dir = util::new_deno_dir(); + let temp_dir = util::TempDir::new(); + + // write empty config file + temp_dir.write("deno.json", "{}"); + + // write a lock file with borked integrity + let lock_file_content = r#"{ + "version": "2", + "remote": {}, + "npm": { + "specifiers": { "@denotest/bin": "@denotest/bin@1.0.0" }, + "packages": { + "@denotest/bin@1.0.0": { + "integrity": "sha512-foobar", + "dependencies": {} + } + } + } + }"#; + temp_dir.write("deno.lock", lock_file_content); + + let deno = util::deno_cmd_with_deno_dir(&deno_dir) + .current_dir(temp_dir.path()) + .arg("run") + .arg("--unstable") + .arg("-A") + .arg("npm:@denotest/bin/cli-esm") + .arg("test") + .envs(env_vars()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + .unwrap(); + let output = deno.wait_with_output().unwrap(); + assert!(!output.status.success()); + assert_eq!(output.status.code(), Some(10)); + + let stderr = String::from_utf8(output.stderr).unwrap(); + assert!(stderr.contains( + "Integrity check failed for npm package: \"@denotest/bin@1.0.0\"" + )); +} + fn env_vars_no_sync_download() -> Vec<(String, String)> { vec![ ("DENO_NODE_COMPAT_URL".to_string(), util::std_file_url()), diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index 99e122c69..68d15bfd9 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -609,12 +609,6 @@ itest!(private_field_presence_no_check { output: "run/private_field_presence.ts.out", }); -itest!(lock_write_requires_lock { - args: "run --lock-write some_file.ts", - output: "run/lock_write_requires_lock.out", - exit_code: 1, -}); - // TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized itest!(lock_write_fetch { args: @@ -3634,3 +3628,10 @@ fn websocket_server_idletimeout() { assert!(child.wait().unwrap().success()); } + +itest!(auto_discover_lockfile { + args: "run run/auto_discover_lockfile/main.ts", + output: "run/auto_discover_lockfile/main.out", + http_server: true, + exit_code: 10, +}); diff --git a/cli/tests/testdata/jsx/deno.lock b/cli/tests/testdata/jsx/deno.lock new file mode 100644 index 000000000..64429f30a --- /dev/null +++ b/cli/tests/testdata/jsx/deno.lock @@ -0,0 +1,7 @@ +{ + "version": "2", + "remote": { + "http://localhost:4545/jsx/jsx-dev-runtime": "7cac3d940791b3c8e671b24f9678ca37d87d40487ed2b3720a2a40891aa6173d", + "http://localhost:4545/jsx/jsx-runtime": "7cac3d940791b3c8e671b24f9678ca37d87d40487ed2b3720a2a40891aa6173d" + } +} diff --git a/cli/tests/testdata/npm/lock_file/main.out b/cli/tests/testdata/npm/lock_file/main.out index 4c034d03b..b8447bee6 100644 --- a/cli/tests/testdata/npm/lock_file/main.out +++ b/cli/tests/testdata/npm/lock_file/main.out @@ -1,4 +1,9 @@ Download [WILDCARD] -error: Integrity check failed for npm package: "@babel/parser@7.19.0". - Cache has "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==" and lockfile has "sha512-foobar!". - Use "--lock-write" flag to update the lockfile. +error: Integrity check failed for npm package: "@babel/parser@7.19.0". Unable to verify that the package +is the same as when the lockfile was generated. + +This could be caused by: + * the lock file may be corrupt + * the source itself may be corrupt + +Use "--lock-write" flag to regenerate the lockfile at "[WILDCARD]lock.json". diff --git a/cli/tests/testdata/run/auto_discover_lockfile/deno.json b/cli/tests/testdata/run/auto_discover_lockfile/deno.json new file mode 100644 index 000000000..90faa728a --- /dev/null +++ b/cli/tests/testdata/run/auto_discover_lockfile/deno.json @@ -0,0 +1,3 @@ +{ + "tasks": {} +} diff --git a/cli/tests/testdata/run/auto_discover_lockfile/deno.lock b/cli/tests/testdata/run/auto_discover_lockfile/deno.lock new file mode 100644 index 000000000..059f66789 --- /dev/null +++ b/cli/tests/testdata/run/auto_discover_lockfile/deno.lock @@ -0,0 +1,7 @@ +{ + "version": "2", + "remote": { + "http://localhost:4545/subdir/mod2.ts": "cae1d3e9f3c38cd415ff52dff854be8f3d17d35f8d7b3d285e813fb0f6393a2f", + "http://localhost:4545/subdir/print_hello.ts": "foobar" + } +} diff --git a/cli/tests/testdata/run/auto_discover_lockfile/main.out b/cli/tests/testdata/run/auto_discover_lockfile/main.out new file mode 100644 index 000000000..28f4724e9 --- /dev/null +++ b/cli/tests/testdata/run/auto_discover_lockfile/main.out @@ -0,0 +1,5 @@ +Download http://localhost:4545/subdir/mod2.ts +Download http://localhost:4545/subdir/print_hello.ts +error: The source code is invalid, as it does not match the expected hash in the lock file. + Specifier: http://localhost:4545/subdir/print_hello.ts + Lock file: [WILDCARD]auto_discover_lockfile[WILDCARD]deno.lock diff --git a/cli/tests/testdata/run/auto_discover_lockfile/main.ts b/cli/tests/testdata/run/auto_discover_lockfile/main.ts new file mode 100644 index 000000000..baa52775d --- /dev/null +++ b/cli/tests/testdata/run/auto_discover_lockfile/main.ts @@ -0,0 +1 @@ +import "http://localhost:4545/subdir/mod2.ts"; diff --git a/cli/tests/testdata/run/config_types/deno.lock b/cli/tests/testdata/run/config_types/deno.lock new file mode 100644 index 000000000..157bd98a2 --- /dev/null +++ b/cli/tests/testdata/run/config_types/deno.lock @@ -0,0 +1,6 @@ +{ + "version": "2", + "remote": { + "http://localhost:4545/run/config_types/types.d.ts": "741c39165e37de0c12acc5c081841f4362487e3f17dc4cad7017b70af72c4605" + } +} diff --git a/cli/tests/testdata/run/lock_write_requires_lock.out b/cli/tests/testdata/run/lock_write_requires_lock.out deleted file mode 100644 index 7cc5906f6..000000000 --- a/cli/tests/testdata/run/lock_write_requires_lock.out +++ /dev/null @@ -1,3 +0,0 @@ -error: The following required arguments were not provided: - --lock <FILE> -[WILDCARD]
\ No newline at end of file |