Code Monkey home page Code Monkey logo

nicest's Introduction

nicest

npm version Build Status Dependency Status devDependency Status

Built with Hapi Semver Conventional Commits MIT license

nicely integrating complex education software together

About

Nicest is a setup tool for software educators. For the alpha version of the project, the focus is on agile software development tools. The system is currently able to setup Github source control, Taiga taskboard, and CIAssess continuous project assessment. In the future Nicest will add support for more tools, and integrations between tools.

Installation

  1. Install Node JS version 8
  2. Install Mongo Db version 3
  3. Install Node Gyp
  4. Run npm install -g nicest

Setup

  1. Create a Github account (an existing account can also be used)

  2. Register nicest as an application

    • 'Application Name', 'Homepage URL', and 'Application Description' can be anything
    • 'Authorization callback URL' must be the Host name or IP address of your computer/server
    • E.G. 'Authorization callback URL' could be 'example.com/login', 'localhost:3000/login' or '11.11.11.11/login'
    • After creating the application be sure to copy down the client id and secret token
  3. Run nicest init to configure nicest

  4. Run nicest user to create an admin

Start

  1. Run nicest start

Stop

  1. Run nicest stop

Additional Guides

Tasks

Tasks can be run from a Terminal or Command Line using nicest <task>

  • dev developer server start
  • init creates a configuration file
  • start production server start
  • stop production server stop
  • user creates a new user

nicest's People

Contributors

bpaothat avatar christianmurphy avatar greenkeeper[bot] avatar nelsontran avatar renovate-bot avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

nicest's Issues

PM2 setup documentation

Latest production is using PM2 to run the service.
Add documentation on how to properly setup PM2 to run nicest.

Intent System

This would add an additional layer of abstraction over the current task system.
Allowing a recipe to register an intent, and server plugins could offer the service.
For example a 'Repository' intent could be answered by a Github, Bitbucket or Gitlab plugin.

Currently the abstraction is

  • Recipe - High Level Actions or Groups of Actions
  • Resource - Abstraction over a local or remote service

New abstraction would likely look like

  • Recipe - Flow control between tasks
  • Tasks/Activities - High level actions, such as 'add users to repo'
  • Resource - Abstraction over a local or remote service

This would be a platform change to attempt to simplify and future proof the code.

Challenges
This would bring back the challenge that brought me to the Resource/Recipe pattern in the first place.
How would independent plugins register requirement or mutual exclusivity?
While maintaining loose coupling?

For example Github issues requires a Github repo.
And Github issues are mutually exclusive to a Bucket repo.

Related to #5

ref https://developer.android.com/guide/components/intents-filters.html

Recipe: Github Team Project

Allows a teacher to select teams, and a seed Github Repository.
Recipe will generate teams on Github, and create a fork for each team.

New User 400

Creating a new user and not adding anything to the modules field results in a 400 error.
Either automatically add {} automatically, or change the validation to allow for empty.

Code Project - Concurrent Git Repo Creation

Currently every session that creates a git project, that has a seed code base, shares the same temp folder.
Leaving the potential for two or more concurrent users to overwrite/corrupt/break each other's sessions.
This should be resolved in the same way that Hapi handles file uploads, download to the OS temp folder and have the file/folder name be a random unique identifier.

Break Github Project Plugin into tasks

Since the Github Recipe and the Taiga Recipe are intended to be used together.
It would be best to break the (currently monolithic) Github Recipe into several tasks.
Then create Taiga tasks.
This will allow for the Recipe to be a flow, instead of being the logic.

recommended before #11
related to #9

Create seperate Taiga resource/recipe

This plugin should have a login, be able to list scrum boards.
And house some basic abstractions for accessing Taiga.
It would be nice if this could be made to work similar to Octokat.

Add navigation header to API docs

Currently docs require using back, or changing the url to go back home.
Modify the docs template so there is a page header for simpler navigation to the main routes.

Recipe: Github Individual Project

A plugin that allows a teacher to select list of students (or all the students in a course) and a Github seed repository.
And generates a forked repository for each individual student.

Add ability create empty repository

Currently code project recipe requires a seed repository be selected.
Change this to instead offer the option to have a seed repository.
Or to name give the prefix name for the repository.

Node JS 4 support

Node JS 4 is bringing memory fixes.
As well as some new ES6 features.
Most notably arrow functions will now be stable.
This will allow prefer-arrow-callback to be enabled in ESLint.
And require some testing to ensure that the application is still stable.

This will be blocked until NodeGit updates to nan 2.

404 for Docs view

In the NPM packaged version of the application /docs results in a 404 instead of the expected JSDoc pages.

Github Login Header

Since the Github Login can now be called by other plugins is should mention 'Login to Github' in the header of the content.

Plugin Webhook Matrix

related to #5 and #9

Find a way for each plugin to establish webhooks that can be activated when other plugins have also been activated.

For example:
When both the Github plugin and the Travis CI plugin are enabled, ensure Travis CI is given web hook access to test commits and pull requests automatically.

Import Format

Create and document an import format for pulling in individual and team information

Import Recipe

Depends on #71

Create a Recipe to import team and individual information into Nicests internal Mongo db store.

Warn when recipe is missing data

Currently the recipe does not warn if user is missing a Taiga email or Github Username.
And the recipe will fail if it is not present.

Add a warning on the confirm page that user/team is missing information.
And make the recipe running soft fail (no add users with missing information).

Security

This is a stub to keep track of security features that should be added to Nicest in the near future.

  • Require Login to view recipes or to access API
  • Create roles for viewing assessment? (would require further discussion)
  • Secure all connections using HTTPS
    • Enable Secure Session Cookies
  • Ensure session cookie is HTTP only
  • Create and enable a Content Security Policy header
  • Add CSRF tokens to forms

Add navigation header to Docs

Currently docs require using back, or changing the url to go back home.
Modify the docs template so there is a page header for simpler navigation to the main routes.

Break Plugins into Seperate Repositories

As the project grows and plugins become more diverse, it would be best for each plugin to have its own repository.

To be able to use plugins, they would need to be bundled. Most likely using NPM packages or git submodules.

Currently the preferred method would be using NPM packages, and offering a thin wrapper around NPM to simplify the installation process. Something even simpler than APM.

This currently presents a number of challenges:

  1. Where and how to install packages on the client.
  2. How Nicest recognizes a package is a Nicest package and not another type.
  3. How to generate and include the JSDoc from across multiple sources.
  4. How modules will manage peer dependencies (which are no longer downloaded by NPM).
  5. How shared Jade templates can be loaded in plugins.

Import - Custom Meta Data

Add an additional <any> field in the XML for both user and team that can store currently non-standard metadata into mongoose

Taiga Recipe

Taiga is a project management and issue tracking tool.
This plugin looks use the Taiga API to be able to

  • generate users
  • generate a project
  • configure project
  • link users to project

Optional But Awesome

Team Plugin Parity

Ensure that the Team views have the same CRUD operations in the UI that the Users plugin already has.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.