@@ -5,79 +5,20 @@ import type { PlatformError } from "@effect/platform/Error"
55import { Duration , Effect , pipe , Schedule } from "effect"
66
77import { runCommandCapture , runCommandExitCode , runCommandWithExitCodes } from "./command-runner.js"
8- import { resolveDockerVolumeHostPath } from "./docker-auth.js"
8+ import { composeSpec , resolveDockerComposeEnv } from "./docker-compose-env.js"
9+ import { parseInspectNetworkEntry } from "./docker-inspect-parse.js"
910import { CommandFailedError , DockerCommandError } from "./errors.js"
1011
1112export { classifyDockerAccessIssue , ensureDockerDaemonAccess } from "./docker-daemon-access.js"
1213export { parseDockerPublishedHostPorts , runDockerPsPublishedHostPorts } from "./docker-published-ports.js"
1314
14- const composeSpec = ( cwd : string , args : ReadonlyArray < string > ) => ( {
15- cwd,
16- command : "docker" ,
17- args : [ "compose" , "--ansi" , "never" , "--progress" , "plain" , ...args ]
18- } )
19-
20- const resolveEnvValue = ( key : string ) : string | null => {
21- const value = process . env [ key ] ?. trim ( )
22- return value && value . length > 0 ? value : null
23- }
24-
25- const trimTrailingSlash = ( value : string ) : string => {
26- let end = value . length
27- while ( end > 0 ) {
28- const char = value [ end - 1 ]
29- if ( char !== "/" && char !== "\\" ) {
30- break
31- }
32- end -= 1
33- }
34- return value . slice ( 0 , end )
35- }
36-
37- const resolveProjectsRootCandidate = ( ) : string | null => {
38- const explicit = resolveEnvValue ( "DOCKER_GIT_PROJECTS_ROOT" )
39- if ( explicit !== null ) {
40- return explicit
41- }
42-
43- const home = resolveEnvValue ( "HOME" ) ?? resolveEnvValue ( "USERPROFILE" )
44- return home === null ? null : `${ trimTrailingSlash ( home ) } /.docker-git`
45- }
46-
47- const resolveComposeEnv = (
48- cwd : string
49- ) : Effect . Effect < Readonly < Record < string , string > > , never , CommandExecutor . CommandExecutor > =>
50- Effect . gen ( function * ( _ ) {
51- const projectsRoot = resolveProjectsRootCandidate ( )
52- if ( projectsRoot === null ) {
53- return { }
54- }
55-
56- const remappedProjectsRoot = yield * _ ( resolveDockerVolumeHostPath ( cwd , projectsRoot ) )
57- return remappedProjectsRoot === projectsRoot ? { } : { DOCKER_GIT_PROJECTS_ROOT_HOST : remappedProjectsRoot }
58- } )
59-
60- const parseInspectNetworkEntry = ( line : string ) : ReadonlyArray < readonly [ string , string ] > => {
61- const idx = line . indexOf ( "=" )
62- if ( idx <= 0 ) {
63- return [ ]
64- }
65- const network = line . slice ( 0 , idx ) . trim ( )
66- const ip = line . slice ( idx + 1 ) . trim ( )
67- if ( network . length === 0 || ip . length === 0 ) {
68- return [ ]
69- }
70- const entry : readonly [ string , string ] = [ network , ip ]
71- return [ entry ]
72- }
73-
7415const runCompose = (
7516 cwd : string ,
7617 args : ReadonlyArray < string > ,
7718 okExitCodes : ReadonlyArray < number >
7819) : Effect . Effect < void , DockerCommandError | PlatformError , CommandExecutor . CommandExecutor > =>
7920 Effect . gen ( function * ( _ ) {
80- const env = yield * _ ( resolveComposeEnv ( cwd ) )
21+ const env = yield * _ ( resolveDockerComposeEnv ( cwd ) )
8122 yield * _ (
8223 runCommandWithExitCodes (
8324 {
@@ -96,7 +37,7 @@ const runComposeCapture = (
9637 okExitCodes : ReadonlyArray < number >
9738) : Effect . Effect < string , DockerCommandError | PlatformError , CommandExecutor . CommandExecutor > =>
9839 Effect . gen ( function * ( _ ) {
99- const env = yield * _ ( resolveComposeEnv ( cwd ) )
40+ const env = yield * _ ( resolveDockerComposeEnv ( cwd ) )
10041 return yield * _ (
10142 runCommandCapture (
10243 {
0 commit comments