mirror of
https://example.com
synced 2024-11-22 06:16:38 +09:00
dev: create virtual rust workspace in the repository root
Co-authored-by: naskya <m@naskya.net>
This commit is contained in:
parent
8dc96a3195
commit
18aeeaabd2
12 changed files with 89 additions and 67 deletions
|
@ -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
3
.gitignore
vendored
|
@ -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/
|
||||||
|
|
0
packages/backend-rs/Cargo.lock → Cargo.lock
generated
0
packages/backend-rs/Cargo.lock → Cargo.lock
generated
35
Cargo.toml
Normal file
35
Cargo.toml
Normal 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
|
30
Makefile
30
Makefile
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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;
|
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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",
|
|
||||||
});
|
|
||||||
})();
|
|
Loading…
Reference in a new issue