-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathsync-cli-version-from-reference-impl.sh
More file actions
executable file
·80 lines (71 loc) · 3.13 KB
/
sync-cli-version-from-reference-impl.sh
File metadata and controls
executable file
·80 lines (71 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env bash
# ──────────────────────────────────────────────────────────────
# sync-cli-version-from-reference-impl.sh
#
# Reads the @github/copilot version specifier from the cloned
# reference implementation's nodejs/package.json, and updates the
# corresponding property in pom.xml:
#
# <readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync>
#
# This keeps the canonical Copilot CLI version (declared in pom.xml)
# in sync with whatever the reference implementation pinned in
# .lastmerge depends on. All workflows that install the Copilot CLI
# (build-test.yml — implicitly via cloned SDK, run-smoke-test.yml and
# update-copilot-dependency.yml — via the setup-copilot action) read
# this single property so every CI path uses the same CLI version.
#
# Usage:
# ./sync-cli-version-from-reference-impl.sh <reference-impl-dir>
#
# Or, when invoked from merge-reference-impl-finish.sh, sources
# REFERENCE_IMPL_DIR from the .merge-env file.
# ──────────────────────────────────────────────────────────────
set -euo pipefail
# Locate the repo root by walking up from this script until we find a pom.xml.
# This is resilient to the script being moved to a different depth under
# .github/scripts/ in the future.
find_repo_root() {
local dir
dir="$(cd "$(dirname "$0")" && pwd)"
while [[ "$dir" != "/" ]]; do
if [[ -f "$dir/pom.xml" ]]; then
echo "$dir"
return 0
fi
dir="$(dirname "$dir")"
done
echo "❌ Could not locate repo root (no pom.xml found above $(dirname "$0"))" >&2
return 1
}
ROOT_DIR="$(find_repo_root)"
REFERENCE_IMPL_DIR="${1:-${REFERENCE_IMPL_DIR:-}}"
if [[ -z "$REFERENCE_IMPL_DIR" ]]; then
echo "❌ Usage: $0 <reference-impl-dir>" >&2
echo " or set REFERENCE_IMPL_DIR in the environment." >&2
exit 1
fi
PKG_JSON="$REFERENCE_IMPL_DIR/nodejs/package.json"
if [[ ! -f "$PKG_JSON" ]]; then
echo "❌ Cannot find $PKG_JSON" >&2
exit 1
fi
# node is always available since the reference implementation uses npm.
CLI_VERSION=$(node -e \
"const fs=require('fs');const p=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));const v=(p.dependencies&&p.dependencies['@github/copilot'])||(p.devDependencies&&p.devDependencies['@github/copilot']);process.stdout.write(v||'');" \
"$PKG_JSON")
if [[ -z "$CLI_VERSION" ]]; then
echo "❌ Could not extract @github/copilot version from $PKG_JSON" >&2
exit 1
fi
POM="$ROOT_DIR/pom.xml"
PROP="readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync"
if ! grep -q "<${PROP}>" "$POM"; then
echo "❌ Property <${PROP}> not found in $POM" >&2
exit 1
fi
# Use a portable sed invocation (works on both BSD/macOS and GNU/Linux).
TMP="$(mktemp)"
sed -E "s|<${PROP}>[^<]*</${PROP}>|<${PROP}>${CLI_VERSION}</${PROP}>|" "$POM" > "$TMP"
mv "$TMP" "$POM"
echo "▸ Updated pom.xml: <${PROP}> = ${CLI_VERSION}"