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