diff --git a/build.sh b/build.sh index 8a1e712..8e2a1aa 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -for package in $(ls packages); do +for package in $(./get_packages.py); do ./build_and_link.sh $package done diff --git a/build_and_link.sh b/build_and_link.sh index 165f65c..3adf1b9 100755 --- a/build_and_link.sh +++ b/build_and_link.sh @@ -5,7 +5,7 @@ upstream=$1 npm run build -w @welshman/$upstream npm run lint -w @welshman/$upstream -for downstream in $(ls packages); do +for downstream in $(./get_packages.py); do n=@welshman/$upstream f=packages/$downstream/package.json v=$(jq '.dependencies["'$n'"] // empty' $f) diff --git a/find_changes.sh b/find_changes.sh index c8a6d07..50b28aa 100755 --- a/find_changes.sh +++ b/find_changes.sh @@ -1,6 +1,6 @@ #!/bin/bash -for package in $(ls packages); do +for package in $(./get_packages.py); do tag=$(git describe --tags --abbrev=0 --match=$package'/*') changes=$(git diff "$tag" "packages/$package" | wc -l) diff --git a/get_packages.py b/get_packages.py new file mode 100755 index 0000000..965d6d6 --- /dev/null +++ b/get_packages.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +import os +import json +from collections import defaultdict + +def parse_package_json(file_path): + with open(file_path, 'r') as f: + return json.load(f) + +def get_dependencies(package_data): + dependencies = set() + for dep_type in ['dependencies', 'devDependencies', 'peerDependencies']: + if dep_type in package_data: + dependencies.update(package_data[dep_type].keys()) + return dependencies + +def topological_sort(graph): + visited = set() + stack = [] + + def dfs(node): + visited.add(node) + for neighbor in graph[node]: + if neighbor not in visited: + dfs(neighbor) + stack.append(node) + + for node in graph: + if node not in visited: + dfs(node) + + return stack[::-1] + +def main(): + packages_dir = 'packages' + package_graph = defaultdict(set) + all_packages = set() + + # Walk through the packages directory + for package_name in os.listdir(packages_dir): + package_path = os.path.join(packages_dir, package_name) + if os.path.isdir(package_path): + package_json_path = os.path.join(package_path, 'package.json') + if os.path.exists(package_json_path): + all_packages.add(package_name) + package_data = parse_package_json(package_json_path) + dependencies = get_dependencies(package_data) + + # Only consider dependencies that are in the packages directory + internal_dependencies = dependencies.intersection(all_packages) + package_graph[package_name].update(internal_dependencies) + + # Perform topological sort + sorted_packages = topological_sort(package_graph) + + # Output the result + for package in sorted_packages: + print(package) + +if __name__ == "__main__": + main() diff --git a/install.sh b/install.sh index d22dffe..9dfd316 100755 --- a/install.sh +++ b/install.sh @@ -1,9 +1,9 @@ #!/bin/bash -for upstream in $(ls packages); do +for upstream in $(./get_packages.py); do version=$(sed -nr 's/ +"version": "(.+)",/\1/p' packages/$upstream/package.json) - for downstream in $(ls packages); do + for downstream in $(./get_packages.py); do n=@welshman/$upstream f=packages/$downstream/package.json v=$(jq '.dependencies["'$n'"] // empty' $f) diff --git a/package-lock.json b/package-lock.json index 47db5b7..27ffa0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3265,7 +3265,7 @@ }, "packages/content": { "name": "@welshman/content", - "version": "0.0.5", + "version": "0.0.6", "license": "MIT", "dependencies": { "@braintree/sanitize-url": "^7.0.2", @@ -3279,12 +3279,12 @@ }, "packages/dvm": { "name": "@welshman/dvm", - "version": "0.0.2", + "version": "0.0.3", "license": "MIT", "dependencies": { - "@welshman/lib": "0.0.11", - "@welshman/net": "0.0.14", - "@welshman/util": "0.0.22", + "@welshman/lib": "0.0.12", + "@welshman/net": "0.0.15", + "@welshman/util": "0.0.23", "nostr-tools": "^2.7.0" }, "devDependencies": { @@ -3295,10 +3295,10 @@ }, "packages/feeds": { "name": "@welshman/feeds", - "version": "0.0.12", + "version": "0.0.13", "license": "MIT", "dependencies": { - "@welshman/util": "0.0.22" + "@welshman/util": "0.0.23" }, "devDependencies": { "gts": "^5.0.1", @@ -3308,7 +3308,7 @@ }, "packages/lib": { "name": "@welshman/lib", - "version": "0.0.11", + "version": "0.0.12", "license": "MIT", "dependencies": { "@scure/base": "^1.1.6", @@ -3332,11 +3332,11 @@ }, "packages/net": { "name": "@welshman/net", - "version": "0.0.14", + "version": "0.0.15", "license": "MIT", "dependencies": { - "@welshman/lib": "0.0.11", - "@welshman/util": "0.0.22", + "@welshman/lib": "0.0.12", + "@welshman/util": "0.0.23", "isomorphic-ws": "^5.0.0", "ws": "^8.16.0" }, @@ -3361,10 +3361,10 @@ }, "packages/util": { "name": "@welshman/util", - "version": "0.0.22", + "version": "0.0.23", "license": "MIT", "dependencies": { - "@welshman/lib": "0.0.11", + "@welshman/lib": "0.0.12", "nostr-tools": "^2.3.2" }, "devDependencies": { diff --git a/packages/content/package.json b/packages/content/package.json index 7658fcd..a77729c 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/content", - "version": "0.0.5", + "version": "0.0.6", "author": "hodlbod", "license": "MIT", "description": "A collection of utilities for parsing nostr note content.", diff --git a/packages/dvm/package.json b/packages/dvm/package.json index b0d59e1..a8fd92d 100644 --- a/packages/dvm/package.json +++ b/packages/dvm/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/dvm", - "version": "0.0.2", + "version": "0.0.3", "author": "hodlbod", "license": "MIT", "description": "A collection of utilities for building nostr DVMs.", @@ -31,9 +31,9 @@ "typescript": "~5.1.6" }, "dependencies": { - "@welshman/lib": "0.0.11", - "@welshman/net": "0.0.14", - "@welshman/util": "0.0.22", + "@welshman/lib": "0.0.12", + "@welshman/net": "0.0.15", + "@welshman/util": "0.0.23", "nostr-tools": "^2.7.0" } } diff --git a/packages/feeds/package.json b/packages/feeds/package.json index bf28140..bd7d374 100644 --- a/packages/feeds/package.json +++ b/packages/feeds/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/feeds", - "version": "0.0.12", + "version": "0.0.13", "author": "hodlbod", "license": "MIT", "description": "Utilities for building dynamic nostr feeds.", @@ -31,6 +31,6 @@ "typescript": "~5.1.6" }, "dependencies": { - "@welshman/util": "0.0.22" + "@welshman/util": "0.0.23" } } diff --git a/packages/lib/package.json b/packages/lib/package.json index 12f13d6..0d40ee3 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/lib", - "version": "0.0.11", + "version": "0.0.12", "author": "hodlbod", "license": "MIT", "description": "A collection of utilities.", diff --git a/packages/net/package.json b/packages/net/package.json index 78f960c..e974b2a 100644 --- a/packages/net/package.json +++ b/packages/net/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/net", - "version": "0.0.14", + "version": "0.0.15", "author": "hodlbod", "license": "MIT", "description": "Utilities for connecting with nostr relays.", @@ -31,8 +31,8 @@ "typescript": "~5.1.6" }, "dependencies": { - "@welshman/lib": "0.0.11", - "@welshman/util": "0.0.22", + "@welshman/lib": "0.0.12", + "@welshman/util": "0.0.23", "isomorphic-ws": "^5.0.0", "ws": "^8.16.0" } diff --git a/packages/util/package.json b/packages/util/package.json index 3c96687..8be78c4 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/util", - "version": "0.0.22", + "version": "0.0.23", "author": "hodlbod", "license": "MIT", "description": "A collection of nostr-related utilities.", @@ -31,7 +31,7 @@ "typescript": "~5.1.6" }, "dependencies": { - "@welshman/lib": "0.0.11", + "@welshman/lib": "0.0.12", "nostr-tools": "^2.3.2" } } diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..c01cee1 --- /dev/null +++ b/release.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +for package in $(./get_packages.py); do + npm run pub -w "packages/$package" +done diff --git a/tag.sh b/tag.sh index 4c71f3c..278846b 100755 --- a/tag.sh +++ b/tag.sh @@ -1,6 +1,6 @@ #!/bin/bash -for pkg in $(ls packages); do +for pkg in $(./get_packages.py); do version=$(sed -nr 's/ +"version": "(.+)",/\1/p' packages/$pkg/package.json) status=$(git status | grep "nothing to commit") diff --git a/versions.sh b/versions.sh index 06d6a1c..22d9134 100755 --- a/versions.sh +++ b/versions.sh @@ -1,6 +1,6 @@ #!/bin/bash -for upstream in $(ls packages); do +for upstream in $(./get_packages.py); do version=$(sed -nr 's/ +"version": "(.+)",/\1/p' packages/$upstream/package.json) echo $upstream $version diff --git a/watch.sh b/watch.sh index ebeffea..b9c3ea9 100755 --- a/watch.sh +++ b/watch.sh @@ -2,7 +2,7 @@ ./build.sh -for package in $(ls packages); do +for package in $(./get_packages.py); do npx onchange packages/$package -e '**/build/**' -k -- ./build_and_link.sh $package & done