From 50e4a3b69c0004927e4e841d9bd3104d4f0c676d Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Tue, 20 Jun 2023 11:26:29 -0600 Subject: [PATCH] ci: properly handle subdependencies for Endo branch override --- .github/actions/restore-node/action.yml | 15 ++++++++-- scripts/get-packed-versions.sh | 39 +++++++++++++++++++++++++ scripts/resolve-versions.sh | 19 ++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100755 scripts/get-packed-versions.sh create mode 100755 scripts/resolve-versions.sh diff --git a/.github/actions/restore-node/action.yml b/.github/actions/restore-node/action.yml index ec924e9c908..62754f63f93 100644 --- a/.github/actions/restore-node/action.yml +++ b/.github/actions/restore-node/action.yml @@ -14,6 +14,11 @@ inputs: required: false default: '0' +outputs: + endo-branch: + description: 'The branch of Endo used (NOPE if no override)' + value: ${{ steps.endo-branch.outputs.result }} + runs: using: composite steps: @@ -98,14 +103,18 @@ runs: sudo apt-get update sudo apt-get install libbsd-dev fi - yarn install # Replace the Endo packages with the ones built from the checked-out branch. if test -e ~/endo; then - scripts/replace-packages.sh ~/endo - rm -rf ~/endo + scripts/get-packed-versions.sh ~/endo | scripts/resolve-versions.sh fi + yarn install mkdir -p node_modules/.cache/agoric date > node_modules/.cache/agoric/yarn-installed + if test -e ~/endo; then + # Remove traces of the redirected `yarn install`. + git restore package.json yarn.lock + rm -rf ~/endo + fi shell: bash if: steps.built.outputs.cache-hit != 'true' - name: yarn build diff --git a/scripts/get-packed-versions.sh b/scripts/get-packed-versions.sh new file mode 100755 index 00000000000..b1a173c5f5f --- /dev/null +++ b/scripts/get-packed-versions.sh @@ -0,0 +1,39 @@ +#! /bin/bash +# Usage: get-packed-versions.sh +# +# This script creates package tarballs in the specified workspace directory and +# writes out information for resolve-versions.sh to update a destination +# workspace to use them. This is useful for testing changes to dependencies of +# the destination repository. +set -xueo pipefail + +WORKDIR=${1:-.} +cd -- "$WORKDIR" 1>&2 + +# Install and build the source directory. +yarn install 1>&2 +yarn build 1>&2 +yarn --silent workspaces info | jq -r '.[].location' | while read -r dir; do + # Skip private packages. + echo "dir=$dir" 1>&2 + test "$(jq .private < "$dir/package.json")" != true || continue + + ################## + pushd "$dir" 1>&2 + + # Gather the metadata. + name=$(jq -r .name < package.json) + version=$(jq -r .version < package.json) + stem=$(echo "$name" | sed -e 's!^@!!; s!/!-!g;') + file="$(pwd)/${stem}-v${version}.tgz" + + # Create the tarball. + yarn pack 1>&2 + + # Write out the version entry. + jq -s --arg name "$name" --arg file "$file" \ + '{ key: $name, value: ("file:" + $file) }' < /dev/null + + popd 1>&2 + ################## +done | jq -s from_entries diff --git a/scripts/resolve-versions.sh b/scripts/resolve-versions.sh new file mode 100755 index 00000000000..c654f3891c8 --- /dev/null +++ b/scripts/resolve-versions.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -ueo pipefail + +# Accepts a dependency version map on stdin and updates the current +# package.json's resolutions section to use the packages and versions from +# the map. +# This is useful for temporary bulk updates over all packages. + +DIR=$(dirname -- "${BASH_SOURCE[0]}") + +cd -- "$DIR/.." + +override=$(jq 'to_entries | map({ key: ("**/" + .key), value: .value }) | from_entries') + +PACKAGEJSONHASH=$( + jq --arg override "$override" '.resolutions *= ($override | fromjson)' package.json | + git hash-object -w --stdin +) +git cat-file blob "$PACKAGEJSONHASH" > package.json