Tribal Build, Integrate, and Test System



Similar documents
Software Engineering Principles The TriBITS Lifecycle Model. Mike Heroux Ross Bartlett (ORNL) Jim Willenbring (SNL)

Roscoe A. Bartlett. Experience

CMake/CTest/CDash OSCON 2009

Continuous Integration/Testing and why you should assume every change breaks your code

CMPT 373 Software Development Methods. Building Software. Nick Sumner Some materials from Shlomi Fish & Kitware

SOFTWARE DEVELOPMENT BASICS SED

Review of ACN Working Environment

Building a Continuous Integration Pipeline with Docker

GECKO Software. Introducing FACTORY SCHEMES. Adaptable software factory Patterns

Supported platforms & compilers Required software Where to download the packages Geant4 toolkit installation (release 9.6)

Some Agile Best Technical Practices for the Development of Research-Based CSE Software

Understanding and using catkin (and bloom) May 12, 2013 Dirk Thomas, William Woodall ROSCon 2013

Practicing Continuous Delivery using Hudson. Winston Prakash Oracle Corporation

CPSC 491. Today: Source code control. Source Code (Version) Control. Exercise: g., no git, subversion, cvs, etc.)

Using Microsoft Azure for Students

AGNI: COUPLING MODEL ANALYSIS TOOLS AND HIGH-PERFORMANCE SUBSURFACE FLOW AND TRANSPORT SIMULATORS FOR RISK AND PERFORMANCE ASSESSMENTS

Mastering CMake. Sixth Edition. Bill Martin & Hoffman. Ken. Andy Cedilnik, David Cole, Marcus Hanwell, Julien Jomier, Brad King, Robert Maynard,

Installing OpenVSP on Windows 7

Content. Development Tools 2(63)

Jenkins World Tour 2015 Santa Clara, CA, September 2-3

TEST AUTOMATION FRAMEWORK

RED HAT DEVELOPER TOOLSET Build, Run, & Analyze Applications On Multiple Versions of Red Hat Enterprise Linux

Continuous Integration. Wellcome Trust Centre for Gene Regulation & Expression College of Life Sciences, University of Dundee Dundee, Scotland, UK

USING SYNERGY WITH CRUISE CONTROL

Advanced SharePoint Tools to Enhance Project Management

White Paper Server. SUSE Linux Enterprise Server 12 Modules

Secure your Docker images

Jenkins: The Definitive Guide

Lab Management, Device Provisioning and Test Automation Software

Source Control Systems

OLCF Best Practices. Bill Renaud OLCF User Assistance Group

IBM Rational ClearCase, Version 8.0

Application Test Management and Quality Assurance

ALM2013VS_ACC: Application Lifecycle Management Using Visual Studio 2013

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

White Paper. Thirsting for Insight? Quench It With 5 Data Management for Analytics Best Practices.

How To Set Up Wiremock In Anhtml.Com On A Testnet On A Linux Server On A Microsoft Powerbook 2.5 (Powerbook) On A Powerbook 1.5 On A Macbook 2 (Powerbooks)

Good Software. Lecture 6 GSL Peru 2014

Application Lifecycle Management Using Visual Studio 2013 (SCRUM)

APPLICATION OF SERVER VIRTUALIZATION IN PLATFORM TESTING

Azure Day Application Development

Continuous Integration

Decomposition into Parts. Software Engineering, Lecture 4. Data and Function Cohesion. Allocation of Functions and Data. Component Interfaces

Web Developer Toolkit for IBM Digital Experience

SPADES. Stefano Cacciaguerra Contents. System Structure. Creating a SPADES Simulation. Miscellaneous Features

Bioinformatics for programmers

Department of Veterans Affairs. Open Source Electronic Health Record (EHR) Services

The Virtualization Practice

Android Programming and Security

Meister Going Beyond Maven

Securely. Mobilize Any Business Application. Rapidly. The Challenge KEY BENEFITS

PARCC TECHNOLOGY ARCHITECTURE ARCHITECTURAL PRINCIPLES AND CONSTRAINTS SUMMARY

Ensuring Contract Compliance through integration of Ariba Contracts and SAP ECC Michael Chavez and Sean Rhoades, Deloitte Consulting LLP

NXTware Remote. Advanced Development and Maintenance Environment for OpenVMS and other Strategic Platforms

Introducing Honeycomb. An Open Source Release Automation Solution for Be Informed

Software configuration management

Data Management Roadmap

FEEG Applied Programming 3 - Version Control and Git II

Continuous Integration and Delivery at NSIDC

Microsoft Technology Practice Capability document. MOSS / WSS Building Portal based Information Worker Solutions. Overview

Introduction CMake Language Specific cases. CMake Tutorial. How to setup your C/C++ projects? Luis Díaz Más.

Sourcery Overview & Virtual Machine Installation

GridSolve: : A Seamless Bridge Between the Standard Programming Interfaces and Remote Resources

Linstantiation of applications. Docker accelerate

Continuous Integration

Developing, Deploying, and Debugging Applications on Windows Embedded Standard 7

Version Control Your Jenkins Jobs with Jenkins Job Builder

Team Foundation Server

OpenShift. OpenShift platform features. Benefits Document. openshift. Feature Benefit OpenShift. Enterprise

StriderCD Book. Release 1.4. Niall O Higgins

Use of a Software Configuration Management Tool in LHCb

Jonathan Worthington Scarborough Linux User Group

This Readme includes information pertaining to Novell Service Desk 7.0.

TEST REPORT SUMMARY MAY 2010 Symantec Backup Exec 2010: Source deduplication advantages in database server, file server, and mail server scenarios

Ansible in Depth WHITEPAPER. ansible.com

Embedded Linux development with Buildroot training 3-day session

Writing & Running Pipelines on the Open Grid Engine using QMake. Wibowo Arindrarto DTLS Focus Meeting

Introduction to ACENET Accelerating Discovery with Computational Research May, 2015

Delphi-Windows Digital Signature Library Interface

Lab Exercise Part II: Git: A distributed version control system

Using Git with Rational Team Concert and Rational ClearCase in enterprise environments

Office Of Nuclear Energy. Annual Review Meeting

Cloud Infrastructure Management - IBM VMControl

Getting Started Android + Linux. February 27 th, 2014

Continuous Integration and Delivery. manage development build deploy / release

C Programming Review & Productivity Tools

An introduction to the benefits of Application Lifecycle Management

Connectivity. SWIFTNet Link 7.0. Functional Overview

Mitglied der Helmholtz-Gemeinschaft. System monitoring with LLview and the Parallel Tools Platform

APP + Trilinos Integration. Status, Opportunities, and Challenges

HP Service Manager software

RISC-V Software Ecosystem. Andrew Waterman UC Berkeley

Linux VPS with cpanel. Getting Started Guide

Paul Barham Program Manager - Java. David Staheli (dastahel@microsoft.com) Software Development Manager - Java

Automate Your Deployment with Bamboo, Drush and Features DrupalCamp Scotland, 9 th 10 th May 2014

#define. What is #define

SCADE System Technical Data Sheet. System Requirements Analysis. Technical Data Sheet SCADE System

Integrated Open-Source Geophysical Processing and Visualization

Development Testing for Agile Environments

Transcription:

Tribal Build, Integrate, and Test System Roscoe A. Bartlett (bartlettra@ornl.gov) Computational Engineering and Energy Sciences Group, Oak Ridge National Laboratory

The Problem => Develop and Deploy Complex Software Multiple software repositories and distributed development teams Multiple compiled programming languages (C, C++, Fortran) and mixed-language programs Multiple development and deployment platforms (Linux, Windows, Super-Computers, etc.) Stringent software quality requirements Solution Approach => TriBITS custom CMake build & test framework

Why CMake? Why TriBITS?

Why CMake? Open-source tools maintained and used by a large community and supported by a profession software development company (Kitware). CMake: Simplified build system, easier maintenance Improved mechanism for extending capabilities (CMake language) Support for all major C, C++, and Fortran compilers. Automatic full dependency tracking (headers, src, mod, obj, libs, exec) Faster configure times (e.g. > 10x faster than autotools) Shared libraries on all platforms and compilers Support for MS Windows (e.g. Visual Studio projects) Portable support for cross-compiling Good Fortran support (parallel builds with modules with src => mod => object tracking, C/Fortran interoperability, etc.) CTest: Parallel running and scheduling of tests and test time-outs Memory testing (Valgrind) Line coverage testing (GCC LCOV) Better integration between the test system and the build system

Why TriBITS? Framework for large, distributed multi-repository CMake projects Reduce boiler-plate CMake code and enforce consistency across large distributed projects Subproject dependencies and namespacing architecture (packages) Automatic package dependency handling Additional tools for agile software development processes (e.g. Continuous Integration (CI)) Additional functionality missing in raw CMake Change default CMake behavior when necessary

Raw CMake vs. TriBITS

Raw CMakeLists.txt File # Build and install library SET(HEADERS hello_world_lib.hpp) SET(SOURCES hello_world_lib.cpp) ADD_LIBRARY(hello_world_lib ${SOURCES}) INSTALL(TARGETS hello_world_lib DESTINATION lib) INSTALL(FILES ${HEADERS} DESTINATION include) # Build and install user executable ADD_EXECUTABLE(hello_world hello_world_main.cpp) TARGET_LINK_LIBRARIES(hello_world hello_world_lib) INSTALL(TARGETS hello_world DESTINATION bin) # Test the executable ADD_TEST(test ${CMAKE_CURRENT_BINARY_DIR}/hello_world) SET_TESTS_PROPERTIES(test PROPERTIES PASS_REGULAR_EXPRESSION "Hello World") # Build and run some unit tests ADD_EXECUTABLE(unit_tests hello_world_unit_tests.cpp) TARGET_LINK_LIBRARIES(unit_tests hello_world_lib) ADD_TEST(unit_test ${CMAKE_CURRENT_BINARY_DIR}/unit_tests) SET_TESTS_PROPERTIES(unit_test PROPERTIES PASS_REGULAR_EXPRESSION "All unit tests passed")

TriBITS Package CMakeList.txt File TRIBITS_PACKAGE(HelloWorld) TRIBITS_ADD_LIBRARY(hello_world_lib HEADERS hello_world_lib.hpp SOURCES hello_world_lib.cpp) TRIBITS_ADD_EXECUTABLE(hello_world NOEXEPREFIX SOURCES hello_world_main.cpp INSTALLABLE) TRIBITS_ADD_TEST(hello_world NOEXEPREFIX PASS_REGULAR_EXPRESSION "Hello World") TRIBITS_ADD_EXECUTABLE_AND_TEST(unit_tests SOURCES hello_world_unit_tests.cpp PASS_REGULAR_EXPRESSION "All unit tests passed") TRIBITS_PACKAGE_POSTPROCESS() Library linking automatically handled Avoid duplication and boiler-plate code Fewer commands Install by default (most common) Automatic namespacing of test & exec names

TriBITS Structural Units and Meta-Projects

TriBITS Structural Units TriBITS Project: Complete CMake Project Overall projects settings TriBITS Repository: Collection of Packages and TPLs Unit of distribution and integration TriBITS Package: Collection of related software & Tests Lists dependencies on SE Packages & TPLs Unit of testing, namespacing, documentation, and reuse TriBITS Subpackage: Partitioning of package software & tests TriBITS TPLs (Third Party Libraries): Specification of external dependency (libs) Required or optional dependency Single definition across all packages Packages + Subpackages = Software Engineering (SE) Packages

Example: VERA Meta-Project, Repositories, Packages & Subpackages VERA Trilinos Teuchos Core Comm ParameterList Epetra NOX VERAInExt VERAIn Exnihilo Nemesis Shift common cobra Tiamat LIMEExt Insilico Neutronics LIME PSSDriversExt VRIPSS VERA: Git repository and TriBITS meta-project (contains no packages) Git repos and TriBITS repos: Trilinos, VERAInExt, LIMEExt, Exnihilo, TriBITS packages: Teuchos, Epetra, VERAIn, Insilico, LIME, VRIPSS, TriBITS subpackages: TeuchosCore, InsilicoNeutronics, VRIPSSTiamat, TriBITS SE (Software Eng.) packages: Teuchos, TeuchosCore, VERAIn, Insilico, InsilicNeutronics,

Automated Package Dependency Handling

Package Dependency Structure (Example: Trilinos) Thyra RTOp Triutils EpetraExt Teuchos Epetra Required Dependence Optional Dependence

Package Dependencies.cmake Files Teuchos TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_TPLS BLAS LAPACK LIB_OPTIONAL_TPLS Boost ) Epetra TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_TPLS BLAS LAPACK ) RTOp TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES Teuchos ) Triutils TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES Epetra ) EpetraExt TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES Epetra Teuchos LIB_OPTIONAL_PACKAGES Triutils ) Thyra TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES RTOp Teuchos LIB_OPTIONAL_PACKAGES EpetraExt Epera )

Pre-Push Testing: Change Epetra $./do-configure \ -D Trilinos_ENABLE_Epetra:BOOL=ON \ -D Trilinos_ENABLE_ALL_FORWARD_DEP_PACKAGES:BOOL=ON \ -D Trilinos_ENABLE_TESTS:BOOL=ON Thyra RTOp Triutils EpetraExt Teuchos Epetra

Pre-Push Testing: Change RTOp $./do-configure \ -D Trilinos_ENABLE_RTOp:BOOL=ON \ -D Trilinos_ENABLE_ALL_FORWARD_DEP_PACKAGES:BOOL=ON \ -D Trilinos_ENABLE_TESTS:BOOL=ON Thyra Libs & Tests RTOp Triutils EpetraExt Lib Only Teuchos Epetra

Extended Testing Support

Correctness Testing TriBITS Standard Testing Layers Nightly Testing Secondary Tested (ST) CATEGORIES [BASIC CONTINUOUS NIGHTLY] (more platforms, more TPLs) Post-Push CI Testing Secondary Tested (ST) CATEGORIES [BASIC CONTINUOUS] (post-push CTest/CDash, Linux/GCC) Pre-Push CI Testing Primary Tested (PT) CATEGORIES [BASIC] (pre-push checkin-test.py) Coverage Testing Memory (Valgrind) Testing

Pre-Push CI Testing: checkin-test.py checkin-test.py --do-all --push Integrates with latest version in remote git repositories Figures out modified packages Modified file: 'packages/teuchos/cmakelists.txt' => Enabling 'Teuchos'! Enables all forward/downstream packages & tests Configures, builds, and runs tests Does the push (if all builds/tests pass) Sends notification emails Fully customizable (enabled packages, build cases, etc.) Documentation: checkin-test.py --help

Post-Push Testing: TRIBITS_CTEST_DRIVER() CDash Dashboard for 4/6/2014 Rolled-up summaries for each build case Nightly, CI, Experimental build cases CDash CI Iterations Individual packages built in sequence Targeted emails for failed package build & tests Failed packages disabled in downstream packages => Don t propagate failures!

TriBITS Miscellaneous Facts TriBITS System Dependencies: TriBITS Core: Basic configure, build, test & install => Only raw CMake (2.8.4+) TriBITS Extra SE tools (checkin-test.py, ) => Git (1.7.0.4+) and Python 2.4 Usage of TriBITS: Trilinos (SNL, originating project) ORNL: SCALE, Exnihilo, DataTransferKit Non-ORNL: MPACT (Univ. of Misc.), COBRA-TF (Penn. State) CASL-Related: VERA TriBITS Development & Distribution: 3-clause BSD-like license, Copyright SNL Current: Trilinos (trilinos.sandia.gov), CASL (casl-dev) Near future: Github (public repo, global pull)

Contact: bartlettra@ornl.gov Sponsors: CASL: Consortium for the Advanced Simulation of Lightwater reactors