Maven Plugin API,
Google Closure Compiler
Jenkins Slave Configuration and Automation Support
Reverse engineered the manual ad hoc configuration of the Jenkins build servers to created an automated Ansible configuration script. Extended the configuration script to support new requirements such as support for multiple JVM versions, multiple versions of Maven, etc. Used the configuration script to configure a suite of 4 new Jenkins slave VMs with a common configuration which could build both the older Java 6 version of the Tidemark application as well as a newer Java 7 version. Did substantial testing of the new slaves by manually running a suite of representative build jobs (with varying requirements for installed build tools) on each of the new VMs. Worked with a QE engineer to identify some missing dependencies needed for QE test and utility jobs, reconfiguring slaves as problems were identified.
Git Hook Scripts
Implemented a number of Git hook scripts in Python and Bash to monitor pushes to Tidemark's primary source code repository. These scripts sent out reminder and warning emails based on the contents and destination branches of Git pushes. Notable features were sending out process reminder emails when new feature branches were created and when old branches were archived. They also sent warnings when sensitve configuration files were changed, and when commits were made to release branches that were not obviously mirrored on the master branch.
Also implemented a Git hook script (in Python) which would monitor pushes to the Git repository, then apply branch-specific rules to decide if and when to run certain Jenkins build jobs. The script supported regular expression-based inclusion and exclusion rules for specifying build jobs based on the names of changed files; the rules were simply specified in a text file at the project root in the Git repository. This was advantageous since the hook script, running on the same VM and filesystem as the primary Git repository, could interrogate the repository directly, whereas the Jenkins server would have to update one or more cloned repositories to get the same degree of information.
Migrating the Jenkins server to Git
Wrote scripts to modify the XML job configuration files used by Jenkins -- there were more than a dozen active development branches, each with five build jobs -- so there were too may to modify by hand. Initially tested the scripts with a dummy branch and dummy build jobs, then moved on to testing the script against a few mostly inactive development branches, until finally building the confidence to convert all of the active jobs en masse. Such caution was necessary since, due to resource constraints, we had to do the updates on the production Jenkins server. At each step the conversion script got more sophisticated; ultimately it would snapshot configuration files into a Git repository at the beginning of each run so easy rollback was possible in the case of a mistake.
Initial Git Migration
Largely responsible for the migration of Tidemark's main source code repository from Subversion to Git. This required a substantial amount of prepatory work. Investigated how the existing repository might be translated from Subversion to Git format, what the impact was in terms of performance (better) and disk usage (worse, but still OK). Set up the official central Git server and used SubGit to translate the old Subversion repository to Git format. Configured SubGit to mirror to the Subversion repository until all the jobs on the Jenkins build server could also be migrated.
Tenant Logo Management
Designed a system for handling static resources (principally tenant logos) that could be shared across installations of the Tidemark application and which could be updated in near real-time. This involved a single static resources webserver backed by a Git repository. Wrote a script and related documentation which mostly automated the process of uploading tenant logos to the new system. This allowed Customer Success to largely take over logo management without having to understand Git. Later implemented server-side support in Java (using the JGIT library) as part of a project to make logo management possible through the standard Tidemark configuration GUI.
Grid Configuration UI
New Login System
Presentation Layer Build Tooling
Fixed bugs and implemented features in the Modelizer, Tidemark's internal tool for configuring tenants in the Tidemark system. This required a crash-course in Ext-JS 4.0 in order to fix some of the many bugs in the Modelizer prior to the first customer launch of the Tidemark system. Learned about common Ext-JS components like combo boxes, grids, forms, etc. Learned to navigate the Ext-JS documentation, search for Ext-JS examples and tutorials, and (inevitably) learned about monkey patching.