← back to Dw Yolo Loop

scripts/price-sheets/resume-roll-adds.sh

43 lines

#!/bin/zsh
# resume-roll-adds.sh — finish the remaining Schumacher roll-variant adds the morning
# after Shopify's daily variant-creation limit resets. Idempotent: both node scripts skip
# already-created products via their revert logs, so re-runs only do what's left.
# Self-disables its launchd job once 0 clean+edge targets remain.
set -e
cd "$HOME/Projects/designerwallcoverings"
LOG="/tmp/schu-rolladd-resume-$(date +%Y%m%d-%H%M).log"
exec > >(tee -a "$LOG") 2>&1
echo "=== resume-roll-adds $(date) ==="

# restore persisted target CSVs into /tmp (where the scripts read them)
cp -f data/price-sheets/schu-addroll-targets.csv /tmp/schu-addroll-targets.csv
cp -f data/price-sheets/schu-addroll-edge.csv     /tmp/schu-addroll-edge.csv

echo "--- clean 532 set ---"
node scripts/price-sheets/add-roll-variant.mjs --apply --i-am-steve || true
echo "--- edge 37 (Default-Title) ---"
node scripts/price-sheets/add-roll-variant-edge.mjs --apply --i-am-steve || true
echo "--- 4 oddballs (sku-swap) ---"
node scripts/price-sheets/add-roll-variant-oddball.mjs --apply --i-am-steve || true

# how many remain across both sets?
REMAIN=$(node -e '
const fs=require("fs");
const done=new Set((()=>{try{return JSON.parse(fs.readFileSync("data/price-sheets/addroll-created.json","utf8")).map(c=>c.pid)}catch{return[]}})());
const edone=new Set((()=>{try{return JSON.parse(fs.readFileSync("data/price-sheets/addroll-edge-created.json","utf8")).map(c=>c.pid)}catch{return[]}})());
const clean=fs.readFileSync("/tmp/schu-addroll-targets.csv","utf8").trim().split("\n").filter(l=>!done.has(l.split(",")[0])).length;
const edge=fs.readFileSync("/tmp/schu-addroll-edge.csv","utf8").trim().split("\n").filter(l=>{const[pid,,optName,optVal,,ssku]=l.split("|");return optName==="Title"&&optVal==="Default Title"&&/-sample$/i.test(ssku)&&!edone.has(pid)}).length;
const odone=new Set((()=>{try{return JSON.parse(fs.readFileSync("data/price-sheets/addroll-oddball-created.json","utf8")).map(c=>c.pid)}catch{return[]}})());
const odd=fs.readFileSync("data/price-sheets/schu-addroll-oddball.csv","utf8").trim().split("\n").filter(l=>!odone.has(l.split("|")[0])).length;
console.log(clean+edge+odd);
')
echo "remaining clean+edge roll-adds: $REMAIN"

if [ "$REMAIN" -eq 0 ]; then
  echo "ALL roll-adds complete — self-disabling launchd job."
  launchctl bootout gui/$(id -u)/com.steve.schu-rolladd-resume 2>/dev/null || true
else
  echo "still $REMAIN remaining (likely daily cap again) — job will retry tomorrow."
fi
echo "=== done $(date) | log: $LOG ==="