Skip to content

Commit

Permalink
ci: properly handle subdependencies for Endo branch override
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelfig authored and mhofman committed Aug 7, 2023
1 parent d995eaa commit 50e4a3b
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 3 deletions.
15 changes: 12 additions & 3 deletions .github/actions/restore-node/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
39 changes: 39 additions & 0 deletions scripts/get-packed-versions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#! /bin/bash
# Usage: get-packed-versions.sh <WORKDIR>
#
# 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
19 changes: 19 additions & 0 deletions scripts/resolve-versions.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 50e4a3b

Please sign in to comment.