diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d444f39..89c3429 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -19,7 +19,7 @@ env: NODE_VERSION: 23.3.0 # Latest Rust version: https://www.rust-lang.org/ - RUST_VERSION: 1.82.0 + RUST_VERSION: 1.83.0 jobs: nodejs: diff --git a/Cargo.lock b/Cargo.lock index 2387a36..b371a8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -170,9 +170,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -210,9 +210,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -234,9 +234,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" @@ -1820,9 +1820,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", diff --git a/ci/Cargo.toml b/ci/Cargo.toml index 89c14ac..7c31147 100644 --- a/ci/Cargo.toml +++ b/ci/Cargo.toml @@ -6,6 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = "4.5.21" +clap = "4.5.23" serde_json = "1.0.133" sha2 = "0.10.8" diff --git a/ci/src/lib.rs b/ci/src/lib.rs index d20bae0..4f67d37 100644 --- a/ci/src/lib.rs +++ b/ci/src/lib.rs @@ -42,6 +42,10 @@ pub struct Cli { #[arg(short, long)] fail_fast: bool, + /// Use headed (GUI) browsers for e2e tests + #[arg(short = 'e', long)] + headed: bool, + /// Runner for scripts [docker, shell] #[arg(short, long, default_value = "docker")] runner: String, @@ -67,6 +71,7 @@ pub fn cmd(args: Cli) { cwd: std::env::var("HOST_WORKDIR").unwrap_or( String::from(std::env::current_dir().unwrap().to_str().unwrap()) ), + headed: args.headed, verbose: args.verbose, }); @@ -140,6 +145,7 @@ pub type Error = Box; pub struct Context { pub id: String, pub cwd: String, + pub headed: bool, pub verbose: bool, } diff --git a/ci/src/stages/dev_e2e.rs b/ci/src/stages/dev_e2e.rs index fcf7451..987211e 100644 --- a/ci/src/stages/dev_e2e.rs +++ b/ci/src/stages/dev_e2e.rs @@ -13,16 +13,16 @@ impl Stage for DevE2E { } // run e2e tests against dev servers - fn run(&self, _context: &Context, runner: &dyn Runner) -> Result<(), Error> { + fn run(&self, context: &Context, runner: &dyn Runner) -> Result<(), Error> { let expiration = 3000; - node_dev_e2e(expiration, runner)?; + node_dev_e2e(expiration, runner, context)?; - rust_dev_e2e(expiration, runner) + rust_dev_e2e(expiration, runner, context) } } -fn node_dev_e2e(expiration: u32, runner: &dyn Runner) -> Result<(), Error> { +fn node_dev_e2e(expiration: u32, runner: &dyn Runner, context: &Context) -> Result<(), Error> { let server = runner.run_background( ExecutionContext::Build, vec![], @@ -38,11 +38,16 @@ fn node_dev_e2e(expiration: u32, runner: &dyn Runner) -> Result<(), Error> { ExecutionContext::E2E, vec![], true, - &cypress_script(&server.addr(), "node-dev", &BROWSERS), + &cypress_script( + &server.addr(), + "node-dev", + &BROWSERS, + context.headed, + ), ) } -fn rust_dev_e2e(expiration: u32, runner: &dyn Runner) -> Result<(), Error> { +fn rust_dev_e2e(expiration: u32, runner: &dyn Runner, context: &Context) -> Result<(), Error> { runner.run( ExecutionContext::Build, vec![&format!( @@ -86,22 +91,29 @@ fn rust_dev_e2e(expiration: u32, runner: &dyn Runner) -> Result<(), Error> { "CYPRESS_REQUIRE_CLEAN_PERSISTENCE=true", ], true, - &cypress_script(&server.addr(), "rust-dev", &[browser]), + &cypress_script( + &server.addr(), + "rust-dev", + &[browser], + context.headed, + ), )?; } Ok(()) } -fn cypress_script(server_addr: &str, stage_name: &str, browsers: &[&str]) -> String { +fn cypress_script(server_addr: &str, stage_name: &str, browsers: &[&str], headed: bool) -> String { + let headed = if headed { "--headed" } else { "--headless" }; format!(r" set -xe cd ui trap 'mv *-e2e.xml ../test_results/' EXIT for b in {0}; do - CYPRESS_MOCHA_FILE={2}-$b-e2e.xml npx cypress run \ + CYPRESS_MOCHA_FILE={1}-$b-e2e.xml npx cypress run \ + {2} \ --browser $b \ - --config baseUrl=http://{1}:8080 + --config baseUrl=http://{3}:8080 done - ", browsers.join(" "), server_addr, stage_name) + ", browsers.join(" "), stage_name, headed, server_addr) } diff --git a/images/build.Dockerfile b/images/build.Dockerfile index 8ae6fee..b8269c2 100644 --- a/images/build.Dockerfile +++ b/images/build.Dockerfile @@ -4,10 +4,10 @@ ARG NODE_VERSION="23.3.0" FROM node:${NODE_VERSION}-alpine # Latest NPM version: https://www.npmjs.com/package/npm -ARG NPM_VERSION="10.9.1" +ARG NPM_VERSION="10.9.2" # Latest Rust version: https://www.rust-lang.org/ -ARG RUST_VERSION="1.82.0" +ARG RUST_VERSION="1.83.0" # Latest nextest version: https://github.com/nextest-rs/nextest/releases ARG NEXTEST_VERSION="^0.9" diff --git a/images/e2e.Dockerfile b/images/e2e.Dockerfile index 99b2137..73eb0d1 100644 --- a/images/e2e.Dockerfile +++ b/images/e2e.Dockerfile @@ -2,10 +2,10 @@ ARG NODE_VERSION="23.3.0" # Latest Chrome version: https://www.ubuntuupdates.org/package/google_chrome/stable/main/base/google-chrome-stable -ARG CHROME_VERSION="131.0.6778.85-1" +ARG CHROME_VERSION="131.0.6778.108-1" # Latest Firefox version: https://www.mozilla.org/en-US/firefox/releases/ -ARG FIREFOX_VERSION="132.0.2" +ARG FIREFOX_VERSION="133.0" # Disable other browsers ARG EDGE_VERSION= @@ -13,10 +13,10 @@ ARG YARN_VERSION= ARG CYPRESS_VERSION= # Latest cypress factory version: https://hub.docker.com/r/cypress/factory/tags -FROM cypress/factory:5.1.0 +FROM cypress/factory:5.1.1 # Latest NPM version: https://www.npmjs.com/package/npm -ARG NPM_VERSION="10.9.1" +ARG NPM_VERSION="10.9.2" USER root diff --git a/tools/Cargo.toml b/tools/Cargo.toml index 051d68f..04287dc 100644 --- a/tools/Cargo.toml +++ b/tools/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = { version = "4.5.21", features = ["derive"] } +clap = { version = "4.5.23", features = ["derive"] } regex = "1.11.1" reqwest = "0.12.9" serde_yaml = "0.9.34" -tokio = { version = "1.41.1", features = ["full"] } +tokio = { version = "1.42.0", features = ["full"] } diff --git a/ui/package-lock.json b/ui/package-lock.json index bb63e52..48153bc 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -9,27 +9,27 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@eslint/js": "^9.15.0", + "@eslint/js": "^9.16.0", "@testing-library/dom": "^10.4.0", "ace-builds": "^1.36.5", - "axios": "^1.7.8", + "axios": "^1.7.9", "core-js": "^3.39.0", "esbuild": "^0.24.0", "esbuild-plugin-resolve": "^2.0.0", - "eslint": "^9.15.0", + "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", - "express": "^4.21.1", - "globals": "^15.12.0", + "express": "^4.21.2", + "globals": "^15.13.0", "jsdom": "^25.0.1", "lorem-ipsum": "^2.0.8", - "marked": "^15.0.2", + "marked": "^15.0.3", "nodemon": "^3.1.7", "reefjs": "^13.0.6", "yargs": "^17.7.2" }, "devDependencies": { - "cypress": "^13.16.0", + "cypress": "^13.16.1", "cypress-multi-reporters": "^2.0.4", "mocha-junit-reporter": "^2.2.1" } @@ -695,9 +695,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", - "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1128,9 +1128,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -1685,9 +1685,9 @@ } }, "node_modules/cypress": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.16.0.tgz", - "integrity": "sha512-g6XcwqnvzXrqiBQR/5gN+QsyRmKRhls1y5E42fyOvsmU7JuY+wM6uHJWj4ZPttjabzbnRvxcik2WemR8+xT6FA==", + "version": "13.16.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.16.1.tgz", + "integrity": "sha512-17FtCaz0cx7ssWYKXzGB0Vub8xHwpVPr+iPt2fHhLMDhVAPVrplD+rTQsZUsfb19LVBn5iwkEUFjQ1yVVJXsLA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2092,9 +2092,9 @@ } }, "node_modules/eslint": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", - "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -2102,7 +2102,7 @@ "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.9.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.15.0", + "@eslint/js": "9.16.0", "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -2333,9 +2333,9 @@ } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -2357,7 +2357,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -2372,6 +2372,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -2839,9 +2843,9 @@ } }, "node_modules/globals": { - "version": "15.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", - "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "version": "15.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz", + "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", "license": "MIT", "engines": { "node": ">=18" @@ -3610,9 +3614,9 @@ } }, "node_modules/marked": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.2.tgz", - "integrity": "sha512-85RUkoYKIVB21PbMKrnD6aCl9ws+XKEyhJNMbLn206NyD3jbBo7Ec7Wi4Jrsn4dV1a2ng7K/jfkmIN0DNoS41w==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.3.tgz", + "integrity": "sha512-Ai0cepvl2NHnTcO9jYDtcOEtVBNVYR31XnEA3BndO7f5As1wzpcOceSUM8FDkNLJNIODcLpDTWay/qQhqbuMvg==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -4147,9 +4151,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/pend": { diff --git a/ui/package.json b/ui/package.json index 1f81a1a..13d78bf 100644 --- a/ui/package.json +++ b/ui/package.json @@ -17,27 +17,27 @@ "author": "Chris Reeder ", "license": "MIT", "dependencies": { - "@eslint/js": "^9.15.0", + "@eslint/js": "^9.16.0", "@testing-library/dom": "^10.4.0", "ace-builds": "^1.36.5", - "axios": "^1.7.8", + "axios": "^1.7.9", "core-js": "^3.39.0", "esbuild": "^0.24.0", "esbuild-plugin-resolve": "^2.0.0", - "eslint": "^9.15.0", + "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", - "express": "^4.21.1", - "globals": "^15.12.0", + "express": "^4.21.2", + "globals": "^15.13.0", "jsdom": "^25.0.1", "lorem-ipsum": "^2.0.8", - "marked": "^15.0.2", + "marked": "^15.0.3", "nodemon": "^3.1.7", "reefjs": "^13.0.6", "yargs": "^17.7.2" }, "devDependencies": { - "cypress": "^13.16.0", + "cypress": "^13.16.1", "cypress-multi-reporters": "^2.0.4", "mocha-junit-reporter": "^2.2.1" }, diff --git a/wiki/Cargo.toml b/wiki/Cargo.toml index 550d34d..205d721 100644 --- a/wiki/Cargo.toml +++ b/wiki/Cargo.toml @@ -5,8 +5,8 @@ edition = "2021" [dependencies] base64 = "0.22.1" -bytes = "1.8.0" -clap = "4.5.21" +bytes = "1.9.0" +clap = "4.5.23" log = "0.4.22" phf = "0.11.2" pretty_env_logger = "0.5.0" @@ -15,7 +15,7 @@ refinery = { version = "0.8.14", features = ["tokio-postgres"] } regex = "1.11.1" serde_json = "1.0.133" serde_yaml = "0.9.34" -tokio = { version = "1.41.1", features = ["full"] } +tokio = { version = "1.42.0", features = ["full"] } tokio-postgres = "0.7.12" warp = "0.3.7"