Coder Social home page Coder Social logo

build-canaries / nevergreen Goto Github PK

View Code? Open in Web Editor NEW
204.0 10.0 37.0 22.41 MB

:baby_chick: A build monitor with attitude

Home Page: https://nevergreen.io

License: Eclipse Public License 1.0

JavaScript 1.00% Clojure 12.92% Shell 2.86% HTML 0.22% Dockerfile 0.04% TypeScript 77.41% SCSS 5.56%
monitor continuous-delivery continuous-deployment continuous-integration cctray gocd jenkins circleci redux ci

nevergreen's Introduction

Nevergreen

Nevergreen is a build monitor with attitude. Continually deliver via fast clear feedback.

  • Your builds should always be green. Nevergreen understands this and only shows you projects that have failed or are building
  • Nevergreen uses your local browser to store configuration. You only need to run it once to host different build monitors for every team
  • Nevergreen is fully responsive, it'll look just as good full screen or sharing the space with other dashboards
  • You can track as many CI servers as you like, allowing you to easily track dependent builds from other teams

Example Monitor page

Example Monitor page on tablet

Example Monitor page on mobile

Example Tracking page

How do I start monitoring my builds?

You can use hosted Nevergreen at nevergreen.io or run Nevergreen locally.

Once loaded:

  1. Add the URL of your CCTray XML feed on the Tracking page
  2. Head to the Monitor page to see their current status!

How can I find my CCTray XML feed URL?

More information about how to get the CCTray XML feed for your CI server can be found on the official CCTray XML website.

How can I get more help?

How can I fix a bug / add a feature / contribute?

You can run Nevergreen from source using the ./develop.sh script. For more detailed information about running from source please see the contributing section of the wiki.

Please help us out by submitting a PR with any changes. We also keep a list of bugs / improvements / features using GitHub issues, if you're looking for some inspiration.

You can also help us out by taking this short usage survey, thanks!

License

Copyright © 2014 - 2023 Build Canaries

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

nevergreen's People

Contributors

arunvelsriram avatar brydoncheyney avatar cowley05 avatar darrenhaken avatar dependabot[bot] avatar gentlemanhal avatar gitter-badger avatar jainsahab avatar jimmythompson avatar joejag avatar manasik avatar molszewski avatar mrgeorgegray avatar rafasf avatar tharun208 avatar thesheps avatar vinh0604 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nevergreen's Issues

Responsive UI

Once the screen is resized to a certain minimum size stop showing the projects in columns and just stack them all in rows.

The main target for Nevergreen is TVs and monitors to act as a team build monitor, so this is not high priority, but if it's easy it would be nice for individuals to be able to load on a phone.


Edit: I've changed this issue to just making the UI responsive including all the configuration tabs.

Use the clj-cctray library

This will result in massive changes to the clojure backend code as most of it wouldn't be required anymore.

New UI: Config screen update for DesertSand

Should we add all other options (e.g. #9, #24) to an "advanced config" section that is collapsed by default?

For example, where the current success text label is would be replaced by an advanced label of some kind which once clicked slides open to reveal the other options.

I'll try and attach a mock up of the idea tomorrow.

Add better server and client logging (for development)

Currently the server doesn't really log anything so it's difficult to know what's going on.

For example issue #30 happened while the server was running in 'monitor mode' but I didn't know if it was happening intermittently on some calls or on every call and my internet was just being slow (which may have been part of the cause).

We should have an access log for every endpoint at least.

What is the best way to log? Just using clojure tools logging?

Use an image for success

If builds are all green. Allow the user to specify a URL for an image to load and displayed fullscreen.

Add a helpful dialog that tells people where the usual cctray location is

On the 'tracking - config' page if the url is blank, we should render a box of the usual cctray locations. We can put this text where we currently show the projects and the include/exclude all buttons.

We should hide the include/exclude buttons until the URL is added

The list of usual locations can be found on our README.

Stuck attempting to load cctray xml 'forever'

I loaded the config screen after configuring previously and since cctray xml was already set Nevergreen tried to automatically fetch it. This resulted in the entire screen getting 'locked' by the loading widget 'forever'.

My guess would be this is because we just haven't set a timeout for the socket trying to fetch the xml.

Attempt to guess the CI server from the URL

This will allow us to add specific parsing options for that particular CI server, currently this is only important for Go and Snap.

Now we always try and perform the Go/Snap specific parsing.

We could also just ask on the config screen but working it out automatically seems nicer if we can consistently.

Cache busting for releases

We currently output the same file for our JavaScript and CSS, could this result in having caching issues when we release new versions?

New UI ideas

New UI concept.

  • All screens have access to the nav/menu which can be toggled to show/hide on left.
  • Multiple cctrays concept
  • Timing section
  • Success section (choose colours, images, text) room for themes?

Other notes;

  • Should clicking/touching a build expand the box to show more details about the break
  • Limit the total number of trays
  • Can mobile show 2 builds in a row, should this be configured in settings
  • Should there be an users section, where by people could be added to be emialed, alerted if a build keeps breaking or cannot be tracked etc.

nevergreen-concept

Do not check SSL certificates - Fails on Travis

Travis CI cctray.xml do not work as we throw an error during SSL handshake

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
........
........
........
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

URL: https://api.travis-ci.org/repositories/rails/rails/cc.xml

Not sure if this is something we pass to Java to disable, or something we can put in the clj-cctray library to tell it not to check. We should prefer not adding config to load nevergreen.

Create functional test

  • run the clojure app
  • go to localhost/config -> click watch (we will default config to be our test data or apache)
  • make sure localhost/ returns either a cat or an

Add to pre-push

NullPointerException on main build screen

java.lang.NullPointerException: null
                      Reflector.java:301 clojure.lang.Reflector.invokeNoArgInstanceMember
                           reader.clj:13 clj-cctray.reader/http-read-unsecured->String
                           reader.clj:23 clj-cctray.reader/xml-reader
                           parser.clj:10 clj-cctray.parser/to-map
                           parser.clj:22 clj-cctray.parser/get-projects
                             core.clj:36 clj-cctray.core/get-projects
                         RestFn.java:439 clojure.lang.RestFn.invoke
                              api.clj:22 nevergreen.api/get-interesting-projects
                              app.clj:25 nevergreen.app/fn
                             core.clj:99 compojure.core/make-route[fn]
                             core.clj:45 compojure.core/if-route[fn]
                             core.clj:30 compojure.core/if-method[fn]
                            core.clj:112 compojure.core/routing[fn]
                           core.clj:2515 clojure.core/some
                            core.clj:112 compojure.core/routing
                         RestFn.java:139 clojure.lang.RestFn.applyTo
                            core.clj:626 clojure.core/apply
                            core.clj:117 compojure.core/routes[fn]
                   keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn]
                    nested_params.clj:75 ring.middleware.nested-params/wrap-nested-params[fn]
                           params.clj:58 ring.middleware.params/wrap-params[fn]
                multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn]
                            flash.clj:31 ring.middleware.flash/wrap-flash[fn]
                          session.clj:85 ring.middleware.session/wrap-session[fn]
                            Var.java:379 clojure.lang.Var.invoke
                           reload.clj:18 ring.middleware.reload/wrap-reload[fn]
                       stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn]
                       stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn]
                            jetty.clj:18 ring.adapter.jetty/proxy-handler[fn]
                        (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle
                 HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle
                         Server.java:363 org.eclipse.jetty.server.Server.handle
         AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest
         AbstractHttpConnection.java:931 org.eclipse.jetty.server.AbstractHttpConnection.content
         AbstractHttpConnection.java:992 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content
                     HttpParser.java:856 org.eclipse.jetty.http.HttpParser.parseNext
                     HttpParser.java:240 org.eclipse.jetty.http.HttpParser.parseAvailable
             AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle
          SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle
           SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run
               QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
               QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
                         Thread.java:745 java.lang.Thread.run

Introduce Browserify for organising the JS code

Browserify allows you to organise your code better, like Require.JS does.

This allows us to not depend on global scope, and makes our JS into one file.

As a negative tradeoff, it will mean we will now have a pre-processor stage.

We will have one initialiser JS file, each class will take dependencies as function arguments to allow us to test easily.

This will allow us to move the js source code under src

Add admin page link that appears on the monitor page when the user moves the mouse

We shouldn't have to force the user to remember the /config url. Let's put an onmousemove with timeout action on the monitor page, so when you move the mouse a button appears at the bottom of the page with a link to the config page.

To make things match up, The config page now has a 'watch' button at the bottom, rather than to the right of the cctray URL.

ability to 'sleep' a build for a defined period

It would be nice to be able to quickly remove a build from the watch list for a configurable period, a few days or hours.

e.g. we currently have builds that depend on external integration points and we don't expect them to go green for a number of days. we want to supress the red status temporarily, but don't want to forget to re-enable the watch at some point in the future

Auto detect server type better

Currently it relies on getting the projects once then doing a check on the returned data, which may result in the projects being fetched again with the correct :server option. It also only detects the Go server, which incorrectly includes Snap.

This could probably be done using the url.

Allow multiple cctray xml files to be used

They should then all be fetched and aggregated together to form a single build view.

The admin screen would need to change to allow multiple urls to be specified and we'd probably want to highlight which xml file each project came from in some way.

In my opinion the main monitor view should stay the same.

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.