mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-24 01:07:50 +00:00
82 lines
3.4 KiB
Bash
Executable File
82 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Get the absolute path for the base directory
|
|
BASE_DIR=$(pwd)
|
|
|
|
# Create a directory to store the combined dependencies
|
|
DEPS_DIR="$BASE_DIR/combined_dependencies"
|
|
mkdir -p "$DEPS_DIR"
|
|
|
|
# Create temporary package.json files
|
|
EXTERNAL_PACKAGE="$DEPS_DIR/external_package.json"
|
|
COMBINED_PACKAGE="$DEPS_DIR/combined_package.json"
|
|
|
|
# Create initial combined package.json
|
|
echo '{"name": "combined-dependencies", "dependencies": {}}' > "$COMBINED_PACKAGE"
|
|
|
|
# Find all package.json files recursively, excluding node_modules and focusing on workspace packages
|
|
echo "Finding workspace package.json files..."
|
|
find . -name "package.json" -not -path "*/node_modules/*" -type f | while read -r file; do
|
|
if grep -q '"name": "@hcengineering/' "$file"; then
|
|
echo "$file"
|
|
fi
|
|
done > "$DEPS_DIR/package_list.txt"
|
|
|
|
# Process each package.json and combine dependencies
|
|
echo "Combining dependencies from workspace packages..."
|
|
while IFS= read -r package_file; do
|
|
echo "Processing: $package_file"
|
|
# Extract dependencies and merge them into combined package.json
|
|
deps=$(jq -r '.dependencies // {}' "$package_file")
|
|
jq -s '.[0].dependencies *= .[1] | .[0]' "$COMBINED_PACKAGE" <(echo "$deps") > "$COMBINED_PACKAGE.tmp"
|
|
mv "$COMBINED_PACKAGE.tmp" "$COMBINED_PACKAGE"
|
|
done < "$DEPS_DIR/package_list.txt"
|
|
|
|
# Create filtered external package.json excluding @hcengineering packages
|
|
jq '{"name": "external-dependencies", "dependencies": (.dependencies | with_entries(select(.key | startswith("@hcengineering/") | not)))}' "$COMBINED_PACKAGE" > "$EXTERNAL_PACKAGE"
|
|
|
|
# Create a temporary directory for checking outdated packages
|
|
TEMP_DIR="$DEPS_DIR/temp"
|
|
mkdir -p "$TEMP_DIR"
|
|
cp "$EXTERNAL_PACKAGE" "$TEMP_DIR/package.json"
|
|
|
|
# Check outdated packages
|
|
echo "Checking for outdated packages..."
|
|
cd "$TEMP_DIR"
|
|
npm install --force --package-lock-only > /dev/null 2>&1
|
|
npm outdated --json > "../outdated.json" 2>/dev/null
|
|
cd - > /dev/null
|
|
|
|
# Generate report
|
|
echo "Generating report..."
|
|
echo "Project Dependencies Analysis" > "$DEPS_DIR/dependencies_report.txt"
|
|
echo "Generated on: $(date)" >> "$DEPS_DIR/dependencies_report.txt"
|
|
echo "----------------------------------------" >> "$DEPS_DIR/dependencies_report.txt"
|
|
echo -e "\nOutdated External Dependencies:" >> "$DEPS_DIR/dependencies_report.txt"
|
|
echo "Package Version Latest" >> "$DEPS_DIR/dependencies_report.txt"
|
|
echo "----------------------------------------" >> "$DEPS_DIR/dependencies_report.txt"
|
|
|
|
# Extract current versions from package.json
|
|
CURRENT_VERSIONS=$(jq -r '.dependencies | to_entries[] | "\(.key)|\(.value)"' "$EXTERNAL_PACKAGE")
|
|
|
|
# Format and append outdated packages to report
|
|
if [ -s "$DEPS_DIR/outdated.json" ]; then
|
|
echo "$CURRENT_VERSIONS" | while IFS='|' read -r package version; do
|
|
latest=$(jq -r --arg pkg "$package" '.[$pkg].latest // empty' "$DEPS_DIR/outdated.json")
|
|
if [ ! -z "$latest" ]; then
|
|
version=$(echo "$version" | sed 's/[\^~]//g')
|
|
if [ "$version" != "$latest" ]; then
|
|
printf "%-35s %-10s %-10s\n" "$package" "$version" "$latest" >> "$DEPS_DIR/dependencies_report.txt"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Cleanup
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
# Create summary
|
|
echo -e "\nSummary:"
|
|
echo "----------------------------------------"
|
|
echo "Report generated in: $DEPS_DIR/dependencies_report.txt"
|
|
echo "Total workspace packages processed: $(wc -l < "$DEPS_DIR/package_list.txt")" |