build_opencode.bat 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. @echo off
  2. setlocal EnableExtensions EnableDelayedExpansion
  3. rem Build opencode for multiple platforms and place binaries in both JetBrains and VSCode plugin resources.
  4. pushd "%~dp0\..\.."
  5. set "ROOT_DIR=%CD%"
  6. popd
  7. set "OPENCODE_DIR=%ROOT_DIR%\packages\opencode"
  8. set "DIST_DIR=%OPENCODE_DIR%\dist"
  9. set "JETBRAINS_BIN_DIR=%ROOT_DIR%\hosts\jetbrains-plugin\src\main\resources\bin"
  10. set "VSCODE_BIN_DIR=%ROOT_DIR%\hosts\vscode-plugin\resources\bin"
  11. if not exist "%OPENCODE_DIR%" (
  12. echo Error: opencode package directory not found at %OPENCODE_DIR% 1>&2
  13. exit /b 1
  14. )
  15. where bun >nul 2>nul
  16. if errorlevel 1 (
  17. echo Error: bun command not found in PATH 1>&2
  18. exit /b 1
  19. )
  20. call :prepare_output_dir "%JETBRAINS_BIN_DIR%"
  21. call :prepare_output_dir "%VSCODE_BIN_DIR%"
  22. echo => Building opencode distribution
  23. pushd "%OPENCODE_DIR%"
  24. bun script/build.ts
  25. if errorlevel 1 (
  26. popd
  27. exit /b 1
  28. )
  29. popd
  30. if not exist "%DIST_DIR%" (
  31. echo Error: expected dist directory not found at %DIST_DIR% 1>&2
  32. exit /b 1
  33. )
  34. set "FOUND_DIST=false"
  35. for /d %%D in ("%DIST_DIR%\opencode-*") do (
  36. call :process_dist "%%~fD"
  37. )
  38. if /I "%FOUND_DIST%"=="false" (
  39. echo Error: no opencode distribution folders found in %DIST_DIR% 1>&2
  40. exit /b 1
  41. )
  42. echo.
  43. echo All done. Binaries placed under:
  44. echo JetBrains: %JETBRAINS_BIN_DIR%
  45. echo VSCode: %VSCODE_BIN_DIR%
  46. echo opencode dists remain in %DIST_DIR%
  47. exit /b 0
  48. :process_dist
  49. set "DIST_PATH=%~1"
  50. if not exist "%DIST_PATH%" exit /b
  51. set "DIRNAME=%~nx1"
  52. set "SUFFIX=%DIRNAME:opencode-=%"
  53. if /I "%SUFFIX%"=="%DIRNAME%" (
  54. echo Warning: skipping unrecognised dist folder %DIRNAME% 1>&2
  55. exit /b
  56. )
  57. set "OS="
  58. set "ARCH="
  59. for /f "tokens=1* delims=-" %%a in ("%SUFFIX%") do (
  60. set "OS=%%a"
  61. set "ARCH=%%b"
  62. )
  63. if not defined ARCH (
  64. echo Warning: skipping %DIRNAME% due to missing architecture component 1>&2
  65. exit /b
  66. )
  67. if /I "%ARCH%"=="x64-baseline" (
  68. echo Skipping baseline target %DIRNAME%
  69. exit /b
  70. )
  71. set "OS_DIR=%OS%"
  72. if /I "%OS_DIR%"=="darwin" set "OS_DIR=macos"
  73. set "ARCH_DIR=%ARCH%"
  74. if /I "%ARCH_DIR%"=="x64" set "ARCH_DIR=amd64"
  75. set "BINARY_NAME=opencode"
  76. set "BINARY_SRC=%DIST_PATH%\bin\opencode"
  77. if /I "%OS%"=="windows" (
  78. set "BINARY_NAME=opencode.exe"
  79. set "BINARY_SRC=%DIST_PATH%\bin\opencode.exe"
  80. )
  81. if not exist "%BINARY_SRC%" (
  82. echo Warning: binary not found at %BINARY_SRC% 1>&2
  83. exit /b
  84. )
  85. set "JETBRAINS_TARGET=%JETBRAINS_BIN_DIR%\%OS_DIR%\%ARCH_DIR%"
  86. set "VSCODE_TARGET=%VSCODE_BIN_DIR%\%OS_DIR%\%ARCH_DIR%"
  87. if not exist "%JETBRAINS_TARGET%" mkdir "%JETBRAINS_TARGET%"
  88. if not exist "%VSCODE_TARGET%" mkdir "%VSCODE_TARGET%"
  89. copy /Y "%BINARY_SRC%" "%JETBRAINS_TARGET%\%BINARY_NAME%" >nul
  90. copy /Y "%BINARY_SRC%" "%VSCODE_TARGET%\%BINARY_NAME%" >nul
  91. echo => Prepared binaries for %OS%/%ARCH%
  92. set "FOUND_DIST=true"
  93. exit /b
  94. :prepare_output_dir
  95. set "TARGET=%~1"
  96. if "%TARGET%"=="" (
  97. echo Error: output directory path is empty 1>&2
  98. exit /b 1
  99. )
  100. if exist "%TARGET%" rd /s /q "%TARGET%"
  101. mkdir "%TARGET%"
  102. exit /b 0