Skip to content

Commit ecc699b

Browse files
committed
fix(toolchain): mark external deps
1 parent 184d5a4 commit ecc699b

File tree

3 files changed

+59
-38
lines changed

3 files changed

+59
-38
lines changed

packages/toolchain/cli/src/util/deploy.rs

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pub async fn deploy(opts: DeployOpts<'_>) -> Result<Vec<Uuid>> {
127127

128128
// Setup Rivetkit
129129
let mut _rivet_actor_tempfiles = Vec::new();
130-
let mut _rivet_actor_tempdirs = Vec::new();
130+
// let mut _rivet_actor_tempdirs = Vec::new();
131131
if let Some(rivetkit) = &root.rivetkit {
132132
// Create service token
133133
let service_token =
@@ -175,37 +175,42 @@ pub async fn deploy(opts: DeployOpts<'_>) -> Result<Vec<Uuid>> {
175175
.await?;
176176

177177
// Determine server runtime
178-
let function_build = if rivetkit.build.image.is_some()
179-
|| rivetkit.build.dockerfile.is_some()
180-
{
181-
// Use user-provided Docker config
182-
rivetkit.build.clone()
183-
} else {
184-
// Auto-generate server Dockerfile
185-
//
186-
// Has to be in the project path in order to use NPM dependencies
187-
let dockerfile_tempdir = tempfile::Builder::new().prefix("rivet-server-").tempdir()?;
188-
let dockerfile_path = dockerfile_tempdir.path().join("Dockerfile");
189-
let dockerignore_path = dockerfile_tempdir.path().join("Dockerfile.dockerignore");
190-
_rivet_actor_tempdirs.push(dockerfile_tempdir);
191-
192-
let server_path = rivetkit.server.clone();
193-
tokio::fs::write(
194-
&dockerfile_path,
195-
generate_server_dockerfile(&project_root, server_path),
196-
)
197-
.await?;
198-
tokio::fs::write(&dockerignore_path, generate_server_dockerignore()).await?;
199-
200-
toolchain::config::build::docker::Build {
201-
dockerfile: Some(dockerfile_path.display().to_string()),
202-
build_path: Some(project_root.display().to_string()),
203-
image: None,
204-
build_target: None,
205-
build_args: None,
206-
unstable: rivetkit.build.unstable.clone(),
207-
}
208-
};
178+
let function_build =
179+
if rivetkit.build.image.is_some() || rivetkit.build.dockerfile.is_some() {
180+
// Use user-provided Docker config
181+
rivetkit.build.clone()
182+
} else {
183+
// Auto-generate server Dockerfile
184+
//
185+
// Has to be in the project path in order to use NPM dependencies
186+
//
187+
// Preserve the paths because we want to be able to let the user to test the Dockerfile
188+
// that's printed out
189+
let dockerfile_tempdir = tempfile::Builder::new()
190+
.prefix("rivet-server-")
191+
.tempdir()?
192+
.into_path();
193+
let dockerfile_path = dockerfile_tempdir.join("Dockerfile");
194+
let dockerignore_path = dockerfile_tempdir.join("Dockerfile.dockerignore");
195+
// _rivet_actor_tempdirs.push(dockerfile_tempdir);
196+
197+
let server_path = rivetkit.server.clone();
198+
tokio::fs::write(
199+
&dockerfile_path,
200+
generate_server_dockerfile(&project_root, server_path),
201+
)
202+
.await?;
203+
tokio::fs::write(&dockerignore_path, generate_server_dockerignore()).await?;
204+
205+
toolchain::config::build::docker::Build {
206+
dockerfile: Some(dockerfile_path.display().to_string()),
207+
build_path: Some(project_root.display().to_string()),
208+
image: None,
209+
build_target: None,
210+
build_args: None,
211+
unstable: rivetkit.build.unstable.clone(),
212+
}
213+
};
209214

210215
// Add function
211216
root.functions.insert(
@@ -716,8 +721,6 @@ fn generate_dockerfile_for_package_manager(
716721
package_manager: &PackageManager,
717722
server_path_js: &str,
718723
) -> String {
719-
let copy_files = package_manager.copy_files.join(" ");
720-
721724
// Determine package manager specific configurations
722725
let (base_image, setup_commands, build_cmd, runtime_cmd, add_deps_cmd) = match package_manager.name.as_str() {
723726
"yarn" => (
@@ -732,7 +735,7 @@ fn generate_dockerfile_for_package_manager(
732735
"",
733736
"bunx tsc --outDir dist/ --rootDir ./",
734737
"bun run",
735-
"bun add @hono/node-server @hono/node-ws"
738+
"echo noop"
736739
),
737740
"pnpm" => (
738741
"node:22-alpine",
@@ -753,6 +756,7 @@ fn generate_dockerfile_for_package_manager(
753756
let mut dockerfile = String::new();
754757

755758
// Builder stage
759+
let copy_files = package_manager.copy_files.join(" ");
756760
dockerfile.push_str(&format!("FROM {} AS builder\n\n", base_image));
757761
dockerfile.push_str("WORKDIR /app\n\n");
758762
dockerfile.push_str(&format!("# Copy package files\nCOPY {} ./\n\n", copy_files));
@@ -793,9 +797,14 @@ fn generate_dockerfile_for_package_manager(
793797
dockerfile.push_str("\n\n");
794798
}
795799

800+
let app_copy_files = package_manager
801+
.copy_files
802+
.iter()
803+
.map(|x| format!("/app/{x}"))
804+
.collect::<Vec<_>>()
805+
.join(" ");
796806
dockerfile.push_str(&format!(
797-
"COPY --from=builder --chown=rivet:rivet /app/{} ./\n\n",
798-
copy_files
807+
"COPY --from=builder --chown=rivet:rivet {app_copy_files} ./\n\n"
799808
));
800809

801810
// Install production dependencies

packages/toolchain/js-utils-embed/js/src/tasks/build/build.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export async function build(input: Input): Promise<Output> {
5454
stdLibBrowser[ `node:${packageName}` ] = packagePath;
5555
}
5656

57+
console.log('foo')
58+
5759
const result = await esbuild.build({
5860
absWorkingDir: input.projectRoot,
5961
entryPoints: [input.entryPoint],
@@ -67,6 +69,11 @@ export async function build(input: Input): Promise<Output> {
6769
inject: [stdLibInject],
6870
plugins: [stdLibPlugin(stdLibBrowser)],
6971
external: [
72+
"node:*",
73+
"node:fs",
74+
"node:fs/promises",
75+
"fs",
76+
"fs/promises",
7077
// Wasm must be loaded as a separate file manually, cannot be bundled
7178
"*.wasm",
7279
"*.wasm?module",

packages/toolchain/js-utils-embed/js/src/tasks/build/preset.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ const nodeCompatModules = [
3636
//"url",
3737
//"util/types",
3838
//"zlib",
39+
"fs",
40+
"fs/promises",
3941
];
4042

4143
// Modules implemented via a mix of workerd APIs and polyfills.
@@ -48,6 +50,9 @@ const hybridNodeCompatModules = [
4850
"util",
4951
];
5052

53+
const externalModules = nodeCompatModules.flatMap((p) => [p, `node:${p}`])
54+
console.log('modules', externalModules);
55+
5156
export const rivetPreset: Preset = {
5257
meta: {
5358
name: "unenv:rivet",
@@ -86,5 +91,5 @@ export const rivetPreset: Preset = {
8691
//process: "@cloudflare/unenv-preset/runtime/node/process/index",
8792
},
8893
polyfill: [],
89-
external: nodeCompatModules.flatMap((p) => [p, `node:${p}`]),
94+
externa: nodeCompatModules.flatMap((p) => [p, `node:${p}`]),
9095
};

0 commit comments

Comments
 (0)