Skip to content

Commit

Permalink
Merge pull request #8635 from Agoric/8605-local-a3p
Browse files Browse the repository at this point in the history
8605 a3p integration
  • Loading branch information
mergify[bot] authored and mhofman committed Jan 12, 2024
2 parents 097e6e0 + 539fd93 commit 2acad14
Show file tree
Hide file tree
Showing 26 changed files with 3,377 additions and 1,247 deletions.
9 changes: 1 addition & 8 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ module.exports = {
{
files: ['*.ts'],
rules: {
'jsdoc/require-param-type': 'off',
// TS has this covered and eslint gets it wrong
'no-undef': 'off',
},
Expand All @@ -119,13 +120,5 @@ module.exports = {
project: false,
},
},
{
files: ['packages/**/upgrade-test-scripts/**/*.*js'],
rules: {
// NOTE: This rule is enabled for the repository in general. We turn it
// off for test code for now.
'@jessie.js/safe-await-separator': 'off',
},
},
],
};
20 changes: 11 additions & 9 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -231,15 +231,17 @@ jobs:
# Produces ghcr.io/agoric/agoric-sdk:latest used in the following upgrade test.
# run: cd packages/deployment && ./scripts/test-docker-build.sh | $TEST_COLLECT
# XXX skip TAP test output and collection for now; it hides the output from the logs
run: cd packages/deployment && make docker-build-sdk
- name: docker build upgrade test
run: |
cd packages/deployment/upgrade-test && \
docker build \
--build-arg DEST_IMAGE=ghcr.io/agoric/agoric-sdk:latest \
-t docker-upgrade-test:latest -f Dockerfile upgrade-test-scripts
- name: docker run upgrade final stage
run: docker run --env "DEST=0" docker-upgrade-test:latest
run: make docker-build-sdk
working-directory: packages/deployment
- name: setup a3p-integration
run: yarn install
working-directory: a3p-integration
- name: build proposals tests
run: yarn synthetic-chain append
working-directory: a3p-integration
- name: run proposals tests
run: yarn synthetic-chain test
working-directory: a3p-integration
- name: notify on failure
if: failure() && github.event_name != 'pull_request'
uses: ./.github/actions/notify-status
Expand Down
12 changes: 12 additions & 0 deletions a3p-integration/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# build in CI
Dockerfile
upgrade-test-scripts

# Yarn (https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored)
proposals/*/.pnp.*
proposals/*/.yarn/*
proposals/*/!.yarn/patches
proposals/*/!.yarn/plugins
proposals/*/!.yarn/releases
proposals/*/!.yarn/sdks
proposals/*/!.yarn/versions
50 changes: 50 additions & 0 deletions a3p-integration/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Integration with agoric-3 synthetic test chain

The test runner is `@agoric/synthetic-chain`. This package depends on that so that you can run,
```
yarn synthetic-chain append
yarn synthetic-chain test
yarn synthetic-chain test --debug
```

# Package management

This directory hierarchy, while it contains packages, is not part of the agoric-sdk workspace. This is to isolate it from tooling that expects a public package published to NPM.

For each proposal, their package.json is also separate but it can't access the SDK code. Instead you must either source a published version of `@agoric/synthetic-chain` (e.g. a `dev` version published on each master commit) or pack a tarball and source that.

```
cd packages/synthetic-chain
yarn pack
TARBALL=`ls *.tgz`
cd -
mv packages/synthetic-chain/$TARBALL a3p-integration/proposals/c:myproposal/
# .tgz are gitignored at the root but a closer .gitignore makes an exception for this package's tarball
git add a3p-integration/proposals/c:myproposal/$TARBALL
yarn add @agoric/synthetic-chain@file:$TARBALL
```

# Troubleshooting

## no match for platform

If you get an error like this,
```
ERROR: failed to solve: ghcr.io/agoric/agoric-3-proposals:main: no match for platform in manifest sha256:83321abda66fa94915f1ae20d651b66870f2d1aac17b71449c04ecd46b6b1b96: not found
```
it's because our CI only builds x64 yet and you're on some other machine, probably a Mac.

There is some effort to make CI build multiplatform: https://github.com/Agoric/agoric-3-proposals/pull/32

Meanwhile you can build the `main` image locally:

```sh
cd agoric-3-proposals
./node_modules/.bin/synthetic-chain build

# build the default entrypoint and tag it so the `append` command finds it
docker buildx build --tag ghcr.io/agoric/agoric-3-proposals:main .
```
12 changes: 12 additions & 0 deletions a3p-integration/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"private": true,
"scripts": {
"build": "echo Use synthetic-chain to build proposal images",
"test": "echo Use synthetic-chain to test proposal images"
},
"dependencies": {
"@agoric/synthetic-chain": "^0.0.2-0",
"tsx": "^4.7.0"
},
"license": "Apache-2.0"
}
1 change: 1 addition & 0 deletions a3p-integration/proposals/a:upgrade-13/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
20 changes: 20 additions & 0 deletions a3p-integration/proposals/a:upgrade-13/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"agoricProposal": {
"releaseNotes": "https://github.com/Agoric/agoric-sdk/releases/tag/agoric-upgrade-13",
"sdkImageTag": "latest",
"planName": "agoric-upgrade-13",
"type": "Software Upgrade Proposal"
},
"type": "module",
"license": "Apache-2.0",
"dependencies": {
"@agoric/synthetic-chain": "^0.0.2-0",
"ava": "^5.3.1",
"better-sqlite3": "^9.2.2",
"execa": "^7.2.0"
},
"scripts": {
"agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops"
},
"packageManager": "[email protected]"
}
55 changes: 55 additions & 0 deletions a3p-integration/proposals/a:upgrade-13/post.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import test from 'ava';

import { agd } from '@agoric/synthetic-chain/src/lib/cliHelper.js';
import {
ATOM_DENOM,
CHAINID,
GOV1ADDR,
} from '@agoric/synthetic-chain/src/lib/constants.js';
import {
mintIST,
getISTBalance,
openVault,
} from '@agoric/synthetic-chain/src/lib/econHelpers.js';
import {
waitForBlock,
addUser,
} from '@agoric/synthetic-chain/src/lib/commonUpgradeHelpers.js';

test.before(async t => {
await mintIST(GOV1ADDR, 12340000000, 10000, 2000);

await waitForBlock(2);
const userAddress = await addUser('user-auto');
await agd.tx(
'bank',
'send',
'gov1',
userAddress,
`1000000uist,2100000000${ATOM_DENOM}`,
'--from',
GOV1ADDR,
'--chain-id',
CHAINID,
'--keyring-backend',
'test',
'--yes',
);
t.context = { userAddress };
await waitForBlock(2);
});

test('Open Vaults with auto-provisioned wallet', async t => {
const { userAddress } = /** @type {{userAddress: string}} */ (t.context);
t.is(await getISTBalance(userAddress), 1);

const ATOMGiven = 2000;
const ISTWanted = 400;
await openVault(userAddress, ISTWanted, ATOMGiven);

await waitForBlock(2);

const newISTBalance = await getISTBalance(userAddress);
t.log('New IST Balance in user-auto account:', newISTBalance);
t.true(newISTBalance >= ISTWanted, 'Got the wanted IST');
});
4 changes: 4 additions & 0 deletions a3p-integration/proposals/a:upgrade-13/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
source /usr/src/upgrade-test-scripts/env_setup.sh

yarn ava post.test.js
5 changes: 5 additions & 0 deletions a3p-integration/proposals/a:upgrade-13/use.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

# UNTIl this is upstream https://github.com/Agoric/agoric-3-proposals/issues/40
# Set to zero so tests don't have to pay gas (we're not testing that)
sed --in-place=.bak s/'minimum-gas-prices = ""'/'minimum-gas-prices = "0ubld,0uist"'/ ~/.agoric/config/app.toml
Loading

0 comments on commit 2acad14

Please sign in to comment.