Skip to content

Instantly share code, notes, and snippets.

@kyle-west
Last active August 9, 2022 14:59
Show Gist options
  • Save kyle-west/720df27659d372e395ec86317f506113 to your computer and use it in GitHub Desktop.
Save kyle-west/720df27659d372e395ec86317f506113 to your computer and use it in GitHub Desktop.
See what components need to update in what order (requires bower)
#!/bin/bash
# bashful import json
target_repo=$1
target_version=$2
echo "Please consider running 'bower install' before running 'migrate-to'"
sleep 3s;
echo;
json <(bower list --json --offline) "
let depLines = []
function printDeps(node, padding = '', path = '$(basename $(pwd))') {
Object.getOwnPropertyNames(node.dependencies).forEach(dep => {
let namedPath = \`\${path} << \${dep} (\${node.dependencies[dep].pkgMeta.version})\`;
depLines.push(namedPath);
printDeps(node.dependencies[dep], padding + ' ', path + ' << ' + dep)
})
}
printDeps($)
let filtered = depLines.filter(line => {
return line.includes('$target_repo (') && !line.includes('($target_version')
})
// console.log(filtered)
let orders = [];
filtered.forEach(f => {
let newOrders = f.split(' << ').slice(0,-1)
for (let i = 0; i < newOrders.length; ++i) {
orders[i] = orders[i] || [];
if (!orders[i].includes(newOrders[i])) orders[i].push(newOrders[i])
}
})
let seenRepos = [];
orders = orders.reverse().map(order => {
return order.filter(repo => {
let seen = seenRepos.includes(repo);
if (!seen) seenRepos.push(repo);
return !seen;
})
});
console.log('To upgrade to $target_repo v$target_version, you will need to update dependancies in the follow order:\n', orders)
";
@kyle-west
Copy link
Author

It's a WIP. Come bug me for how to use this if you end up needing it.

@tylergraf
Copy link

Install: bashful install https://gist.github.com/kyle-west/720df27659d372e395ec86317f506113
Run: From app, tree or tree-v8-person, migrate-to [package] v[next-major] migrate-to fs-person-data-service v5

Then it spits out the order in which to update all the repos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment