diff --git a/.dockerignore b/.dockerignore index f1c6bfd84a..c3489f4f0b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,7 +10,8 @@ node_modules report.*.json # Rust -packages/backend-rs/target +/packages/backend-rs/target +/target # Coverage coverage diff --git a/.gitignore b/.gitignore index 8ad525d636..beb0b8df5c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,9 @@ packages/backend/.idea/vcs.xml node_modules report.*.json +# Cargo +/target + # Cypress cypress/screenshots cypress/videos diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 64b14985cd..0000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rust-analyzer.linkedProjects": [ - "packages/backend-rs/Cargo.toml" - ] -} diff --git a/packages/backend-rs/Cargo.lock b/Cargo.lock similarity index 100% rename from packages/backend-rs/Cargo.lock rename to Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000..5692b21c0a --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,28 @@ +[workspace] +members = ["packages/backend-rs"] +resolver = "2" + +[workspace.dependencies] +napi = { version = "2.16.2", default-features = false } +napi-derive = "2.16.2" +napi-build = "2.1.2" + +async-trait = "0.1.79" +basen = "0.1.0" +cfg-if = "1.0.0" +chrono = "0.4.37" +cuid2 = "0.1.2" +jsonschema = "0.17.1" +once_cell = "1.19.0" +parse-display = "0.9.0" +pretty_assertions = "1.4.0" +rand = "0.8.5" +schemars = "0.8.16" +sea-orm = "0.12.15" +serde = "1.0.197" +serde_json = "1.0.115" +thiserror = "1.0.58" +tokio = "1.37.0" + +[profile.release] +lto = true diff --git a/Dockerfile b/Dockerfile index b19001772a..f3681f4204 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,9 @@ RUN curl --proto '=https' --tlsv1.2 --silent --show-error --fail https://sh.rust ENV PATH="/root/.cargo/bin:${PATH}" # Copy only the cargo dependency-related files first, to cache efficiently +COPY Cargo.toml Cargo.toml +COPY Cargo.lock Cargo.lock COPY packages/backend-rs/Cargo.toml packages/backend-rs/Cargo.toml -COPY packages/backend-rs/Cargo.lock packages/backend-rs/Cargo.lock COPY packages/backend-rs/src/lib.rs packages/backend-rs/src/ # Install cargo dependencies diff --git a/docs/notice-for-admins.md b/docs/notice-for-admins.md index d831e38dd9..a768ee4c2b 100644 --- a/docs/notice-for-admins.md +++ b/docs/notice-for-admins.md @@ -19,7 +19,11 @@ The number of posts stored on your database can be found at `https://yourserver. ### For systemd/pm2 users -Please do not terminate `pnpm run migrate` even if it appears to be frozen. +- You can remove `packages/backend-rs/target`. + ```sh + rm --recursive --force packages/backend-rs/target + ``` +- Please do not terminate `pnpm run migrate` even if it appears to be frozen. ### For Docker/Podman users diff --git a/package.json b/package.json index ce9e8dc625..e454abdacd 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "format": "pnpm -r --parallel run format", "clean": "pnpm node ./scripts/clean-built.mjs", "clean-npm": "pnpm node ./scripts/clean-npm.mjs", - "clean-cargo": "pnpm node ./scripts/clean-cargo.mjs", + "clean-cargo": "cargo clean", "clean-all": "pnpm run clean && pnpm run clean-cargo && pnpm run clean-npm" }, "dependencies": { diff --git a/packages/backend-rs/Cargo.toml b/packages/backend-rs/Cargo.toml index 73f6ad0ce5..94d74f3a3c 100644 --- a/packages/backend-rs/Cargo.toml +++ b/packages/backend-rs/Cargo.toml @@ -12,31 +12,27 @@ napi = ["dep:napi", "dep:napi-derive"] crate-type = ["cdylib", "lib"] [dependencies] -async-trait = "0.1.79" -cfg-if = "1.0.0" -chrono = "0.4.37" -cuid2 = "0.1.2" -jsonschema = "0.17.1" -once_cell = "1.19.0" -parse-display = "0.9.0" -rand = "0.8.5" -schemars = { version = "0.8.16", features = ["chrono"] } -sea-orm = { version = "0.12.15", features = ["sqlx-postgres", "runtime-tokio-rustls"] } -serde = { version = "1.0.197", features = ["derive"] } -serde_json = "1.0.115" -thiserror = "1.0.58" -tokio = { version = "1.37.0", features = ["full"] } +napi = { workspace = true, optional = true, default-features = false, features = ["napi9", "tokio_rt", "chrono_date", "serde-json"] } +napi-derive = { workspace = true, optional = true } -# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix -napi = { version = "2.16.2", default-features = false, features = ["napi9", "tokio_rt", "chrono_date", "serde-json"], optional = true } -napi-derive = { version = "2.16.2", optional = true } -basen = "0.1.0" +async-trait = { workspace = true } +basen = { workspace = true } +cfg-if = { workspace = true } +chrono = { workspace = true } +cuid2 = { workspace = true } +jsonschema = { workspace = true } +once_cell = { workspace = true } +parse-display = { workspace = true } +rand = { workspace = true } +schemars = { workspace = true, features = ["chrono"] } +sea-orm = { workspace = true, features = ["sqlx-postgres", "runtime-tokio-rustls"] } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true, features = ["full"] } [dev-dependencies] -pretty_assertions = "1.4.0" +pretty_assertions = { workspace = true } [build-dependencies] -napi-build = "2.1.2" - -[profile.release] -lto = true +napi-build = { workspace = true } diff --git a/packages/backend-rs/index.js b/packages/backend-rs/index.js index c6967b424b..0d2953fac8 100644 --- a/packages/backend-rs/index.js +++ b/packages/backend-rs/index.js @@ -224,17 +224,32 @@ switch (platform) { } break case 'arm': - localFileExisted = existsSync( - join(__dirname, 'backend-rs.linux-arm-gnueabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./backend-rs.linux-arm-gnueabihf.node') - } else { - nativeBinding = require('backend-rs-linux-arm-gnueabihf') + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'backend-rs.linux-arm-musleabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./backend-rs.linux-arm-musleabihf.node') + } else { + nativeBinding = require('backend-rs-linux-arm-musleabihf') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'backend-rs.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./backend-rs.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('backend-rs-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e } - } catch (e) { - loadError = e } break case 'riscv64': diff --git a/scripts/clean-cargo.mjs b/scripts/clean-cargo.mjs deleted file mode 100644 index df48e5fd55..0000000000 --- a/scripts/clean-cargo.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import path, { join } from "node:path"; -import { fileURLToPath } from "node:url"; -import { execa } from "execa"; - -(async () => { - const __dirname = path.dirname(fileURLToPath(import.meta.url)); - - execa("cargo", ["clean"], { - cwd: join(__dirname, "/../packages/backend-rs"), - stdio: "inherit", - }); -})();