Thurgood is the codename for our proprietary toolset that provides automated build and testing of CloudSpokes challenge submissions. This service automates the process of testing and reviewing submitted code for quality, coverage, and other various coding standards. After queuing submissions based on platform, Thurgood taps into various services to deliver code review, including Cloudbees, Checkmarx, JSLint, PhantomJS, Checkstyle, and more. The status of submissions is available from individual Papertrail accounts.
A high level overview of the application is as follows:
- Create a job with the URL of the code to be submitted as well as other info such as the user submitting the code, language, platform, etc.
- Submit a job for processing
- Reserves a server matching the language and platform of the job
- Creates a new Papertrail Account using the user_id if it doesn't already exist
- Creates a new Papertrail System using, by default, the job_id, or the system_papertrail_id (see below) as the id.
- Pushes the job to Thurgood queue (RabbitMQ) for processing
- Marks the job as in progress
- Events that occur during processing (reserve a server, scan complete, Salesforce ANT build) is sent to the Papertrail system for viewing by the user
- When the job is completed, releases the server back into the pool.
Issues with Thurgood v1.0
- Thurgood is tightly coupled to CloudSpokes challenges (participantId & challengeId are needed)
- No way to view the Papertrail logs without participating in a CloudSpokes
- Need to be logged into CloudSpokes to view Papertrail logs
- Requires the code be uploaded already (you simply provide a URL when creating the job)
- No way to add servers (e.g., to deploy to a specific saleforce sandboxes)
Proposed Changes for Thurgood v2.0
- Develop a unified API and UI that supports all use cases above. (this challenge is just for the API)
- Creating a job and logging must support options for a CloudSpokes challenge, “project” or one-off code scan.
- Need to implement an option for a job to use a specific server. So if the teams wants to scan and deploy to the specific sandbox, the job would always use that server.
- Implement some type of notification system via email when a job completes (success or failure)