dev: create virtual rust workspace in the repository root

Co-authored-by: naskya <m@naskya.net>
This commit is contained in:
sup39 2024-01-31 19:32:56 +09:00 committed by naskya
parent 8dc96a3195
commit 18aeeaabd2
Signed by: naskya
GPG key ID: 712D413B3A9FED5C
12 changed files with 89 additions and 67 deletions

View file

@ -45,6 +45,8 @@ Dockerfile
docker-compose.yml docker-compose.yml
docker-compose.example.yml docker-compose.example.yml
/target
/dev /dev
/docs /docs
/neko /neko

3
.gitignore vendored
View file

@ -73,9 +73,10 @@ yarn*
.devenv .devenv
.direnv .direnv
# Cargo cache for Docker # Cargo
/.cargo-cache /.cargo-cache
/.cargo-target /.cargo-target
/target
# Custom # Custom
custom/ custom/

35
Cargo.toml Normal file
View file

@ -0,0 +1,35 @@
[workspace]
members = ["packages/backend-rs"]
resolver = "2"
[workspace.dependencies]
napi = { version = "2.15.0", default-features = false }
napi-build = "2.1.0"
napi-derive = "2.15.0"
argon2 = "0.5.3"
async-trait = "0.1.77"
basen = "0.1.0"
bcrypt = "0.15.0"
cfg-if = "1.0.0"
chrono = "0.4.33"
cuid2 = "0.1.2"
idna = "0.5.0"
jsonschema = "0.17.1"
once_cell = "1.19.0"
parse-display = "0.8.2"
pretty_assertions = "1.4.0"
rand = "0.8.5"
regex = "1.10.3"
schemars = "0.8.16"
sea-orm = "0.12.12"
serde ="1.0.196"
serde_json = "1.0.113"
serde_yaml = "0.9.31"
thiserror = "1.0.56"
tokio = "1.35.1"
url = "2.5.0"
urlencoding = "2.1.3"
[profile.release]
lto = true

View file

@ -10,9 +10,13 @@ PACKAGE_JSONS += packages/firefish-js/package.json
PACKAGE_JSONS += packages/megalodon/package.json PACKAGE_JSONS += packages/megalodon/package.json
PACKAGE_JSONS += packages/sw/package.json PACKAGE_JSONS += packages/sw/package.json
RUST_DIR := packages/backend-rs CARGO_TOMLS := Cargo.toml
RUSTY_STUFF := $(call recursive_wildcard, $(RUST_DIR)/src, *) CARGO_TOMLS += packages/backend-rs/Cargo.toml
RUSTY_STUFF += $(RUST_DIR)/Cargo.toml
RUST_BE_DIR := packages/backend-rs
RUST_BE_SRC := Cargo.toml
RUST_BE_SRC += $(RUST_BE_DIR)/Cargo.toml
RUST_BE_SRC += $(call recursive_wildcard, $(RUST_BE_DIR)/src, *)
MIGRATIONS := $(foreach dir, packages/backend/migration, $(wildcard $(dir)/*)) MIGRATIONS := $(foreach dir, packages/backend/migration, $(wildcard $(dir)/*))
MIGRATIONS += $(foreach dir, packages/backend/migration-neko, $(wildcard $(dir)/*)) MIGRATIONS += $(foreach dir, packages/backend/migration-neko, $(wildcard $(dir)/*))
@ -50,13 +54,13 @@ $(T)/test-revert: neko/revert.sql $(MIGRATIONS)
.PHONY: update-lockfiles .PHONY: update-lockfiles
update-lockfiles: pnpm-lock.yaml $(RUST_DIR)/Cargo.lock update-lockfiles: pnpm-lock.yaml Cargo.lock
pnpm-lock.yaml: pnpm-workspace.yaml $(PACKAGE_JSONS) pnpm-lock.yaml: pnpm-workspace.yaml $(PACKAGE_JSONS)
pnpm install pnpm install
$(RUST_DIR)/Cargo.lock: $(RUST_DIR)/Cargo.toml Cargo.lock: $(CARGO_TOMLS)
cd $(RUST_DIR) && cargo update cargo update
.PHONY: run .PHONY: run
@ -81,9 +85,9 @@ format:
.PHONY: rust-lint .PHONY: rust-lint
rust-lint: $(T)/rust-lint rust-lint: $(T)/rust-be-lint
$(T)/rust-lint: $(RUSTY_STUFF) $(T)/rust-be-lint: $(RUST_BE_SRC)
pnpm --filter='backend-rs' run lint pnpm --filter='backend-rs' run lint
touch $@ touch $@
@ -93,7 +97,7 @@ regenerate-entities: $(T)/regenerate-entities
$(T)/regenerate-entities: $(MIGRATIONS) $(T)/regenerate-entities: $(MIGRATIONS)
pnpm run migrate pnpm run migrate
cd $(RUST_DIR) && \ cd $(RUST_BE_DIR) && \
sea-orm-cli generate entity \ sea-orm-cli generate entity \
--output-dir='src/model/entity' \ --output-dir='src/model/entity' \
--database-url='postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@$(POSTGRES_HOST_PORT)/$(POSTGRES_DB)' \ --database-url='postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@$(POSTGRES_HOST_PORT)/$(POSTGRES_DB)' \
@ -106,15 +110,15 @@ $(T)/regenerate-entities: $(MIGRATIONS)
sed -i "s/NAPI_EXTRA_ATTR_PLACEHOLDER/$${attribute}/" "$${file}"; \ sed -i "s/NAPI_EXTRA_ATTR_PLACEHOLDER/$${attribute}/" "$${file}"; \
done done
sed -i 's/#\[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)\]/#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum)]\n#[napi_derive::napi]/' \ sed -i 's/#\[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)\]/#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum)]\n#[napi_derive::napi]/' \
$(RUST_DIR)/src/model/entity/sea_orm_active_enums.rs $(RUST_BE_DIR)/src/model/entity/sea_orm_active_enums.rs
touch $@ touch $@
neko/index.js: $(RUSTY_STUFF) neko/index.js: $(RUST_BE_SRC)
pnpm --filter='backend-rs' run build:debug pnpm --filter='backend-rs' run build:debug
[ -f $(RUST_DIR)/built/index.js ] [ -f $(RUST_BE_DIR)/built/index.js ]
rm neko/index.js rm neko/index.js
cp $(RUST_DIR)/built/index.js neko/index.js cp $(RUST_BE_DIR)/built/index.js neko/index.js
.PHONY: build-image .PHONY: build-image

View file

@ -14,3 +14,6 @@ if [ -d packages/backend/native-utils ]; then
rm --recursive --force packages/backend/native-utils/target rm --recursive --force packages/backend/native-utils/target
rmdir packages/backend/native-utils || : rmdir packages/backend/native-utils || :
fi fi
# create virtual workspace
rm --recursive --force packages/backend-rs/target

View file

@ -28,7 +28,7 @@
"build:debug": "pnpm clean && pnpm --filter backend-rs run build:debug && pnpm --filter firefish-js run build:debug && pnpm --filter firefish-js run build:types && pnpm --filter !firefish-js --filter !backend-rs -r --parallel run build:debug && pnpm run gulp", "build:debug": "pnpm clean && pnpm --filter backend-rs run build:debug && pnpm --filter firefish-js run build:debug && pnpm --filter firefish-js run build:types && pnpm --filter !firefish-js --filter !backend-rs -r --parallel run build:debug && pnpm run gulp",
"format": "pnpm -r --parallel run format", "format": "pnpm -r --parallel run format",
"clean": "pnpm node ./scripts/clean-built.mjs", "clean": "pnpm node ./scripts/clean-built.mjs",
"clean-cargo": "pnpm node ./scripts/clean-cargo.mjs", "clean-cargo": "cargo clean",
"clean-npm": "pnpm node ./scripts/clean-npm.mjs", "clean-npm": "pnpm node ./scripts/clean-npm.mjs",
"clean-all": "pnpm run clean && pnpm run clean-cargo && pnpm run clean-npm", "clean-all": "pnpm run clean && pnpm run clean-cargo && pnpm run clean-npm",
"cleanall": "pnpm run clean-all" "cleanall": "pnpm run clean-all"

View file

@ -3,46 +3,38 @@ edition = "2021"
name = "backend-rs" name = "backend-rs"
version = "0.0.0" version = "0.0.0"
[features]
default = ["napi"]
napi = ["dep:napi-derive"]
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]
[dependencies] [dependencies]
async-trait = "0.1.77" napi = { workspace = true, default-features = false, features = ["napi9", "tokio_rt", "chrono_date", "serde-json"] }
cfg-if = "1.0.0" napi-derive = { workspace = true }
chrono = "0.4.33"
cuid2 = "0.1.2"
idna = "0.5.0"
jsonschema = "0.17.1"
once_cell = "1.19.0"
parse-display = "0.8.2"
rand = "0.8.5"
regex = "1.10.3"
schemars = { version = "0.8.16", features = ["chrono"] }
sea-orm = { version = "0.12.12", features = ["sqlx-postgres", "runtime-tokio-rustls"] }
serde = { version = "1.0.196", features = ["derive"] }
serde_json = "1.0.113"
serde_yaml = "0.9.31"
thiserror = "1.0.56"
tokio = { version = "1.35.1", features = ["full"] }
url = "2.5.0"
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix argon2 = { workspace = true }
napi = { version = "2.15.0", default-features = false, features = ["napi9", "tokio_rt", "chrono_date", "serde-json"] } async-trait = { workspace = true }
napi-derive = { version = "2.15.0", optional = true } basen = { workspace = true }
basen = "0.1.0" bcrypt = { workspace = true }
urlencoding = "2.1.3" cfg-if = { workspace = true }
argon2 = "0.5.3" chrono = { workspace = true }
bcrypt = "0.15.0" cuid2 = { workspace = true }
idna = { workspace = true }
jsonschema = { workspace = true }
once_cell = { workspace = true }
parse-display = { workspace = true }
rand = { workspace = true }
regex = { 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 }
serde_yaml = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["full"] }
url = { workspace = true }
urlencoding = { workspace = true }
[dev-dependencies] [dev-dependencies]
pretty_assertions = "1.4.0" pretty_assertions = { workspace = true }
[build-dependencies] [build-dependencies]
napi-build = "2.1.0" napi-build = { workspace = true }
[profile.release]
lto = true

View file

@ -31,8 +31,8 @@
}, },
"scripts": { "scripts": {
"artifacts": "napi artifacts", "artifacts": "napi artifacts",
"build": "napi build --features napi --platform --release ./built/", "build": "napi build --platform --release ./built/",
"build:debug": "napi build --features napi --platform ./built/", "build:debug": "napi build --platform ./built/",
"prepublishOnly": "napi prepublish -t npm", "prepublishOnly": "napi prepublish -t npm",
"universal": "napi universal", "universal": "napi universal",
"version": "napi version", "version": "napi version",

View file

@ -1,9 +1,7 @@
pub mod config; pub mod config;
pub mod database; pub mod database;
pub mod macros; pub mod macros;
pub mod mastodon_api;
pub mod model; pub mod model;
pub mod prelude; pub mod prelude;
pub mod util; pub mod util;
// #[cfg(feature = "napi")]
pub mod mastodon_api;

View file

@ -1,7 +1,6 @@
#[macro_export] #[macro_export]
macro_rules! impl_napi_error_from { macro_rules! impl_napi_error_from {
($a:ty) => { ($a:ty) => {
#[cfg(feature = "napi")]
impl From<$a> for napi::Error { impl From<$a> for napi::Error {
fn from(reason: $a) -> napi::Error { fn from(reason: $a) -> napi::Error {
napi::Error::from_reason(reason.to_string()) napi::Error::from_reason(reason.to_string())

View file

@ -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",
});
})();