Optimising the pipelines using Github Actions for Caliper and Caliper-Benchmarks
Description
Performance benchmarking distributed systems (such as DLTs) is a challenging task, comprising of multiple aspects, such as scalable workload generation, representative workload definitions, and comprehensive data analysis.
Hyperledger Caliper is a general-purpose benchmarking tool with the goal of mitigating the aforementioned aspects of performance benchmarking:
It provides a flexible architecture to allow scalable workload generation.
It collects and reports results based on detailed client-observable execution traces.
It allows the implementation/plug-in of custom workload behaviors to meet the diverse criteria of a wide range of business scenarios.
Hyperledger Caliper-benchmarks provides a set of example benchmarks for use with Hyperledger Caliper.
In order to be able to assist maintainers/contributors to Caliper and Caliper-Benchmarks, a build system is utilised to run tests to verify a PR doesn't break anything plus it provides a continual deploy mechanism to publish Hyperledger Caliper artifacts to DockerHub and NPM so end users can have access to the Caliper tool.
These build systems use different build pipeline implementations. Hyperledger Caliper uses Azure Pipelines and Hyperledger Caliper-Benchmarks uses Github Actions. Azure pipelines is going to be removed in the future so we need to ensure both projects are using Github Actions. Further these build systems run all available tests which is not necessary and thus uses more energy than is needed and also means that these builds take longer meaning a PR cannot be merged until this build has completed (or may require multiple runs based on PR reviews). This is not ideal. Further although artifacts are published externally, no testing is done to ensure that what would be published actually works which means it's possible to deliver something to users which doesn't work.
The goal of this project is to optimise how Caliper and Caliper-Benchmarks verify PRs and publish artifacts using Github Actions and to improve how testing is done to ensure that the artifacts to be published actually work as expected.
The exact steps of the project are detailed in the Expected Outcome section.
Additional Information
- Caliper GitHub repository: https://github.com/hyperledger/caliper
- Caliper example benchmarks GitHub repository: https://github.com/hyperledger/caliper-benchmarks
- Caliper documentation page: https://hyperledger.github.io/caliper/
- Architecture documentation: https://hyperledger.github.io/caliper/vNext/architecture/
- Benchmark configuration documentation: https://hyperledger.github.io/caliper/vNext/bench-config/
- Workload module documentation: https://hyperledger.github.io/caliper/vNext/workload-module/
- Discord: https://discord.gg/hyperledger
Learning Objectives
- Mastering the open-source workflow
- Issues, pull requests, development branches, repository management
- Being part of an open community, navigating and utilizing different forums
- Working in a team
- Covering a wide spectrum of software development skills
- Conducting unsupervised research for state-of-the-art solutions
- Writing detailed, consistent specifications
- Designing/implementing functionally rich, testable, maintainable software components
- Documentation and presentation skills
- Developer documentation
- To-the-point, coherent presentation
Expected Outcome
- Migrate Caliper from Azure Pipelines to Github Actions
- Investigate and propose how to optimise the builds to reduce PR/Publish build times and save resources and energy, some thoughts on possible suggestions could be:
- only runnning tests which will test affected code changes
- caching of docker images and npm modules
- Implement the above proposal
- Investigate and propose how to verify publishable artifacts before they are published, some thoughts here are
- testing the docker image
- testing the npm modules
- Implement the above proposal
Relation to Hyperledger
Hyperledger Caliper and Hyperledger Caliper-Benchmarks
Education Level
At least ongoing B.Sc. studies in software engineering required.
Skills
- Basic understanding of version control and git
- Experience with Bash
- Experience with JavaScript programming and npm (in Node.JS context)
- Experience using Docker
- Intermediate verbal and writing skills in English
- High-level understanding of Hyperledger Caliper components and the benchmark workflow
Nice-to-have skills (the mentee can learn these during the internship):
- Experience with github actions
- Advanced git usage (upstream repositories, branching, rebasing, etc)
- Advanced NPM and Docker usage
- Writing documentation in markdown
- Capability for unsupervised learning and research
Future plans
As new features are added to Caliper and Caliper Benchmarks, so the build system needs to evolve to ensure that the builds remain current, provide what's needed for PR verification and artifact publishing as well as ensuring optimal use of resources to keep energy consumption down
Preferred Hours and Length of Internship
Full-time (40 hours a week for 12 weeks during the summer) or Part-time (20 hours a week for 24 weeks starting in summer and ending in fall)
Mentor(s) Names and Contact Info
David Kelsey, d_kelsey@uk.ibm.com, discord ID: NorfolkAndChance#6513