Skip to content

Commit 480906d

Browse files
committed
Another improvement for upgrade-packs.sh
1 parent 21b1959 commit 480906d

File tree

1 file changed

+30
-38
lines changed

1 file changed

+30
-38
lines changed

server/scripts/upgrade-packs.sh

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,14 @@ cd "${REPO_ROOT}"
8080
## Resolve and pin the latest compatible version of the codeql/<lang>-all
8181
## upstream dependency in a source pack's codeql-pack.yml.
8282
##
83-
## Uses `codeql resolve library-path --format=json` to discover the version
84-
## that the current CLI resolves for the pack, then updates codeql-pack.yml
85-
## to pin that exact version. Packs with wildcard or range dependencies
86-
## (e.g., '*') are skipped — those intentionally float.
83+
## Strategy: run `codeql pack upgrade` first to resolve the latest compatible
84+
## version into the lock file, then read the resolved version back and update
85+
## the codeql-pack.yml to pin that exact version. Packs with wildcard
86+
## dependencies (e.g., '*') are skipped — those intentionally float.
8787
pin_upstream_dep() {
8888
local pack_dir="$1"
8989
local pack_yml="${pack_dir}/codeql-pack.yml"
90+
local lock_file="${pack_dir}/codeql-pack.lock.yml"
9091

9192
if [[ ! -f "${pack_yml}" ]]; then
9293
return
@@ -104,43 +105,36 @@ pin_upstream_dep() {
104105
dep_name=$(echo "${dep_line}" | sed 's/^[[:space:]]*//' | cut -d: -f1)
105106
dep_old_version=$(echo "${dep_line}" | sed 's/^[^:]*:[[:space:]]*//')
106107

107-
## Skip wildcard/range dependencies — these intentionally float
108-
if [[ "${dep_old_version}" == *"*"* || "${dep_old_version}" == *"^"* || "${dep_old_version}" == *">"* ]]; then
109-
echo " ℹ️ ${dep_name}: ${dep_old_version} (wildcard/range — skipping)"
108+
## Skip wildcard dependencies — these intentionally float
109+
if [[ "${dep_old_version}" == *"*"* ]]; then
110+
echo " ℹ️ ${dep_name}: ${dep_old_version} (wildcard — skipping)"
110111
return
111112
fi
112113

113-
## Resolve the library path to discover the version the CLI selects.
114-
## The JSON output contains a libraryPath array with entries like:
115-
## /path/.codeql/packages/codeql/javascript-all/2.6.26
116-
## We extract the version from the path segment matching the dep name.
117-
local resolved_version=""
118-
local lib_path_json
119-
lib_path_json=$(codeql resolve library-path --format=json --dir="${pack_dir}" 2>/dev/null || true)
120-
if [[ -n "${lib_path_json}" ]]; then
121-
resolved_version=$(echo "${lib_path_json}" \
122-
| python3 -c "
123-
import json, sys, os
124-
data = json.load(sys.stdin)
125-
for p in data.get('libraryPath', []):
126-
parts = p.split(os.sep)
127-
for i in range(len(parts) - 2):
128-
if parts[i] + '/' + parts[i+1] == '${dep_name}':
129-
print(parts[i+2])
130-
sys.exit(0)
131-
" 2>/dev/null || true)
114+
## Run codeql pack upgrade to resolve the latest compatible version
115+
codeql pack upgrade -- "${pack_dir}" >/dev/null 2>&1
116+
117+
if [[ ! -f "${lock_file}" ]]; then
118+
echo " ⚠️ No lock file after upgrade for ${pack_dir}" >&2
119+
return
132120
fi
133121

134-
if [[ -n "${resolved_version}" ]]; then
135-
if [[ "${dep_old_version}" != "${resolved_version}" ]]; then
136-
sed -i.bak "s|${dep_name}: ${dep_old_version}|${dep_name}: ${resolved_version}|" "${pack_yml}"
137-
rm -f "${pack_yml}.bak"
138-
echo "${dep_name}: ${dep_old_version} -> ${resolved_version}"
139-
else
140-
echo "${dep_name}: ${resolved_version} (already current)"
141-
fi
122+
## Read the resolved version from the lock file
123+
local resolved_version
124+
resolved_version=$(awk "/${dep_name//\//\\/}:/{getline; print}" "${lock_file}" \
125+
| sed 's/.*version:[[:space:]]*//' | head -1)
126+
127+
if [[ -z "${resolved_version}" ]]; then
128+
echo " ⚠️ ${dep_name}: not found in lock file, kept ${dep_old_version}" >&2
129+
return
130+
fi
131+
132+
if [[ "${dep_old_version}" != "${resolved_version}" ]]; then
133+
sed -i.bak "s|${dep_name}: ${dep_old_version}|${dep_name}: ${resolved_version}|" "${pack_yml}"
134+
rm -f "${pack_yml}.bak"
135+
echo "${dep_name}: ${dep_old_version} -> ${resolved_version}"
142136
else
143-
echo " ⚠️ Could not resolve version for ${dep_name}, kept ${dep_old_version}" >&2
137+
echo " ${dep_name}: ${resolved_version} (already current)"
144138
fi
145139
}
146140

@@ -149,10 +143,8 @@ upgrade_packs() {
149143
local _parent_dir="$1"
150144

151145
if [[ -d "${_parent_dir}/src" ]]; then
152-
echo "INFO: Resolving latest upstream dependency for '${_parent_dir}/src'..."
146+
echo "INFO: Upgrading '${_parent_dir}/src'..."
153147
pin_upstream_dep "${_parent_dir}/src"
154-
echo "INFO: Running 'codeql pack upgrade' for '${_parent_dir}/src'..."
155-
codeql pack upgrade -- "${_parent_dir}/src"
156148
else
157149
echo "WARNING: Directory '${_parent_dir}/src' not found, skipping" >&2
158150
fi

0 commit comments

Comments
 (0)