Skip to content

Instantly share code, notes, and snippets.

@kitzberger
Last active January 20, 2025 13:51
Show Gist options
  • Save kitzberger/afcb5b57874a07847d911e03ef85be6a to your computer and use it in GitHub Desktop.
Save kitzberger/afcb5b57874a07847d911e03ef85be6a to your computer and use it in GitHub Desktop.
Update version constrains in composer.json before running `composer update`
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RESET='\033[0m'
packages=$(jq -r '.require | with_entries(select(.key | test("^typo3/") | not)) | keys[]' composer.json)
for package in $packages; do
echo ""
packageName=${package/\//\\/}
currentContraint=$(sed -n -E "s/\"($packageName)\"(:\s*)\"(.*)\",?/\3/p" composer.json | tr -d '[:space:]')
currentVersion=$(composer show $package --format=json | jq -r '.versions | first' )
echo -e "Current version of ${YELLOW}$package${RESET}: ${RED}$currentContraint${RESET} ($currentVersion)"
if [ "$currentVersion" == "0" ]; then
# continue with next package!
continue
fi
echo -e "Looking up latest versions of ${YELLOW}$package${RESET}"
versions=$(composer show -a $package --format=json | jq -r '.versions | map(.+" ") | add')
latestVersions=$(echo $versions | cut -d " " -f1-5 )
for version in $latestVersions; do
echo "- $version"
done
for version in $versions; do
echo "Requirements of version $version:"
composer show -a $package $version --format=json | jq -r '.requires'
tickversion=$(echo $version | cut -f 1-2 -d '.')
printf "Use version ${RED}^$tickversion${RESET} for ${YELLOW}$package${RESET}?"
read -p " (y/N/s/version) " ACTION
if [ "$ACTION" == 'y' ] || [ "$ACTION" == 'Y' ]; then
echo -e "${GREEN}Updating constraint in composer.json!${RESET}"
sed -E -i "s/\"($packageName)\"(:\s*)\"(.*)\"/\"\1\"\2\"^$tickversion\"/" composer.json
# continue with next package!
break
elif [ "$ACTION" == 's' ]; then
echo -e "${GREEN}Version constraint kept as is in composer.json!${RESET}"
# continue with next package!
break
elif [ "$ACTION" == '' ] || [ "$ACTION" == 'n' ] || [ "$ACTION" == 'N' ]; then
# continue with next version!
continue
else
rawversion="$ACTION"
printf "Use version ${RED}$rawversion${RESET} for ${YELLOW}$package${RESET}?"
read -p " (y/N) " ACTION
if [ "$ACTION" == '' ] || [ "$ACTION" == 'n' ] || [ "$ACTION" == 'N' ]; then
break
fi
echo -e "${GREEN}Updating constraint in composer.json!${RESET}"
sed -E -i "s/\"($packageName)\"(:\s*)\"(.*)\"/\"\1\"\2\"$rawversion\"/" composer.json
# continue with next package!
break
fi
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment