Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: ability to deploy different software package to a subset of nodes #232

Merged
merged 46 commits into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
05ce52e
clone hedera repo
JeffreyDallas Apr 15, 2024
8928b0e
Merge commit '05768c074dba79638b8365722450ef33b3352869' into 00207-D-…
JeffreyDallas Apr 15, 2024
1cdf25a
code check
JeffreyDallas Apr 15, 2024
1a487e0
setup java
JeffreyDallas Apr 15, 2024
89d95e6
update
JeffreyDallas Apr 15, 2024
c2d4811
update description
JeffreyDallas Apr 16, 2024
a97275c
add check
JeffreyDallas Apr 16, 2024
44231be
add flag
JeffreyDallas Apr 16, 2024
535e4f7
save
JeffreyDallas Apr 16, 2024
5c1508c
minor update
JeffreyDallas Apr 19, 2024
2785d5f
Merge branch 'main' into 00207-D-local-build
JeffreyDallas Apr 19, 2024
986f7e4
save
JeffreyDallas Apr 22, 2024
28372de
rename
JeffreyDallas Apr 23, 2024
f353f32
update readme
JeffreyDallas Apr 23, 2024
83e7203
platform running
JeffreyDallas Apr 23, 2024
55440df
add ptt test
JeffreyDallas Apr 24, 2024
3e8c5a3
Merge commit '11d076a1ef01fcdf3a8b227c501f6b7510ed0b94' into 00207-D-…
JeffreyDallas Apr 24, 2024
960d460
code check
JeffreyDallas Apr 24, 2024
cec2404
Merge branch '00244-D-relay-test' into 00207-D-local-build
JeffreyDallas May 10, 2024
8ae6da7
Merge branch 'main' into 00207-D-local-build
JeffreyDallas May 10, 2024
10bd963
setup java/gradle
JeffreyDallas May 10, 2024
033d677
remove
JeffreyDallas May 10, 2024
d0c7ef7
include new node test
JeffreyDallas May 10, 2024
b144dd6
Merge branch 'main' into 00207-D-local-build
JeffreyDallas May 10, 2024
98d242f
code check
JeffreyDallas May 10, 2024
f33c64c
Merge commit '5dbc60bdde4dcf32381808731ffabad5fc8c14fd' into 00207-D-…
JeffreyDallas May 13, 2024
bc7feb2
save
JeffreyDallas May 13, 2024
6f8dd9f
save
JeffreyDallas May 13, 2024
7e85c52
fix
JeffreyDallas May 13, 2024
9213d52
save
JeffreyDallas May 13, 2024
4761345
fix
JeffreyDallas May 13, 2024
da2cf66
update
JeffreyDallas May 14, 2024
147e9e2
Merge commit '62d8a06cfafc211772b527ada57d00c447b56567' into 00207-D-…
JeffreyDallas May 14, 2024
f531cdf
save
JeffreyDallas May 14, 2024
e2b42c7
save
JeffreyDallas May 14, 2024
07b1884
save
JeffreyDallas May 14, 2024
66c6c5f
fix typo
JeffreyDallas May 15, 2024
a0382d9
fix
JeffreyDallas May 15, 2024
ad0807a
Merge branch 'main' into 00207-D-local-build
JeffreyDallas May 15, 2024
1e26d61
fix
JeffreyDallas May 15, 2024
72232f7
add missing
JeffreyDallas May 15, 2024
58e9acd
fix
JeffreyDallas May 15, 2024
0d2182a
save
JeffreyDallas May 15, 2024
c1ffe4b
save
JeffreyDallas May 15, 2024
c0a1cac
fix type in env vars file
jeromy-cannon May 16, 2024
7963fdf
put gradle under cgroup
jeromy-cannon May 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/workflows/flow-build-application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,18 @@ jobs:
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-coverage-report }}

e2e-node-local-build-tests:
name: E2E Tests
uses: ./.github/workflows/zxc-e2e-test.yaml
needs:
- env-vars
- code-style
with:
custom-job-label: Node Local Build
npm-test-script: test-${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-local-build-coverage-report }}

e2e-relay-tests:
name: E2E Tests
if: ${{ github.event_name == 'push' || github.event.inputs.enable-e2e-tests == 'true' }}
Expand All @@ -139,6 +151,7 @@ jobs:
- e2e-mirror-node-tests
- e2e-node-pem-stop-add-tests
- e2e-node-pfx-kill-add-tests
- e2e-node-local-build-tests
- e2e-relay-tests
if: ${{ (github.event_name == 'push' || github.event.inputs.enable-unit-tests == 'true' || github.event.inputs.enable-e2e-tests == 'true') && !failure() && !cancelled() }}
with:
Expand All @@ -151,11 +164,13 @@ jobs:
e2e-mirror-node-test-subdir: ${{ needs.env-vars.outputs.e2e-mirror-node-test-subdir }}
e2e-node-pem-stop-add-test-subdir: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-test-subdir }}
e2e-node-pfx-kill-add-test-subdir: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-test-subdir }}
e2e-node-local-build-test-subdir: ${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
e2e-relay-test-subdir: ${{ needs.env-vars.outputs.e2e-relay-test-subdir }}
e2e-coverage-report: ${{ needs.env-vars.outputs.e2e-coverage-report }}
e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
jeromy-cannon marked this conversation as resolved.
Show resolved Hide resolved
e2e-node-pem-stop-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-coverage-report }}
e2e-node-pfx-kill-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-coverage-report }}
e2e-node-local-build-coverage-report: ${{ needs.env-vars.outputs.e2e-node-local-build-coverage-report }}
e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
secrets:
snyk-token: ${{ secrets.SNYK_TOKEN }}
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/flow-pull-request-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,18 @@ jobs:
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-coverage-report }}

e2e-node-local-build-tests:
name: E2E Tests
uses: ./.github/workflows/zxc-e2e-test.yaml
needs:
- env-vars
- code-style
with:
custom-job-label: Node Local Build
npm-test-script: test-${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-local-build-coverage-report }}

e2e-relay-tests:
name: E2E Tests
uses: ./.github/workflows/zxc-e2e-test.yaml
Expand All @@ -122,6 +134,7 @@ jobs:
- e2e-mirror-node-tests
- e2e-node-pem-stop-add-tests
- e2e-node-pfx-kill-add-tests
- e2e-node-local-build-tests
- e2e-relay-tests
if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
with:
Expand All @@ -132,11 +145,13 @@ jobs:
e2e-mirror-node-test-subdir: ${{ needs.env-vars.outputs.e2e-mirror-node-test-subdir }}
e2e-node-pem-stop-add-test-subdir: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-test-subdir }}
e2e-node-pfx-kill-add-test-subdir: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-test-subdir }}
e2e-node-local-build-test-subdir: ${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
e2e-relay-test-subdir: ${{ needs.env-vars.outputs.e2e-relay-test-subdir }}
e2e-coverage-report: ${{ needs.env-vars.outputs.e2e-coverage-report }}
e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
jeromy-cannon marked this conversation as resolved.
Show resolved Hide resolved
e2e-node-pem-stop-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-coverage-report }}
e2e-node-pfx-kill-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-coverage-report }}
e2e-node-local-build-coverage-report: ${{ needs.env-vars.outputs.e2e-node-local-build-coverage-report }}
e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
secrets:
codecov-token: ${{ secrets.CODECOV_TOKEN }}
Expand All @@ -151,6 +166,7 @@ jobs:
- e2e-mirror-node-tests
- e2e-node-pem-stop-add-tests
- e2e-node-pfx-kill-add-tests
- e2e-node-local-build-tests
- e2e-relay-tests
if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
with:
Expand All @@ -161,11 +177,13 @@ jobs:
e2e-mirror-node-test-subdir: ${{ needs.env-vars.outputs.e2e-mirror-node-test-subdir }}
e2e-node-pem-stop-add-test-subdir: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-test-subdir }}
e2e-node-pfx-kill-add-test-subdir: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-test-subdir }}
e2e-node-local-build-test-subdir: ${{ needs.env-vars.outputs.e2e-node-local-build-test-subdir }}
e2e-relay-test-subdir: ${{ needs.env-vars.outputs.e2e-relay-test-subdir }}
e2e-coverage-report: ${{ needs.env-vars.outputs.e2e-coverage-report }}
e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
jeromy-cannon marked this conversation as resolved.
Show resolved Hide resolved
e2e-node-pem-stop-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-coverage-report }}
e2e-node-pfx-kill-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-coverage-report }}
e2e-node-local-build-coverage-report: ${{ needs.env-vars.outputs.e2e-node-local-build-coverage-report }}
e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
secrets:
codacy-project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
Expand Down Expand Up @@ -194,6 +212,7 @@ jobs:
# e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
# e2e-node-pem-stop-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pem-stop-add-coverage-report }}
# e2e-node-pfx-kill-add-coverage-report: ${{ needs.env-vars.outputs.e2e-node-pfx-kill-add-coverage-report }}
# e2e-node-local-build-coverage-report: ${{ needs.env-vars.outputs.e2e-node-local-build-coverage-report }}
# e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
# secrets:
# snyk-token: ${{ secrets.SNYK_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/flow-update-readme.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ jobs:

export SOLO_RELAY_DEPLAY_OUTPUT=$( solo relay deploy -i node0,node1 | tee test.log )

export SOLO_INIT_047_OUTPUT=$( solo init -t v0.47.0-alpha.0 -i node0,node1,node2 -n "${SOLO_NAMESPACE}" \
export SOLO_INIT_047_OUTPUT=$( solo init -t v0.48.0-alpha.0 -i node0,node1,node2 -n "${SOLO_NAMESPACE}" \
-s "${SOLO_CLUSTER_SETUP_NAMESPACE}" --key-format pem | tee test.log )

export SOLO_NODE_KEY_PEM_OUTPUT=$( solo node keys --gossip-keys --tls-keys --key-format pem | tee test.log )
Expand Down
17 changes: 17 additions & 0 deletions .github/workflows/zxc-code-analysis.yaml
jeromy-cannon marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ on:
type: string
required: false
default: "e2e-node-pfx-kill-add"
e2e-node-local-build-test-subdir:
description: "E2E Node Local Build Test Subdirectory:"
type: string
required: false
default: "e2e-node-local-build"
e2e-relay-test-subdir:
description: "E2E Relay Test Subdirectory:"
type: string
Expand All @@ -100,6 +105,11 @@ on:
type: string
required: false
default: "E2E Node PFX Kill Add Tests Coverage Report"
e2e-node-local-build-coverage-report:
description: "E2E Node Local Build Coverage Report:"
type: string
required: false
default: "E2E Node Local Build Tests Coverage Report"
e2e-relay-coverage-report:
description: "E2E Relay Coverage Report:"
type: string
Expand Down Expand Up @@ -190,6 +200,13 @@ jobs:
name: ${{ inputs.e2e-relay-coverage-report }}
path: 'coverage/${{ inputs.e2e-relay-test-subdir }}'

- name: Download E2E Local Build Coverage Report
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
with:
name: ${{ inputs.e2e-node-local-build-test-coverage-report }}
path: 'coverage/${{ inputs.e2e-node-local-build-test-subdir }}'

- name: Publish To Codecov
uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be # v4.3.1
if: ${{ inputs.enable-codecov-analysis && !cancelled() && !failure() }}
Expand Down
23 changes: 23 additions & 0 deletions .github/workflows/zxc-e2e-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,29 @@ jobs:
- name: Pull Kind Docker Image
run: docker image pull kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72

- name: Setup Java
if: ${{ runner.os == 'linux' && inputs.npm-test-script == 'test-e2e-node-local-build' && !cancelled() && !failure() }}
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 # v4.0.0
with:
jeromy-cannon marked this conversation as resolved.
Show resolved Hide resolved
distribution: temurin
java-version: 21.0.1

- name: Setup Gradle
if: ${{ runner.os == 'linux' && inputs.npm-test-script == 'test-e2e-node-local-build' && !cancelled() && !failure() }}
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e # v3.1.0
with:
cache-read-only: false

- name: Build Hedera code locally
if: ${{ runner.os == 'linux' && inputs.npm-test-script == 'test-e2e-node-local-build' && !cancelled() && !failure() }}
run: |
cd ..
git clone https://github.com/hashgraph/hedera-services.git
cd hedera-services
ls -ltr
${{ env.CG_EXEC }} ./gradlew assemble --stacktrace --info
cd ../solo

- name: Setup E2E Tests
run: |
npm link
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/zxc-env-vars.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ on:
e2e-node-pfx-kill-add-test-subdir:
description: "E2E Node PFX Kill Add Test Subdirectory"
value: ${{ jobs.env-vars.outputs.e2e_node_pfx_kill_add_test_subdir }}
e2e-node-local-build-test-subdir:
description: "E2E Node Local Build Test Subdirectory"
value: ${{ jobs.env-vars.outputs.e2e_node_local_build_test_subdir }}
e2e-relay-test-subdir:
description: "E2E Relay Test Subdirectory"
value: ${{ jobs.env-vars.outputs.e2e_relay_test_subdir }}
Expand All @@ -53,6 +56,9 @@ on:
e2e-node-pfx-kill-add-coverage-report:
description: "E2E Node PFX Kill Add Tests Coverage Report"
value: ${{ jobs.env-vars.outputs.e2e_node_pfx_kill_add_coverage_report }}
e2e-node-local-build-coverage-report:
description: "E2E Node Local Build Tests Coverage Report"
value: ${{ jobs.env-vars.outputs.e2e_node_local_build_coverage_report }}
e2e-relay-coverage-report:
description: "E2E Relay Tests Coverage Report"
value: ${{ jobs.env-vars.outputs.e2e_relay_coverage_report }}
Expand All @@ -70,11 +76,13 @@ jobs:
e2e_mirror_node_test_subdir: e2e-mirror-node
e2e_node_pem_stop_add_test_subdir: e2e-node-pem-stop-add
e2e_node_pfx_kill_add_test_subdir: e2e-node-pfx-kill-add
e2e_node_local_build_test_subdir: e2e-node-local-build
e2e_relay_test_subdir: e2e-relay
e2e_coverage_report: "E2E Tests Coverage Report"
e2e_mirror_node_coverage_report: "E2E Mirror Node Tests Coverage Report"
e2e_node_pem_stop_add_coverage_report: "E2E Node PEM Stop Add Tests Coverage Report"
e2e_node_pfx_kill_add_coverage_report: "E2E Node PFX Kill Add Tests Coverage Report"
e2e_node_local_build_coverage_report: "E2E Node Local Build Tests Coverage Report"
e2e_relay_coverage_report: "E2E Relay Tests Coverage Report"
steps:
- run: echo "Exposing environment variables to reusable workflows"
20 changes: 20 additions & 0 deletions README.md.template
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,27 @@ $ solo node start

# output is similar to example-1
```
## For Developers Working on Hedera Service Repo

First, pleaes clone hedera service repo `https://github.com/hashgraph/hedera-services/` and build the code
with `./gradlew assemble`. If need to running nodes with different versions or releases, please duplicate the repo or build directories in
multiple directories, checkout to the respective version and build the code.

To set customized `settings.txt` file, edit the file
`~/.solo/cache/templates/settings.txt` after `solo init` command.

Then you can start customized built hedera network with the following command:
```
solo node setup --local-build-path <default path to hedera repo>,node1=<custom build hedera repo>,node2=<custom build repo>
```

## For Developers Working on Platform core

To deploy node with local build PTT jar files, run the following command:
```
solo node setup --local-build-path <default path to hedera repo>,node1=<custom build hedera repo>,node2=<custom build repo>
--app PlatformTestingTool.jar --app-config <path-to-test-json1,path-to-test-json2>
```
## Support

If you have a question on how to use the product, please see our [support guide](https://github.com/hashgraph/.github/blob/main/SUPPORT.md).
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"test-e2e-mirror-node": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Mirror Node Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-mirror-node.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-mirror-node' --testRegex=\".*\\/e2e\\/commands\\/mirror_node\\.test\\.mjs\"",
"test-e2e-node-pem-stop-add": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node PEM Stop Add Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-pem-stop-add.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-pem-stop-add' --testRegex=\".*\\/e2e\\/commands\\/node_pem_stop_add\\.test\\.mjs\"",
"test-e2e-node-pfx-kill-add": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node PFX Kill Add Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-pfx-kill-add.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-pfx-kill-add' --testRegex=\".*\\/e2e\\/commands\\/node_pfx_kill_add\\.test\\.mjs\"",
"test-e2e-node-local-build": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node Local Custom Build' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-local-build.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-local-build' --testRegex=\".*\\/e2e\\/commands\\/node-local.*\\.test\\.mjs\"",
"test-e2e-relay": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Relay Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-relay.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-relay' --testRegex=\".*\\/e2e\\/commands\\/relay\\.test\\.mjs\"",
"merge-clean": "rm -rf .nyc_output && mkdir .nyc_output && rm -rf coverage/lcov-report && rm -rf coverage/solo && rm coverage/*.*",
"merge-e2e": "nyc merge ./coverage/e2e/ .nyc_output/coverage.json",
Expand Down
32 changes: 31 additions & 1 deletion src/commands/flags.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,33 @@ export const settingTxt = {
}
}

export const app = {
name: 'app',
definition: {
describe: 'Testing app anme',
defaultValue: '',
type: 'string'
}
}

export const appConfig = {
name: 'app-config',
definition: {
describe: 'json config file of testing app',
defaultValue: '',
type: 'string'
}
}

export const localBuildPath = {
name: 'local-build-path',
definition: {
describe: 'path of hedera local repo',
defaultValue: '',
type: 'string'
}
}

export const log4j2Xml = {
name: 'log4j2-xml',
definition: {
Expand Down Expand Up @@ -507,7 +534,10 @@ export const allFlags = [
amount,
applicationEnv,
profileFile,
profileName
profileName,
localBuildPath,
app,
appConfig
]

export const allFlagsMap = new Map(allFlags.map(f => [f.name, f]))
Expand Down
Loading