Skip to content

Commit b3d029e

Browse files
committed
chore: sh script
1 parent 034d61e commit b3d029e

1 file changed

Lines changed: 144 additions & 0 deletions

File tree

bin/create-preinstalled-zip.sh

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
7+
8+
# Packages to pack
9+
PACKAGES=("packages/collector" "packages/core" "packages/shared-metrics")
10+
11+
# staging dir for tgz files
12+
# Try to name the staging dir using the collector package version; fall back to mktemp if not available
13+
COLLECTOR_PKG_JSON="$REPO_ROOT/packages/collector/package.json"
14+
if command -v node >/dev/null 2>&1 && [ -f "$COLLECTOR_PKG_JSON" ]; then
15+
COLLECTOR_VERSION=$(node -e "console.log(require(process.argv[1]).version)" "$COLLECTOR_PKG_JSON")
16+
STAGING_DIR="/tmp/instana-pack-${COLLECTOR_VERSION}"
17+
# avoid clobbering an existing dir by appending a timestamp
18+
if [ -d "$STAGING_DIR" ]; then
19+
STAGING_DIR="${STAGING_DIR}-$(date +%s)"
20+
fi
21+
mkdir -p "$STAGING_DIR"
22+
else
23+
STAGING_DIR=$(mktemp -d "/tmp/instana-pack-XXXX")
24+
fi
25+
trap 'rm -rf "$STAGING_DIR"' EXIT
26+
27+
DEST="$HOME/dev/instana/zips-nodejs-tracer"
28+
mkdir -p "$DEST"
29+
30+
# Pack all packages and move tgz files to STAGING_DIR
31+
for PKG in "${PACKAGES[@]}"; do
32+
PKG_DIR="$REPO_ROOT/$PKG"
33+
echo "Packing package: $PKG_DIR"
34+
cd "$PKG_DIR"
35+
36+
PKG_BASENAME=$(basename "$PKG_DIR")
37+
38+
# remove previous tgz files in package dir
39+
rm -f ${PKG_BASENAME}-*.tgz || true
40+
41+
TGZ_OUTPUT=$(npm pack --silent 2>/dev/null || true)
42+
TGZ=$(echo "$TGZ_OUTPUT" | head -n1)
43+
44+
if [ -z "$TGZ" ] || [ ! -f "$TGZ" ]; then
45+
TGZ=$(ls -1t ${PKG_BASENAME}-*.tgz 2>/dev/null | head -n1 || true)
46+
fi
47+
48+
if [ -z "$TGZ" ] || [ ! -f "$TGZ" ]; then
49+
echo "ERROR: could not find generated .tgz file for $PKG" >&2
50+
exit 1
51+
fi
52+
53+
# move and normalize name in staging dir
54+
STAGED_TGZ="$STAGING_DIR/${PKG_BASENAME}.tgz"
55+
mv "$TGZ" "$STAGED_TGZ"
56+
echo "Moved $TGZ to $STAGED_TGZ"
57+
done
58+
59+
# Only unpack collector, then install its production deps
60+
COLLECTOR_TGZ="$STAGING_DIR/collector.tgz"
61+
if [ ! -f "$COLLECTOR_TGZ" ]; then
62+
echo "ERROR: collector tgz not found in staging dir" >&2
63+
exit 1
64+
fi
65+
66+
TMPDIR=$(mktemp -d "/tmp/package-collector-XXXX")
67+
echo "Using temp dir $TMPDIR"
68+
69+
echo "Copying $COLLECTOR_TGZ to $TMPDIR/"
70+
cp "$COLLECTOR_TGZ" "$TMPDIR/"
71+
72+
cd "$TMPDIR"
73+
74+
echo "Extracting collector package..."
75+
tar -xzf "$(basename "$COLLECTOR_TGZ")"
76+
77+
cd package
78+
79+
echo "Installing collector production dependencies (omitting optional and dev)..."
80+
npm install --omit=optional --omit=dev
81+
82+
# Now install core and shared-metrics into the extracted collector via the tgz files
83+
CORE_TGZ="$STAGING_DIR/core.tgz"
84+
SHARED_TGZ="$STAGING_DIR/shared-metrics.tgz"
85+
86+
INSTALL_ARGS=()
87+
if [ -f "$CORE_TGZ" ]; then
88+
INSTALL_ARGS+=("$CORE_TGZ")
89+
else
90+
echo "WARNING: core tgz not found, skipping" >&2
91+
fi
92+
if [ -f "$SHARED_TGZ" ]; then
93+
INSTALL_ARGS+=("$SHARED_TGZ")
94+
else
95+
echo "WARNING: shared-metrics tgz not found, skipping" >&2
96+
fi
97+
98+
if [ ${#INSTALL_ARGS[@]} -gt 0 ]; then
99+
echo "Installing core and shared-metrics from tgz files (omitting optional and dev)..."
100+
101+
# Print the exact command that will be executed
102+
echo -n "Command: npm install --omit=optional --omit=dev"
103+
for _p in "${INSTALL_ARGS[@]}"; do
104+
echo -n " $_p"
105+
done
106+
echo
107+
108+
# Execute the install using the array to preserve argument boundaries
109+
npm install --omit=optional --omit=dev "${INSTALL_ARGS[@]}"
110+
else
111+
echo "No additional tgz packages to install"
112+
fi
113+
114+
# Read version and name from package.json
115+
if command -v node >/dev/null 2>&1; then
116+
VERSION=$(node -e "console.log(require('./package.json').version)")
117+
NAME=$(node -e "console.log(require('./package.json').name.replace('@instana/',''))")
118+
else
119+
echo "ERROR: node is required to read package.json version" >&2
120+
rm -rf "$TMPDIR"
121+
exit 1
122+
fi
123+
124+
# Allow a custom postfix passed as first script argument or via ZIP_POSTFIX env var
125+
# Usage: ./create-preinstalled-zip.sh mypostfix
126+
POSTFIX="${1:-${ZIP_POSTFIX:-}}"
127+
if [ -n "$POSTFIX" ]; then
128+
ZIPNAME="instana-${NAME}-${VERSION}-dev-only-${POSTFIX}.zip"
129+
else
130+
ZIPNAME="instana-${NAME}-${VERSION}-dev-only.zip"
131+
fi
132+
133+
echo "Creating zip $ZIPNAME..."
134+
zip -r "$TMPDIR/$ZIPNAME" . >/dev/null
135+
136+
echo "Moving $ZIPNAME to $DEST"
137+
mv "$TMPDIR/$ZIPNAME" "$DEST/"
138+
139+
echo "Cleaning up $TMPDIR"
140+
rm -rf "$TMPDIR"
141+
142+
echo "Done. Zip is located at: $DEST/$ZIPNAME"
143+
144+
exit 0

0 commit comments

Comments
 (0)