@radhya/mach 1.4.15 → 1.4.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -14
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -269,11 +269,8 @@ touch /opt/mach-prewarmed
|
|
|
269
269
|
echo "Build orchestrator finished. Auto-terminating instance in 5 seconds..."
|
|
270
270
|
sleep 5
|
|
271
271
|
sudo shutdown -h now
|
|
272
|
-
`;var Si=async(e,n,t={},i)=>{let o=Wn(),r=e.buildProfile||"production",a=r==="production",c=e.apk===!0,s=a?"bundleRelease":"assembleRelease",l=e.buildCommand||(c?"assembleRelease":s),d=e.nodeVersion
|
|
273
|
-
|
|
274
|
-
nvm install ${e.nodeVersion} 2>/dev/null || true
|
|
275
|
-
nvm use ${e.nodeVersion}
|
|
276
|
-
echo "Switched to Node $(node -v) via nvm"`:"",u=hi.replace(/\{\{BUILD_ID\}\}/g,n).replace(/\{\{BUILD_COMMAND\}\}/g,l).replace("{{NODE_VERSION_SETUP}}",d).replace("{{ENV_VARS}}",`
|
|
272
|
+
`;var Si=async(e,n,t={},i)=>{let o=Wn(),r=e.buildProfile||"production",a=r==="production",c=e.apk===!0,s=a?"bundleRelease":"assembleRelease",l=e.buildCommand||(c?"assembleRelease":s),d=e.nodeVersion?['export NVM_DIR="$HOME/.nvm"','[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"',`nvm install ${e.nodeVersion} 2>/dev/null || true`,`nvm use ${e.nodeVersion}`,'export PATH="$NVM_BIN:$PATH"','echo "[NODE] Using Node $(node -v) at $(which node)"'].join(`
|
|
273
|
+
`):"",u=hi.replace(/\{\{BUILD_ID\}\}/g,n).replace(/\{\{BUILD_COMMAND\}\}/g,l).replace("{{NODE_VERSION_SETUP}}",d).replace("{{ENV_VARS}}",`
|
|
277
274
|
export MACH_APP_NAME="${e.appName||"App"}"
|
|
278
275
|
export MACH_BUILD_PROFILE="${r}"
|
|
279
276
|
{{ENV_VARS}}
|
|
@@ -297,7 +294,10 @@ if [ -f "$HOME/.bash_profile" ]; then source "$HOME/.bash_profile"; fi
|
|
|
297
294
|
if [ -f "$HOME/.bashrc" ]; then source "$HOME/.bashrc"; fi
|
|
298
295
|
set -e
|
|
299
296
|
|
|
300
|
-
# 3.
|
|
297
|
+
# 3. Node version switch (must happen before any npm/node usage)
|
|
298
|
+
{{NODE_VERSION_SETUP}}
|
|
299
|
+
|
|
300
|
+
# 4. Forward environment variables (includes PRESIGNED_* URLs + project secrets)
|
|
301
301
|
{{ENV_VARS}}
|
|
302
302
|
|
|
303
303
|
BUILD_ID="{{BUILD_ID}}"
|
|
@@ -336,9 +336,6 @@ unzip -o -q source.zip
|
|
|
336
336
|
|
|
337
337
|
echo "[STEP_START:deps] $(date +%s)"
|
|
338
338
|
|
|
339
|
-
# --- Node Version Switch ---
|
|
340
|
-
{{NODE_VERSION_SETUP}}
|
|
341
|
-
|
|
342
339
|
# --- DERIVED DATA SETUP ---
|
|
343
340
|
export DERIVED_DATA_PATH="{{REMOTE_DIR}}/DerivedData"
|
|
344
341
|
mkdir -p "$DERIVED_DATA_PATH"
|
|
@@ -374,6 +371,7 @@ if [ ! -d "node_modules" ] || [ -z "$(ls -A node_modules 2>/dev/null)" ]; then
|
|
|
374
371
|
fi
|
|
375
372
|
|
|
376
373
|
# Install Dependencies
|
|
374
|
+
echo "[NODE] Active: $(node -v) | $(which node)"
|
|
377
375
|
if [ -f "yarn.lock" ]; then
|
|
378
376
|
echo "Running yarn install..."
|
|
379
377
|
yarn install --ignore-engines --prefer-offline || exit 1
|
|
@@ -717,11 +715,8 @@ fi
|
|
|
717
715
|
`);o.message("Generating macOS build script...");let O=process.env.CODEARTIFACT_AUTH_TOKEN?`export CODEARTIFACT_AUTH_TOKEN="${process.env.CODEARTIFACT_AUTH_TOKEN}"
|
|
718
716
|
`:"";if(t)for(let[I,b]of Object.entries(t)){let R=b.replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`");O+=`export ${I}="${R}"
|
|
719
717
|
`}let L=[O,P.logUpload?`export PRESIGNED_LOG_UPLOAD="${P.logUpload}"`:"",P.doneMarker?`export PRESIGNED_DONE_MARKER="${P.doneMarker}"`:"",P.cacheDerivedDataDownload?`export PRESIGNED_CACHE_DD_DOWNLOAD="${P.cacheDerivedDataDownload}"`:"",P.cacheDerivedDataUpload?`export PRESIGNED_CACHE_DD_UPLOAD="${P.cacheDerivedDataUpload}"`:"",P.cacheNodeModulesDownload?`export PRESIGNED_CACHE_NODE_DOWNLOAD="${P.cacheNodeModulesDownload}"`:"",P.cacheNodeModulesUpload?`export PRESIGNED_CACHE_NODE_UPLOAD="${P.cacheNodeModulesUpload}"`:"",P.cachePodsDownload?`export PRESIGNED_CACHE_PODS_DOWNLOAD="${P.cachePodsDownload}"`:"",P.cachePodsUpload?`export PRESIGNED_CACHE_PODS_UPLOAD="${P.cachePodsUpload}"`:"",P.artifactIpaUpload?`export PRESIGNED_ARTIFACT_IPA_UPLOAD="${P.artifactIpaUpload}"`:"",P.artifactAppZipUpload?`export PRESIGNED_ARTIFACT_APP_ZIP_UPLOAD="${P.artifactAppZipUpload}"`:"",`export BUILD_ID="${n}"`,`export ${f.envPrefix}PROJECT_ID="${u}"`,t.MATCH_ENCRYPTION_PASSPHRASE?`export MATCH_PASSWORD="${t.MATCH_ENCRYPTION_PASSPHRASE}"`:"",t.APPLE_TEAM_ID?`export FASTLANE_TEAM_ID="${t.APPLE_TEAM_ID}"`:"",`export MATCH_KEYCHAIN_NAME="${f.credentialsKeychain}"`,`export MATCH_KEYCHAIN_PASSWORD="${f.keychainPassword}"`].filter(Boolean).join(`
|
|
720
|
-
`),H=e.nodeVersion
|
|
721
|
-
[ -
|
|
722
|
-
nvm install ${e.nodeVersion} 2>/dev/null || true
|
|
723
|
-
nvm use ${e.nodeVersion}
|
|
724
|
-
echo "Switched to Node $(node -v) via nvm"`:"",q=Ai,y={"{{REMOTE_DIR}}":p,"{{ENV_VARS}}":L,"{{CREDENTIAL_DOWNLOADS}}":N,"{{IOS_SCHEME}}":e.iosScheme||"","{{IOS_CONFIG}}":e.iosConfiguration||"Release","{{TEAM_ID}}":e.iosTeamId||"","{{AUTH_PARAMS}}":h,"{{IS_SIMULATOR}}":e.simulator?"true":"false","{{BUILD_ID}}":n,"{{EXPORT_METHOD}}":e.iosExportMethod||"ad-hoc","{{NODE_VERSION_SETUP}}":H};Object.entries(y).forEach(([I,b])=>{q=q.split(I).join(b)});let w=`/tmp/${f.nameLower}-mac-build-${n}.sh`;if(Jn.writeFileSync(w,q),Qe(`${l} ${w} ${c}:${p}/build.sh`),o.stop("Remote script uploaded."),He.info(Te.cyan("Executing remote build. This might take a while...")),Qe(`${s} "bash ${p}/build.sh"`,{stdio:"inherit"}),o.stop("Remote build finished!"),i){o.start("Fetching artifact links...");try{let b=(await $.get(`/builds/${i}/${n}/artifacts`)).data.artifacts||[],R=e.simulator===!0;if(b.length===0&&!R)throw o.stop("Build Failed!"),new Error("Build completed but no artifacts were generated. Check build logs for errors.");if(o.stop("Build Successful!"),b.length>0){He.success("Build Artifacts Ready:");for(let G of b)console.log(`
|
|
718
|
+
`),H=e.nodeVersion?['export NVM_DIR="$HOME/.nvm"','[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"',`nvm install ${e.nodeVersion} 2>/dev/null || true`,`nvm use ${e.nodeVersion}`,'export PATH="$NVM_BIN:$PATH"','echo "[NODE] Switched to Node $(node -v)"'].join(`
|
|
719
|
+
`):"",q=Ai,y={"{{REMOTE_DIR}}":p,"{{ENV_VARS}}":L,"{{CREDENTIAL_DOWNLOADS}}":N,"{{IOS_SCHEME}}":e.iosScheme||"","{{IOS_CONFIG}}":e.iosConfiguration||"Release","{{TEAM_ID}}":e.iosTeamId||"","{{AUTH_PARAMS}}":h,"{{IS_SIMULATOR}}":e.simulator?"true":"false","{{BUILD_ID}}":n,"{{EXPORT_METHOD}}":e.iosExportMethod||"ad-hoc","{{NODE_VERSION_SETUP}}":H};Object.entries(y).forEach(([I,b])=>{q=q.split(I).join(b)});let w=`/tmp/${f.nameLower}-mac-build-${n}.sh`;if(Jn.writeFileSync(w,q),Qe(`${l} ${w} ${c}:${p}/build.sh`),o.stop("Remote script uploaded."),He.info(Te.cyan("Executing remote build. This might take a while...")),Qe(`${s} "bash ${p}/build.sh"`,{stdio:"inherit"}),o.stop("Remote build finished!"),i){o.start("Fetching artifact links...");try{let b=(await $.get(`/builds/${i}/${n}/artifacts`)).data.artifacts||[],R=e.simulator===!0;if(b.length===0&&!R)throw o.stop("Build Failed!"),new Error("Build completed but no artifacts were generated. Check build logs for errors.");if(o.stop("Build Successful!"),b.length>0){He.success("Build Artifacts Ready:");for(let G of b)console.log(`
|
|
725
720
|
${Te.yellow(G.name)}:
|
|
726
721
|
${Te.cyan(G.downloadUrl)}`);console.log(`
|
|
727
722
|
${Te.dim("Note: Links are valid for 7 days.")}`)}else R&&He.warn("Simulator build completed. No artifacts uploaded.")}catch(I){o.stop("Could not fetch artifacts"),He.warn(Te.yellow(`Artifact listing failed: ${I.message}`))}}}catch(d){throw o.stop("iOS Build Failed"),d}};import Xn from"crypto";import et from"axios";async function Ii(e,n){try{let t=await Zn(n),o=(await et.post(`https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${e}/edits`,{},{headers:{Authorization:`Bearer ${t}`,Connection:"close"}})).data.id,r=0,c=(await et.get(`https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${e}/edits/${o}/tracks`,{headers:{Authorization:`Bearer ${t}`,Connection:"close"}})).data.tracks||[];for(let s of c)if(s.releases){for(let l of s.releases)if(l.versionCodes)for(let d of l.versionCodes){let u=parseInt(d,10);u>r&&(r=u)}}try{let l=(await et.get(`https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${e}/edits/${o}/bundles`,{headers:{Authorization:`Bearer ${t}`,Connection:"close"}})).data.bundles||[];for(let d of l)d.versionCode&&d.versionCode>r&&(r=d.versionCode)}catch{}try{let l=(await et.get(`https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${e}/edits/${o}/apks`,{headers:{Authorization:`Bearer ${t}`,Connection:"close"}})).data.apks||[];for(let d of l)d.versionCode&&d.versionCode>r&&(r=d.versionCode)}catch{}return r}catch(t){let i=t.response?.data?.error?.message||t.message;throw new Error(`Google Play API Error: ${i}`)}}async function Zn(e){let n=Math.floor(Date.now()/1e3),t=n+3600,i={alg:"RS256",typ:"JWT"},o={iss:e.client_email,sub:e.client_email,aud:"https://oauth2.googleapis.com/token",iat:n,exp:t,scope:"https://www.googleapis.com/auth/androidpublisher"},r=Buffer.from(JSON.stringify(i)).toString("base64url"),a=Buffer.from(JSON.stringify(o)).toString("base64url"),c=`${r}.${a}`,s=Xn.createSign("RSA-SHA256");s.update(c);let l=s.sign(e.private_key,"base64url"),d=`${c}.${l}`;return(await et.post("https://oauth2.googleapis.com/token",{grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",assertion:d},{headers:{Connection:"close"}})).data.access_token}import{spinner as ht,log as A,isCancel as yt,confirm as Qn,select as Ft}from"@clack/prompts";import S from"chalk";import E from"fs";import _ from"path";import{execSync as F,spawn as Pi}from"child_process";import _e from"os";import eo from"crypto";var $i=(e,n)=>n.filter(t=>E.existsSync(_.join(e,t))).reduce((t,i)=>t.update(E.readFileSync(_.join(e,i))),eo.createHash("sha256")).digest("hex").slice(0,16),to=e=>$i(e,["package.json","yarn.lock","package-lock.json","bun.lockb"]),io=e=>$i(e,["Podfile","Podfile.lock"]),no=e=>{let n=_.join(e,"fingerprint.json");try{return JSON.parse(E.readFileSync(n,"utf-8"))}catch{return{}}},bi=(e,n)=>{E.mkdirSync(e,{recursive:!0}),E.writeFileSync(_.join(e,"fingerprint.json"),JSON.stringify(n,null,2))},oo=7200*1e3,ro=(e,n)=>{E.mkdirSync(e,{recursive:!0});let t=_.join(e,"build.lock");if(E.existsSync(t))try{let i=JSON.parse(E.readFileSync(t,"utf-8")),o=Date.now()-(i.timestamp||0);if(o<oo)throw new Error(`Another build is already running for this project (build ${i.buildId}, started ${Math.round(o/6e4)}m ago). Cancel it from the dashboard first, or wait for it to complete.`)}catch(i){if(i.message.includes("Another build"))throw i}E.writeFileSync(t,JSON.stringify({buildId:n,pid:process.pid,timestamp:Date.now()}))},so=(e,n)=>{let t=_.join(e,"build.lock");try{E.existsSync(t)&&JSON.parse(E.readFileSync(t,"utf-8")).buildId===n&&E.unlinkSync(t)}catch{}},De=(e,n,t=process.cwd(),i={},o,r)=>new Promise((a,c)=>{let s=[_.dirname(process.execPath),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin",_.join(_e.homedir(),".npm-global/bin"),_.join(_e.homedir(),".nvm/current/bin")],l=process.env.PATH||"",d=[...s,...l.split(":")].filter((m,h,P)=>m&&P.indexOf(m)===h).join(":");process.env[`${f.envPrefix}DEBUG`]&&console.log(S.magenta(`[${f.nameUpper}_DEBUG] Execution PATH: ${d}`));let u={...process.env,...i,PATH:d,LANG:"en_US.UTF-8",LC_ALL:"en_US.UTF-8"};o&&process.env[`${f.envPrefix}DEBUG`]&&(o(S.magenta(`[ENVIRONMENT] node: ${process.execPath}
|