xref: /plugin/bpmnio/update-vendor.sh (revision 529cd0c7e7482cb885389d653a3a6be172520f4a)
19ff8d41cSJaap de Haan#!/usr/bin/env bash
29ff8d41cSJaap de Haanset -euo pipefail
39ff8d41cSJaap de Haan
4fe912211SJaap de Haan# Update vendor libraries (bpmn-js and dmn-js) from npm registry.
5fe912211SJaap de Haan# Downloads pre-built npm packages (which include dist/) and keeps only
6fe912211SJaap de Haan# the files needed to run the plugin.
79ff8d41cSJaap de Haan# Usage: ./update-vendor.sh
89ff8d41cSJaap de Haan
99ff8d41cSJaap de HaanSCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
109ff8d41cSJaap de HaanVENDOR_DIR="$SCRIPT_DIR/vendor"
119ff8d41cSJaap de HaanTMP_DIR=$(mktemp -d)
129ff8d41cSJaap de Haantrap 'rm -rf "$TMP_DIR"' EXIT
139ff8d41cSJaap de Haan
14fe912211SJaap de Haan# Files/dirs to keep from the npm package
15fe912211SJaap de HaanKEEP_PATTERNS=(dist package.json LICENSE README.md CHANGELOG.md)
16fe912211SJaap de Haan
179ff8d41cSJaap de Haanupdate_library() {
189ff8d41cSJaap de Haan    local name="$1"
19fe912211SJaap de Haan    local version="$2"
20fe912211SJaap de Haan    local dest="$VENDOR_DIR/$name"
219ff8d41cSJaap de Haan
22fe912211SJaap de Haan    local tarball_url="https://registry.npmjs.org/${name}/-/${name}-${version}.tgz"
23fe912211SJaap de Haan    echo "Updating $name to $version from $tarball_url ..."
249ff8d41cSJaap de Haan
25fe912211SJaap de Haan    local archive="$TMP_DIR/$name.tgz"
269ff8d41cSJaap de Haan    curl -sL "$tarball_url" -o "$archive"
279ff8d41cSJaap de Haan
289ff8d41cSJaap de Haan    local extract_dir="$TMP_DIR/$name-extract"
299ff8d41cSJaap de Haan    mkdir -p "$extract_dir"
30fe912211SJaap de Haan    # npm tarballs extract to a package/ directory
319ff8d41cSJaap de Haan    tar xzf "$archive" -C "$extract_dir"
329ff8d41cSJaap de Haan
33fe912211SJaap de Haan    local src_dir="$extract_dir/package"
34fe912211SJaap de Haan    if [[ ! -d "$src_dir" ]]; then
35fe912211SJaap de Haan        echo "ERROR: Could not find extracted package/ directory for $name"
369ff8d41cSJaap de Haan        return 1
379ff8d41cSJaap de Haan    fi
389ff8d41cSJaap de Haan
399ff8d41cSJaap de Haan    # Preserve url.txt
409ff8d41cSJaap de Haan    local url_backup="$TMP_DIR/${name}_url.txt"
419ff8d41cSJaap de Haan    cp "$dest/url.txt" "$url_backup"
429ff8d41cSJaap de Haan
43fe912211SJaap de Haan    # Remove old vendor dir and recreate with only needed files
449ff8d41cSJaap de Haan    rm -rf "$dest"
45fe912211SJaap de Haan    mkdir -p "$dest"
46fe912211SJaap de Haan
47fe912211SJaap de Haan    for pattern in "${KEEP_PATTERNS[@]}"; do
48fe912211SJaap de Haan        if [[ -e "$src_dir/$pattern" ]]; then
49fe912211SJaap de Haan            cp -r "$src_dir/$pattern" "$dest/$pattern"
50fe912211SJaap de Haan        fi
51fe912211SJaap de Haan    done
52fe912211SJaap de Haan
53fe912211SJaap de Haan    # Restore url.txt and update version references
549ff8d41cSJaap de Haan    cp "$url_backup" "$dest/url.txt"
559ff8d41cSJaap de Haan
56*529cd0c7SJaap de Haan    # Rename .css to .less so DokuWiki's LESS compiler inlines them.
57*529cd0c7SJaap de Haan    # DokuWiki's default nginx config blocks /vendor/ paths (403), so CSS
58*529cd0c7SJaap de Haan    # @import directives for .css files would fail at runtime.
59*529cd0c7SJaap de Haan    find "$dest" -name '*.css' -exec bash -c 'mv "$1" "${1%.css}.less"' _ {} \;
60*529cd0c7SJaap de Haan
61fe912211SJaap de Haan    echo "Updated $name to $version successfully."
629ff8d41cSJaap de Haan}
639ff8d41cSJaap de Haan
64fe912211SJaap de Haanget_version() {
65fe912211SJaap de Haan    local name="$1"
66fe912211SJaap de Haan    local url_file="$VENDOR_DIR/$name/url.txt"
67fe912211SJaap de Haan
68fe912211SJaap de Haan    if [[ ! -f "$url_file" ]]; then
69fe912211SJaap de Haan        echo "ERROR: $url_file not found" >&2
70fe912211SJaap de Haan        return 1
71fe912211SJaap de Haan    fi
72fe912211SJaap de Haan
73fe912211SJaap de Haan    # Extract version from the npm URL in url.txt (e.g. ...@18.14.0/)
74fe912211SJaap de Haan    local version
75fe912211SJaap de Haan    version=$(grep -oP "${name}@\K[0-9]+\.[0-9]+\.[0-9]+" "$url_file" | head -1)
76fe912211SJaap de Haan
77fe912211SJaap de Haan    if [[ -z "$version" ]]; then
78fe912211SJaap de Haan        echo "ERROR: Could not extract version for $name from $url_file" >&2
79fe912211SJaap de Haan        return 1
80fe912211SJaap de Haan    fi
81fe912211SJaap de Haan
82fe912211SJaap de Haan    echo "$version"
83fe912211SJaap de Haan}
84fe912211SJaap de Haan
85fe912211SJaap de Haanbpmn_version=$(get_version "bpmn-js")
86fe912211SJaap de Haandmn_version=$(get_version "dmn-js")
87fe912211SJaap de Haan
88fe912211SJaap de Haanupdate_library "bpmn-js" "$bpmn_version"
89fe912211SJaap de Haanupdate_library "dmn-js" "$dmn_version"
909ff8d41cSJaap de Haan
919ff8d41cSJaap de Haanecho ""
92fe912211SJaap de Haanecho "Done. Updated bpmn-js to $bpmn_version and dmn-js to $dmn_version."
93