Google Summer of Code 2018 Work Product Submission



coala

Saksham Bansal

I’m a sophomore year student studying Computer Science at Netaji Subhash Institute of Technology, Dehli. I am always looking for opportunities to put my programming skill to good use by contributing to open source which also allows me to improve my own skill.


Patches Tarball


SHA-256:

3f2f7637e08a669ceff1dc701f3d7c22df22b301e6b59957650dccd104008863

Bonding

Phase 1

Phase 2

Phase 3


Links to commits and repositories I've worked on:

Repository Link to Commit/s Description
c  cEPs View

Create a proposal regarding the project.

c  cib View

Add appveyor CI.

c  cib View

Use dependency management master

c  cib View

Fix docopt usage pattern.

c  cib View

Fix incorrect behaviour

c  cib View

Clean up code required for 100% coverage

c  cib View

Use pragma no cover due to bug with coverage

c  cib View

Fix bug in code for complete coverage

c  cib View

Add unittests for 100% coverage

c  cib View

Mobanise setup.cfg

c  cib View

Allow showing multiple bears

c  cib View

Remove useless if conditions

c  cib View

Ignore build dir

c  cib View

Remove unused import

c  cib View

Remove call_without_output

c  coala-mobans View

Remove test_pyversion

c  coala-mobans View

Add variable for cache dir on appveyor

c  coala-mobans View

Add option for Python 3.6 jobs on all repos

c  coala-mobans View

Add template for init file for exporting version

c  coala-mobans View

Remove brackets around string with one item in setup.py template

c  coala-mobans View

Run coala static code analysis from Appveyor

c  coala-mobans View

Pin setuptool to 21 for supporting environment markers

c  coala-mobans View

Use coala-bears master for coala analysis on Appveyor

c  coala-mobans View

Create coveragerc template to resolve a bug with coverage on cib

c  coala-utils View

Remove error handling on import for complete test coverage on Appveyor build

c  coala-utils View

Define exports through all to prevent failing coala –ci check

c  coala-utils View

Use appveyor template for coala-utils

c  coala-utils View

Ignore build dir from coafile

c  coala-utils View

Use all in init.py

c  coala-bears View

Improve and cleanup script for generating bear requirements and generate cabal requirements

c  coala-bears View

Move the generate_package script from the coala-bears package to .ci directory

c  coala-bears View

Use CabalRequirement for HaskellLintBear

c  coala-bears View

Add language setting for ESLintBear using various plugins for eslint

c  coala-bears View

Add GherkinLintBear

c  coala-bears View

Add BashateBear

d  dependency_management View

Add PlatformRequirement class for system specific package managers

d  dependency_management View

Return exitcode after running the install command

d  dependency_management View

Add CabalRequirement for backwards compatibility

d  dependency_management View

Run pip as python module

b  bear-install-playbook View

Add playbook for installing individual bears

b  bear-install-playbook View

Test playbook using docker + Travic CI

b  bear-install-playbook View

Add instructions on using playbook

b  bear-install-playbook View

Add coafile for running static code analysis by coala


Improve Installation of coala and coala-bears

Work Done

coala uses a DistributionRequirement class to represent dependencies from system specific package managers such as apt, yum, dnf. This project breaks the class into multiple subclasses one for each package manager that all inherit from the base PlatformRequirement class and deprecates the older class. Additionaly, the project added a repository for Ansible playbooks that allow to install individual bears for coala. Lastly, the project involved fixing and improving the exiting cib install bears tool which uses the dependency management API by adding 100% test coverage.

Major tasks of the project:

  1. Create a separate repository bear-install-playbook for Ansible playbook that would allow to install individual bear and their dependencies.
  2. Testing the playbook using docker and Travis CI.
  3. Improving the existing cib bear install tool and cleaning up the code.
  4. Adding 100% test coverage for the cib tool.
  5. Improve the existing templates in mobans such as by running ci check from the Appveyor template.
  6. Add a PlatformRequirement class for system specific package managers and deprecate the existing DistributionRequirement class.
  7. Move the generate_package script from bears.
  8. Improving the exiting generate_requirements script and allow it to generate CabalRequiremnents from bears as well.

Challenges

The major challenge of the project was trying to test the Ansible playbook by installing the dependencies of the bear inside docker on Travis CI. It was very difficult to properly setup some of the package managers inside the docker container and I had to run the Travis build more than a 100 times. Eventually, I ended using Ansible roles that could setup the package managers on the host machine which made it a lot easier.

Future prospects of the projects

There is a lot more functionality that can be used from Ansible. Ansible allows us to create roles that run various tasks and define variables to complete a task for numerous platforms. These roles can be uploaded to Ansible-galaxy. We could create roles for installing certain bears that require different installation instruction for each distribution. There could be a role that could create a virtualenv with coala setup and install an appropritate python version for multiple platforms if it is not already there. Ansible-galaxy already has a lot of roles that can setup various package managers for multiple distributions.