xref: /plugin/bpmnio/update-vendor.sh (revision fe912211ffc42fa1b9d78237612ac75fdab50e9b)
1#!/usr/bin/env bash
2set -euo pipefail
3
4# Update vendor libraries (bpmn-js and dmn-js) from npm registry.
5# Downloads pre-built npm packages (which include dist/) and keeps only
6# the files needed to run the plugin.
7# Usage: ./update-vendor.sh
8
9SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10VENDOR_DIR="$SCRIPT_DIR/vendor"
11TMP_DIR=$(mktemp -d)
12trap 'rm -rf "$TMP_DIR"' EXIT
13
14# Files/dirs to keep from the npm package
15KEEP_PATTERNS=(dist package.json LICENSE README.md CHANGELOG.md)
16
17update_library() {
18    local name="$1"
19    local version="$2"
20    local dest="$VENDOR_DIR/$name"
21
22    local tarball_url="https://registry.npmjs.org/${name}/-/${name}-${version}.tgz"
23    echo "Updating $name to $version from $tarball_url ..."
24
25    local archive="$TMP_DIR/$name.tgz"
26    curl -sL "$tarball_url" -o "$archive"
27
28    local extract_dir="$TMP_DIR/$name-extract"
29    mkdir -p "$extract_dir"
30    # npm tarballs extract to a package/ directory
31    tar xzf "$archive" -C "$extract_dir"
32
33    local src_dir="$extract_dir/package"
34    if [[ ! -d "$src_dir" ]]; then
35        echo "ERROR: Could not find extracted package/ directory for $name"
36        return 1
37    fi
38
39    # Preserve url.txt
40    local url_backup="$TMP_DIR/${name}_url.txt"
41    cp "$dest/url.txt" "$url_backup"
42
43    # Remove old vendor dir and recreate with only needed files
44    rm -rf "$dest"
45    mkdir -p "$dest"
46
47    for pattern in "${KEEP_PATTERNS[@]}"; do
48        if [[ -e "$src_dir/$pattern" ]]; then
49            cp -r "$src_dir/$pattern" "$dest/$pattern"
50        fi
51    done
52
53    # Restore url.txt and update version references
54    cp "$url_backup" "$dest/url.txt"
55
56    echo "Updated $name to $version successfully."
57}
58
59get_version() {
60    local name="$1"
61    local url_file="$VENDOR_DIR/$name/url.txt"
62
63    if [[ ! -f "$url_file" ]]; then
64        echo "ERROR: $url_file not found" >&2
65        return 1
66    fi
67
68    # Extract version from the npm URL in url.txt (e.g. ...@18.14.0/)
69    local version
70    version=$(grep -oP "${name}@\K[0-9]+\.[0-9]+\.[0-9]+" "$url_file" | head -1)
71
72    if [[ -z "$version" ]]; then
73        echo "ERROR: Could not extract version for $name from $url_file" >&2
74        return 1
75    fi
76
77    echo "$version"
78}
79
80bpmn_version=$(get_version "bpmn-js")
81dmn_version=$(get_version "dmn-js")
82
83update_library "bpmn-js" "$bpmn_version"
84update_library "dmn-js" "$dmn_version"
85
86echo ""
87echo "Done. Updated bpmn-js to $bpmn_version and dmn-js to $dmn_version."
88