@@ -7,6 +7,14 @@ no_pattern := ""
77default :
88 just --list
99
10+ # List all available platforms from matrix.json
11+ list-platforms :
12+ #!/usr/bin/env bash
13+ set -euxo pipefail
14+
15+ echo " Available platforms:"
16+ cat .github/ workflows/ matrix.json | jq -r ' .[] | "\(.NAME) (target: \(.TARGET), os: \(.OS))"'
17+
1018# ==============================================================================
1119# Onboarding
1220# ==============================================================================
@@ -162,36 +170,70 @@ watch-fluid:
162170# Build
163171# ==============================================================================
164172
165- # Build the npm package and rust binary package for mac
166- build-local :
173+
174+
175+ # Build the npm package and rust binary package for a specific platform
176+ build-for-platform name :
167177 #!/usr/bin/env bash
168178 set -euxo pipefail
169179
180+ # Read platform details from matrix.json
181+ PLATFORM_JSON=$(cat .github/ workflows/ matrix.json | jq -r --arg name " {{ name}} " ' .[] | select(.NAME == $name)' )
182+
183+ if [ -z " $PLATFORM_JSON" ]; then
184+ echo " Platform '{{ name}} ' not found in matrix.json"
185+ exit 1
186+ fi
187+
188+ TARGET=$(echo " $PLATFORM_JSON" | jq -r ' .TARGET' )
189+ OS=$(echo " $PLATFORM_JSON" | jq -r ' .OS' )
190+
191+ echo " Building for platform: {{ name}} "
192+ echo " Target: $TARGET"
193+ echo " OS: $OS"
194+
170195 rm -rf npm/ packages
171- cargo build --release --locked --target x86 _64 -apple-darwin
172- just --dotenv-filename .env .darwin-x64 create-npm-binary-package
173- just --dotenv-filename .env .darwin-x64 create-npm-root-package
174- just patch-local
196+ cargo build --release --locked --target " $TARGET"
197+
198+ # Set environment variables for npm package creation
199+ export TARGET=" $TARGET"
200+ export NODE_PKG_NAME=" syncpack-{{ name}} "
201+ export NODE_PKG_DIR_PATH=" npm/packages/syncpack-{{ name}} "
202+ export RUST_BINARY_PATH=" target/$TARGET/release/syncpack$(if [[ " $TARGET" == *" windows" * ]]; then echo " .exe" ; fi)"
203+ export NODE_PKG_RUST_BINARY_PATH=" $NODE_PKG_DIR_PATH/bin/syncpack$(if [[ " $TARGET" == *" windows" * ]]; then echo " .exe" ; fi)"
204+ export NODE_OS=$(echo " {{ name}} " | cut -d' -' -f1)
205+ export NODE_ARCH=$(echo " {{ name}} " | cut -d' -' -f2)
206+ export NODE_ROOT_PKG_DIR_PATH=" npm/packages/syncpack"
207+
208+ just create-npm-binary-package
209+ just create-npm-root-package
210+ just patch-for-platform {{ name}}
175211 cd npm/ packages/ syncpack
176212 npm install
177213
178- # Modify the local package.json file to only have a mac optionalDependency
179- patch-local :
214+ # Modify the local package.json file to only have the specified platform's optionalDependency
215+ patch-for-platform name :
180216 #!/usr/bin/env node
181217 const fs = require (" fs" );
182218 const path = require (" path" );
183219 const srcPath = path.resolve(" npm/packages/syncpack/package.json" );
184220 const pkg = require (srcPath);
221+ const platformName = " {{ name}} " ;
222+ const optionalDepName = ` syncpack-${platformName} ` ;
185223 const nextPkg = {
186224 ...pkg,
187225 optionalDependencies: {
188- " syncpack-darwin-x64" : " file:../syncpack-darwin-x64"
226+ [optionalDepName]: ` file:../${optionalDepName} `
189227 }
190228 };
191229 const json = JSON.stringify(nextPkg, null, 2 );
192230 console.log(json);
193231 fs.writeFileSync(srcPath, json);
194232
233+ # Modify the local package.json file to only have a mac optionalDependency (legacy command)
234+ patch-local :
235+ just patch-for-platform darwin-x64
236+
195237# Build a rust binary and corresponding npm package for a specific target
196238build-binary-package :
197239 just create-rust-binary
0 commit comments