Skip to content

Commit

Permalink
Merge pull request #7958 from Agoric/mfig-endo-ci
Browse files Browse the repository at this point in the history
ci: properly handle subdependencies for Endo branch override
  • Loading branch information
michaelfig authored Jun 22, 2023
2 parents 4b79eb6 + da12531 commit b05c226
Show file tree
Hide file tree
Showing 5 changed files with 86 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
8 changes: 8 additions & 0 deletions .github/workflows/test-all-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,8 @@ jobs:
- uses: ./.github/actions/restore-node
with:
node-version: ${{ steps.vars.outputs.node-version }}
id: restore-node
- run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV
# END-TEST-BOILERPLATE
- name: yarn test (SwingSet)
if: (success() || failure())
Expand Down Expand Up @@ -504,6 +506,8 @@ jobs:
- uses: ./.github/actions/restore-node
with:
node-version: ${{ steps.vars.outputs.node-version }}
id: restore-node
- run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV
# END-TEST-BOILERPLATE
- name: yarn test (SwingSet)
if: (success() || failure())
Expand Down Expand Up @@ -553,6 +557,8 @@ jobs:
- uses: ./.github/actions/restore-node
with:
node-version: ${{ steps.vars.outputs.node-version }}
id: restore-node
- run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV
# END-TEST-BOILERPLATE
- name: yarn test (SwingSet)
if: (success() || failure())
Expand Down Expand Up @@ -592,6 +598,8 @@ jobs:
- uses: ./.github/actions/restore-node
with:
node-version: ${{ steps.vars.outputs.node-version }}
id: restore-node
- run: echo "ENDO_BRANCH=${{ steps.restore-node.outputs.endo-branch }}" >> $GITHUB_ENV
# END-TEST-BOILERPLATE

- name: yarn test (SwingSet)
Expand Down
8 changes: 8 additions & 0 deletions packages/SwingSet/test/test-xsnap-store.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* global globalThis */
import '@endo/init/debug.js';

import { spawn } from 'child_process';
Expand Down Expand Up @@ -130,6 +131,13 @@ test('create SES worker, save, restore, resume', async t => {
* They are also sensitive to the XS code itself.
*/
test('XS + SES snapshots are long-term deterministic', async t => {
const ENDO_BRANCH = globalThis.process?.env?.ENDO_BRANCH;
if (ENDO_BRANCH && ENDO_BRANCH !== 'NOPE') {
t.log(`Skipping test on ENDO_BRANCH=${ENDO_BRANCH}`);
t.pass();
return;
}

const db = sqlite3(':memory:');
const store = makeSnapStore(db, () => {}, makeMockSnapStoreIO());

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 b05c226

Please sign in to comment.