feat: image generation improvements (#87)

This commit is contained in:
Adam Uhlíř 2022-05-05 11:36:49 +02:00 committed by GitHub
parent 743b25e9fa
commit 365f77c1ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 104 additions and 103 deletions

View File

@ -26,9 +26,9 @@ on:
- '**'
env:
BEE_IMAGE_PREFIX: 'docker.pkg.github.com/ethersphere/bee-factory'
BEE_IMAGE_PREFIX: 'ethersphere'
BUILD_IMAGE: 'false'
COMMIT_VERSION_TAG: 'true'
COMMIT_VERSION_TAG: 'false'
STATE_COMMIT: 'true'
BEE_VERSION: '${{ github.event.client_payload.tag }}'
@ -56,19 +56,25 @@ jobs:
echo "BEE_VERSION=${BEE_VERSION/v}" >> $GITHUB_ENV
fi
- name: Auth to Github Package Docker Registry
- name: Auth to Docker Hub
if: ${{ github.event_name == 'repository_dispatch' || (github.event.inputs.buildImage == 'true' && success()) }}
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://docker.pkg.github.com -u ${GITHUB_ACTOR} --password-stdin
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u ${{secrets.DOCKERHUB_USERNAME}} --password-stdin
- uses: actions/cache@v2
id: cache-npm
with:
path: generator/node_modules
key: ${{ runner.os }}-${{ hashFiles('generator/package-lock.json') }}
- name: Install npm deps
run: npm ci
if: steps.cache-npm.outputs.cache-hit != 'true'
run: cd ./generator && npm ci
- name: Build images
id: build
run: |
cd ./generator
BUILD_PARAMS=""
if [ $BUILD_IMAGE == 'true' ] ; then
BUILD_PARAMS+=" --build-base-bee --base-bee-commit-hash=$BEE_VERSION"
@ -82,6 +88,7 @@ jobs:
id: publish
if: ${{ github.event_name == 'repository_dispatch' || (github.event.inputs.buildImage == 'true' && success()) }}
run: |
cd ./generator
npm run publish:env
- name: Trigger Bee-js PR creation

View File

@ -32,7 +32,7 @@ $ npm install -g @ethersphere/bee-factory
```shell
# This spin up the cluster and exits
$ bee-factory start --detach 1.2.0 1.5.1-d0a77598-stateful
$ bee-factory start --detach 1.2.0 1.5.1
# This attaches to the Queen container and displays its logs
$ bee-factory logs queen
@ -43,11 +43,20 @@ $ bee-factory stop
# You can also spin up the cluster without the --detach which then directly
# attaches to the Queen logs and the cluster is terminated upon SIGINT (Ctrl+C)
$ bee-factory start 1.2.0 1.5.1-d0a77598-stateful
$ bee-factory start 1.2.0 1.5.1
```
For more details see the `--help` page of the CLI and its commands.
### Docker Images
Bee Factory as the NPM package that you can install, like mentioned above, works in a way that it orchestrates launching Bee Factory Docker images
in correct order and awaits for certain initializations to happen in correct form. These Docker images are automatically built with our CI
upon every new Bee release, so you can just specify which version you want to run (starting with `1.5.1` version) as part of the `start` command.
If for some reason you want built your own images, that is possible but discouraged and not supported (**here be dragons**) using the scripts in the `generator` subfolder.
Upon building and publishing these images you can consume them using with Bee Factory with the `--repo` flag.
## Contribute
There are some ways you can make this module better:

View File

@ -68,7 +68,7 @@ OR it is possible to build docker images on a desired state, so that a fresh env
Basically, a full-featured Bee environment has 2 types of Docker image:
- Bee images: Bee clients with pre-defined keys (and optionally including the state which you nodes have in its [data-dirs](bee-data-dirs))
- Bee images: Bee clients with pre-defined keys (and optionally including the state which you nodes have in its [data-dirs](scripts/bee-data-dirs))
```sh
./scripts/bee-docker-build.sh
```

View File

@ -9,7 +9,7 @@
"version": "0.0.1",
"license": "BSD-3-Clause",
"dependencies": {
"@ethersphere/bee-js": "^3.2.0",
"@ethersphere/bee-js": "^3.3.4",
"@openzeppelin/contracts": "^3.1.0",
"truffle": "^5.3.5"
}
@ -1038,26 +1038,28 @@
}
},
"node_modules/@ethersphere/bee-js": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-3.2.0.tgz",
"integrity": "sha512-ZVcbl8dsytx07+SxTmsKSn0X1zojR7vMb0uxQ+fGk05JHFNGBY2Qv/5AP7rI/SqGWDjHWIMB8Ww+ErURdyFXqA==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-3.3.4.tgz",
"integrity": "sha512-uxH0kR31tE8IKVON7jyQHANZ/5edlU8OUCz/qyRft1YeS+L4HzEHAD3bN58iE842nt6Iz/fekrJ7yk1ONIcDBg==",
"dependencies": {
"@types/readable-stream": "^2.3.11",
"bufferutil": "^4.0.3",
"cross-blob": "^2.0.1",
"@types/readable-stream": "^2.3.13",
"bufferutil": "^4.0.6",
"elliptic": "^6.5.4",
"fetch-blob": "2.1.2",
"isomorphic-ws": "^4.0.1",
"js-sha3": "^0.8.0",
"ky": "^0.25.1",
"ky-universal": "^0.8.2",
"readable-stream": "^3.6.0",
"semver": "^7.3.5",
"tar-js": "^0.3.0",
"utf-8-validate": "^5.0.8",
"web-streams-polyfill": "^3.1.0",
"ws": "^7.5.0"
"utf-8-validate": "^5.0.9",
"web-streams-polyfill": "^4.0.0-beta.1",
"ws": "^8.5.0"
},
"engines": {
"bee": "1.4.1-238867f1",
"bee": "1.5.1-d0a77598",
"beeApiVersion": "3.0.0",
"beeDebugApiVersion": "2.0.0",
"node": ">=12.0.0",
"npm": ">=6.0.0"
}
@ -1086,12 +1088,20 @@
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
"integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
},
"node_modules/@ethersphere/bee-js/node_modules/ws": {
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
"integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
"node_modules/@ethersphere/bee-js/node_modules/web-streams-polyfill": {
"version": "4.0.0-beta.2",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.2.tgz",
"integrity": "sha512-UHhhnoe2M40uh2r0KVdJTN7qjFytm6o0Yp3VcjwV3bfo6rz8uqvxNoE5yNmGF0y3eFfXaFeb6M09MDSwwLmq4w==",
"engines": {
"node": ">=8.3.0"
"node": ">= 14"
}
},
"node_modules/@ethersphere/bee-js/node_modules/ws": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz",
"integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
@ -5373,11 +5383,6 @@
"resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
"integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U="
},
"node_modules/blob-polyfill": {
"version": "5.0.20210201",
"resolved": "https://registry.npmjs.org/blob-polyfill/-/blob-polyfill-5.0.20210201.tgz",
"integrity": "sha512-SrH6IG6aXL9pCgSysBCiDpGcAJ1j6/c1qCwR3sTEQJhb+MTk6FITNA6eW6WNYQDNZVi4Z9GjxH5v2MMTv59CrQ=="
},
"node_modules/blob-to-it": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-1.0.2.tgz",
@ -5712,12 +5717,15 @@
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
},
"node_modules/bufferutil": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz",
"integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz",
"integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==",
"hasInstallScript": true,
"dependencies": {
"node-gyp-build": "^4.2.0"
"node-gyp-build": "^4.3.0"
},
"engines": {
"node": ">=6.14.2"
}
},
"node_modules/busboy": {
@ -6426,18 +6434,6 @@
"sha.js": "^2.4.8"
}
},
"node_modules/cross-blob": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/cross-blob/-/cross-blob-2.0.1.tgz",
"integrity": "sha512-ARuKPPo3I6DSqizal4UCyMCiGPQdMpMJS3Owx6Lleuh26vSt2UnfWRwbMLCYqbJUrcol+KzGVSLR91ezSHP80A==",
"dependencies": {
"blob-polyfill": "^5.0.20210201",
"fetch-blob": "^2.1.2"
},
"engines": {
"node": "^10.17.0 || >=12.3.0"
}
},
"node_modules/cross-fetch": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz",
@ -16567,9 +16563,9 @@
}
},
"node_modules/utf-8-validate": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz",
"integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==",
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz",
"integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==",
"hasInstallScript": true,
"dependencies": {
"node-gyp-build": "^4.3.0"
@ -16802,6 +16798,8 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
"integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==",
"optional": true,
"peer": true,
"engines": {
"node": ">= 8"
}
@ -18693,23 +18691,23 @@
}
},
"@ethersphere/bee-js": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-3.2.0.tgz",
"integrity": "sha512-ZVcbl8dsytx07+SxTmsKSn0X1zojR7vMb0uxQ+fGk05JHFNGBY2Qv/5AP7rI/SqGWDjHWIMB8Ww+ErURdyFXqA==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-3.3.4.tgz",
"integrity": "sha512-uxH0kR31tE8IKVON7jyQHANZ/5edlU8OUCz/qyRft1YeS+L4HzEHAD3bN58iE842nt6Iz/fekrJ7yk1ONIcDBg==",
"requires": {
"@types/readable-stream": "^2.3.11",
"bufferutil": "^4.0.3",
"cross-blob": "^2.0.1",
"@types/readable-stream": "^2.3.13",
"bufferutil": "^4.0.6",
"elliptic": "^6.5.4",
"fetch-blob": "2.1.2",
"isomorphic-ws": "^4.0.1",
"js-sha3": "^0.8.0",
"ky": "^0.25.1",
"ky-universal": "^0.8.2",
"readable-stream": "^3.6.0",
"semver": "^7.3.5",
"tar-js": "^0.3.0",
"utf-8-validate": "^5.0.8",
"web-streams-polyfill": "^3.1.0",
"ws": "^7.5.0"
"utf-8-validate": "^5.0.9",
"web-streams-polyfill": "^4.0.0-beta.1",
"ws": "^8.5.0"
},
"dependencies": {
"bn.js": {
@ -18736,10 +18734,15 @@
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
"integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
},
"web-streams-polyfill": {
"version": "4.0.0-beta.2",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.2.tgz",
"integrity": "sha512-UHhhnoe2M40uh2r0KVdJTN7qjFytm6o0Yp3VcjwV3bfo6rz8uqvxNoE5yNmGF0y3eFfXaFeb6M09MDSwwLmq4w=="
},
"ws": {
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
"integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz",
"integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==",
"requires": {}
}
}
@ -22532,11 +22535,6 @@
"resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
"integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U="
},
"blob-polyfill": {
"version": "5.0.20210201",
"resolved": "https://registry.npmjs.org/blob-polyfill/-/blob-polyfill-5.0.20210201.tgz",
"integrity": "sha512-SrH6IG6aXL9pCgSysBCiDpGcAJ1j6/c1qCwR3sTEQJhb+MTk6FITNA6eW6WNYQDNZVi4Z9GjxH5v2MMTv59CrQ=="
},
"blob-to-it": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-1.0.2.tgz",
@ -22824,11 +22822,11 @@
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
},
"bufferutil": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz",
"integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz",
"integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==",
"requires": {
"node-gyp-build": "^4.2.0"
"node-gyp-build": "^4.3.0"
}
},
"busboy": {
@ -23437,15 +23435,6 @@
"sha.js": "^2.4.8"
}
},
"cross-blob": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/cross-blob/-/cross-blob-2.0.1.tgz",
"integrity": "sha512-ARuKPPo3I6DSqizal4UCyMCiGPQdMpMJS3Owx6Lleuh26vSt2UnfWRwbMLCYqbJUrcol+KzGVSLR91ezSHP80A==",
"requires": {
"blob-polyfill": "^5.0.20210201",
"fetch-blob": "^2.1.2"
}
},
"cross-fetch": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz",
@ -32000,9 +31989,9 @@
}
},
"utf-8-validate": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz",
"integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==",
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz",
"integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==",
"requires": {
"node-gyp-build": "^4.3.0"
}
@ -32203,7 +32192,9 @@
"web-streams-polyfill": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
"integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA=="
"integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==",
"optional": true,
"peer": true
},
"web3": {
"version": "1.3.5",

View File

@ -13,7 +13,7 @@
"gen:traffic": "node ./scripts/gen-traffic.js"
},
"dependencies": {
"@ethersphere/bee-js": "^3.2.0",
"@ethersphere/bee-js": "^3.3.4",
"@openzeppelin/contracts": "^3.1.0",
"truffle": "^5.3.5"
},

View File

@ -1,6 +1,6 @@
BEE_VERSION="1.4.1"
BLOCKCHAIN_VERSION="1.2.0"
BEE_ENV_PREFIX="swarm-test"
BEE_IMAGE_PREFIX="docker.pkg.github.com/ethersphere/bee-factory"
BEE_ENV_PREFIX="bee-factory"
BEE_IMAGE_PREFIX="ethersphere"
COMMIT_VERSION_TAG="false"
STATE_COMMIT="false"

View File

@ -45,11 +45,11 @@ if [ "$COMMIT_VERSION_TAG" == "true" ] ; then
"$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION"
fi
if [ "$STATE_COMMIT" == 'true' ] ; then
echo "The bee image will be built with their state"
BEE_VERSION+="-stateful"
if [ "$STATE_COMMIT" == 'false' ] ; then
echo "The bee image will be built without their state"
BEE_VERSION+="-stateless"
"$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION"
echo "Stateful Bee version: $BEE_VERSION"
echo "Stateless Bee version: $BEE_VERSION"
fi
### BEE_VERSION ALERNATIONS END

View File

@ -8,7 +8,6 @@ BLOCKCHAIN_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BLOCKCHAIN_VERSION)
STATE_COMMIT=$("$MY_PATH/utils/env-variable-value.sh" STATE_COMMIT)
if [ "$STATE_COMMIT" == 'true' ] ; then
export COMMIT_VERSION_TAG='true'
BEE_VERSION=$("$MY_PATH/utils/build-image-tag.sh" get)
BLOCKCHAIN_VERSION+="-for-$BEE_VERSION"
echo "Blockchain will have image version: $BLOCKCHAIN_VERSION"

View File

@ -40,11 +40,6 @@ build_bee() {
"$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION"
}
# the image label for the produced bee images in case of state commitment
stateful_image_label() {
echo "$BEE_VERSION-stateful"
}
MY_PATH=$(dirname "$0")
MY_PATH=$( cd "$MY_PATH" && pwd )
COMMIT_HASH=HEAD

View File

@ -6,7 +6,7 @@ STATE_COMMIT=$("$MY_PATH/utils/env-variable-value.sh" STATE_COMMIT)
BUILD_IMAGE=$("$MY_PATH/utils/env-variable-value.sh" BUILD_IMAGE)
BLOCKCHAIN_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BLOCKCHAIN_VERSION)
if [ $BUILD_IMAGE == 'true' ] || [ $STATE_COMMIT == 'true' ] ; then
if [ $BUILD_IMAGE == 'true' ] ; then
# Necessary for fetch BEE_VERSION from .commit-version-tag
export COMMIT_VERSION_TAG='true'
fi

View File

@ -12,7 +12,7 @@ import { waitForBlockchain, waitForQueen, waitForWorkers } from '../utils/wait'
import ora from 'ora'
import { VerbosityLevel } from './root-command/logging'
const DEFAULT_REPO = 'ghcr.io/ethersphere/bee-factory'
const DEFAULT_REPO = 'ethersphere'
export const ENV_ENV_PREFIX_KEY = 'FACTORY_ENV_PREFIX'
const ENV_IMAGE_PREFIX_KEY = 'FACTORY_IMAGE_PREFIX'

View File

@ -3,7 +3,7 @@ import { Logging } from '../command/root-command/logging'
import { ContainerImageConflictError } from './error'
export const DEFAULT_ENV_PREFIX = 'bee-factory'
export const DEFAULT_IMAGE_PREFIX = 'swarm-test'
export const DEFAULT_IMAGE_PREFIX = 'bee-factory'
const BLOCKCHAIN_IMAGE_NAME_SUFFIX = '-blockchain'
const QUEEN_IMAGE_NAME_SUFFIX = '-queen'

View File

@ -9,7 +9,7 @@ import { DockerError } from '../../src/utils/docker'
import { findContainer, waitForUsablePostageStamp } from '../utils/docker'
const BLOCKCHAIN_VERSION = '1.2.0'
const BEE_VERSION = '1.5.1-d0a77598-stateful'
const BEE_VERSION = '1.5.1'
let testFailed = false

View File

@ -7,7 +7,7 @@ import { ENV_ENV_PREFIX_KEY } from '../../src/command/start'
import { findContainer } from '../utils/docker'
const BLOCKCHAIN_VERSION = '1.2.0'
const BEE_VERSION = '1.5.1-d0a77598-stateful'
const BEE_VERSION = '1.5.1'
describe('stop command', () => {
let docker: Dockerode