• Stars
    star
    2,061
  • Rank 21,554 (Top 0.5 %)
  • Language
    CSS
  • License
    GNU Affero Genera...
  • Created over 7 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A library that generates an interactive radar, inspired by https://thoughtworks.com/radar/.

GitHub release (latest SemVer) Thoughtworks Stars Docker Hub Pulls GitHub contributors Prettier-Standard Style Guide AGPL License

A library that generates an interactive radar, inspired by thoughtworks.com/radar.

Demo

You can see this in action at https://radar.thoughtworks.com. If you plug in this data you'll see this visualization.

How To Use

The easiest way to use the app out of the box is to provide a public Google Sheet ID from which all the data will be fetched. You can enter that ID into the input field and your radar will be generated once you click the submit button. The data must conform to the format below for the radar to be generated correctly.

Setting up your data

You need to make your data public in a form we can digest.

Create a Google Sheet. Give it at least the below column headers, and put in the content that you want:

name ring quadrant isNew description
Composer adopt tools TRUE Although the idea of dependency management ...
Canary builds trial techniques FALSE Many projects have external code dependencies ...
Apache Kylin assess platforms TRUE Apache Kylin is an open source analytics solution ...
JSF hold languages & frameworks FALSE We continue to see teams run into trouble using JSF ...

Sharing the sheet

  • In Google Sheets, click on "Share".
  • On the pop-up that appears, set the General Access as "Anyone with the link" and add "Viewer" permission.
  • Use the URL link of the sheet.

The URL will be similar to https://docs.google.com/spreadsheets/d/1waDG0_W3-yNiAaUfxcZhTKvl7AUCgXwQw8mdPjCz86U/edit. In theory we are only interested in the part between '/d/' and '/edit' but you can use the whole URL if you want.

Using private Google Sheet

When using a private Google Sheet as your input, you will be prompted with a Google One Tap Login popup. Once you have logged in with the appropriate Google Account and authorized our app to access the sheet, the Radar will be generated.

The input data format for the private sheet is the same as a public Google Sheet.

Using CSV data

The other way to provide your data is using CSV document format. You can enter a publicly accessible URL (not behind any authentication) of a CSV file into the input field on the first page. For example, a raw URL for a CSV file hosted publicly on GitHub can be used. The format is just the same as that of the Google Sheet, the example is as follows:

name,ring,quadrant,isNew,description
Composer,adopt,tools,TRUE,"Although the idea of dependency management ..."
Canary builds,trial,techniques,FALSE,"Many projects have external code dependencies ..."
Apache Kylin,assess,platforms,TRUE,"Apache Kylin is an open source analytics solution ..."
JSF,hold,languages & frameworks,FALSE,"We continue to see teams run into trouble using JSF ..."

If you do not want to host the CSV file publicly, you can follow these steps to host the file locally on your BYOR docker instance itself.

Note: The CSV file parsing is using D3 library, so consult the D3 documentation for the data format details.

Using JSON data

Another other way to provide your data is using a JSON array. You can enter a publicly accessible URL (not behind any authentication) of a JSON file into the input field on the first page. For example, a raw URL for a JSON file hosted publicly on GitHub can be used. The format of the JSON is an array of objects with the the fields: name, ring, quadrant, isNew, and description.

An example:

[
  {
    "name": "Composer",
    "ring": "adopt",
    "quadrant": "tools",
    "isNew": "TRUE",
    "description": "Although the idea of dependency management ..."
  },
  {
    "name": "Canary builds",
    "ring": "trial",
    "quadrant": "techniques",
    "isNew": "FALSE",
    "description": "Many projects have external code dependencies ..."
  },
  {
    "name": "Apache Kylin",
    "ring": "assess",
    "quadrant": "platforms",
    "isNew": "TRUE",
    "description": "Apache Kylin is an open source analytics solution ..."
  },
  {
    "name": "JSF",
    "ring": "hold",
    "quadrant": "languages & frameworks",
    "isNew": "FALSE",
    "description": "We continue to see teams run into trouble using JSF ..."
  }
]

If you do not want to host the JSON file publicly, you can follow these steps to host the file locally on your BYOR docker instance itself.

Note: The JSON file parsing is using D3 library, so consult the D3 documentation for the data format details.

Building the radar

Paste the URL in the input field on the home page.

That's it!

Note: When using the BYOR app on radar.thoughtworks.com, the ring and quadrant names should be among the values mentioned in the example above. This holds good for Google Sheet, CSV or JSON inputs. For a self hosted BYOR app, there is no such condition on the names. Instructions to specify custom names are in the next section.

Check this page for step by step guidance.

More complex usage

To create the data representation, you can use the Google Sheet factory methods or CSV/JSON, or you can also insert all your data straight into the code.

The app uses Google Sheets APIs to fetch the data from a Google Sheet or D3.js if supplied as CSV/JSON, so refer to their documentation for more advanced interaction. The input data is sanitized by whitelisting HTML tags with sanitize-html.

The application uses webpack to package dependencies and minify all .js and .scss files.

Google OAuth Client ID and API Key can be obtained from your Google Developer Console. OAuth Client ID is mandatory for private Google Sheets, as it is needed for Google Authentication and Authorization of our app.

export CLIENT_ID=[Google Client ID]

Optionally, API Key can be set to bypass Google Authentication for public sheets.

export API_KEY=[Google API Key]

To enable Google Tag Manager, add the following environment variable.

export GTM_ID=[GTM ID]

To enable Adobe Launch, add the following environment variable.

export ADOBE_LAUNCH_SCRIPT_URL=[Adobe Launch URL]

To specify custom ring and/or quadrant names, add the following environment variables with the desired values.

export RINGS='["Adopt", "Trial", "Assess", "Hold"]'
export QUADRANTS='["Techniques", "Platforms", "Tools", "Languages & Frameworks"]'

Docker Image

We have released BYOR as a docker image for our users. The image is available in our DockerHub Repo. To pull and run the image, run the following commands.

$ docker pull wwwthoughtworks/build-your-own-radar
$ docker run --rm -p 8080:80 -e CLIENT_ID="[Google Client ID]" wwwthoughtworks/build-your-own-radar:latest
$ open http://localhost:8080

Notes:

  • The other environment variables mentioned in the previous section can be used with docker run as well.
  • Docker images for all the releases are available with their respective tags (eg: wwwthoughtworks/build-your-own-radar:v1.0.0).

Advanced option - Docker image with a CSV/JSON file from the host machine

You can check your setup by clicking on "Build my radar" and by loading the csv/json file from these locations:

$ docker pull wwwthoughtworks/build-your-own-radar
$ docker run --rm -p 8080:80 -e SERVER_NAMES="localhost 127.0.0.1" -v /mnt/radar/files/:/opt/build-your-own-radar/files wwwthoughtworks/build-your-own-radar:latest
$ open http://localhost:8080

This will:

  • Spawn a server that will listen locally on port 8080.
  • Mount the host volume on /mnt/radar/files/ into the container on /opt/build-your-own-radar/files/.
  • Open http://localhost:8080 and for the URL enter: http://localhost:8080/files/<NAME_OF_YOUR_FILE>.<EXTENSION_OF_YOUR_FILE[csv/json]>. It needs to be a csv/json file.

You can now work locally on your machine, updating the csv/json file and render the result back on your browser. There is a sample csv and json file placed in spec/end_to_end_tests/resources/localfiles/ for reference.

Notes:

  • If API Key is also available, same can be provided to the docker run command as -e API_KEY=[Google API Key].
  • For setting the publicPath in the webpack config while using this image, the path can be passed as an environment variable called ASSET_PATH.

Contribute

All tasks are defined in package.json.

Pull requests are welcome; please write tests whenever possible. Make sure you have nodejs installed. You can run nvm use to use the version used by this repo.

  • git clone [email protected]:thoughtworks/build-your-own-radar.git
  • npm install
  • npm run quality - to run the linter and the unit tests
  • npm run dev - to run application in localhost:8080. This will watch the .js and .css files and rebuild on file changes

End to End Tests

To run End to End tests, start the dev server and follow the required steps below:

  • To run in headless mode:

  • To run in debug mode:

    • add a new environment variable TEST_URL and set it to 'http://localhost:8080/'
    • npm run e2e
    • Select 'E2E Testing' and choose the browser
    • Click on the spec to run it's tests

Note: Currently, end to end tests are not supported for private Google Sheets, as it requires interacting with the Google One Tap popup.

Don't want to install node? Run with one line docker

 $ docker run -p 8080:8080 -v $PWD:/app -w /app -it node:18 /bin/sh -c 'npm install && npm run dev'

After building it will start on localhost:8080.

More Repositories

1

talisman

Using a pre-commit hook, Talisman validates the outgoing changeset for things that look suspicious — such as tokens, passwords, and private keys.
Go
1,836
star
2

cruisecontrol.rb

CruiseControl for Ruby. Keep it simple.
Ruby
614
star
3

pacto

Pacto settles disputes between JSON providers and consumers
Ruby
401
star
4

mlops-platforms

Compare MLOps Platforms. Breakdowns of SageMaker, VertexAI, AzureML, Dataiku, Databricks, h2o, kubeflow, mlflow...
360
star
5

metrik

An easy-to-use, cross-platform measurement tool that pulls data out of CD pipelines and analysis the four key metrics for you.
Kotlin
348
star
6

dadoware

Brazilian-Portuguese word list and instructions booklet for Diceware
Jupyter Notebook
147
star
7

epirust

An agent-based epidemiology simulation framework built in Rust
Rust
97
star
8

HeartBeat

HeartBeat is a tool for tracking project delivery metrics that can help you get a better understanding of delivery performance. This product allows you easily get all aspects of source data faster and more accurate to analyze team delivery performance which enables delivery teams and team leaders focusing on driving continuous improvement and enhancing team productivity and efficiency.
TypeScript
79
star
9

dancing-glyphs

Two screen savers for macOS that show ThoughtWorks glyphs dancing around.
Swift
60
star
10

maeve-csms

MaEVe is an experimental EV Charge Station Management System (CSMS)
Go
58
star
11

twde-datalab

Onboarding to data science by ThoughtWorks
Jupyter Notebook
55
star
12

Arium

Automation Testing Framework for XR(Unity) Applications.
C#
46
star
13

tw2021-screensaver

A screen saver based on an illustration that was part of the 2021 Thoughtworks brand refresh
Swift
39
star
14

PipelinePatterns

Community library of software delivery pipeline patterns
38
star
15

p2-old

The P2 Magazine
JavaScript
35
star
16

voto-como-vamos

Ruby
31
star
17

hardposit-chisel3

Chisel library for Unum Type-III Posit Arithmetic
Scala
28
star
18

what_they_say

Accessibility product to help people with hear disability
JavaScript
27
star
19

GilgaMesh

An open-source Bluetooth Low Energy self-healing mesh implementation for the nRF51/52 series.
C
26
star
20

letshelp.it

Ruby
18
star
21

tramchester

tramchester - a simple travel planning app for Manchester's tram system
Java
18
star
22

runes

Building the `runes` command with TDD in Go.
Go
18
star
23

byor-voting-web-app

TypeScript
15
star
24

dashy

A Dashboard for managing app's services requests
CSS
13
star
25

simplebandit

lightweight contextual bandit library for ts/js
TypeScript
12
star
26

vila-pinto-website

CEA – Centro de Educação Ambiental da Vila Pinto official website repository
Ruby
12
star
27

cruisecontrol.rb-contrib

Plugins of various kinds for CruiseControl.rb.
Ruby
12
star
28

metricating-api

A system that collects issue tracker data to visualize agile team metrics
JavaScript
10
star
29

inSpac

An SDK and a Keycloak plugin for fast integrating with Singpass Single Sign-on auth scheme (modified OpenID-Connect 1.0)
Java
10
star
30

billbo

Help an institution that helps other people. They got a lot of bills to pay and we got a lot of ideas to share.
JavaScript
9
star
31

candouble

Test doubles for the CAN bus
Rust
9
star
32

byor-voting-infrastructure

TypeScript
8
star
33

byor-voting-server

TypeScript
7
star
34

clojure-bootstrap

Collection of templates for Clojure apps
Clojure
6
star
35

sbteo

Compile server for sbt
Scala
6
star
36

voto-como-vamos-2

New Voto Como Vamos platform
Ruby
6
star
37

murmurs.air

A desktop client for Mingle murmurs
JavaScript
5
star
38

winston_wolfe

A best-of-breed, harm-minimisation testing tool (in Java)
Java
5
star
39

pii-anonymizer

data anonymization project
Python
4
star
40

pacto-demo

A demo of Pacto, with consumers for iOS, Android, and Web
Ruby
4
star
41

PandoraRL

PandoraRL defines an RL algorithm for predicting optimal binding pose of a ligand for a given protein. The protein and ligand molecules are represented using generalized graph convolution where nodes define the residues and ligand-atoms, and the edges define the atomic interactions.
Jupyter Notebook
4
star
42

rosetta-jvm

Demo project for working with multiple JVM languages in one code base
Groovy
3
star
43

corpos-percussivos

CSS
3
star
44

ghc_voting_app

JavaScript
3
star
45

common-ci-tasks

Common CI tasks for Ruby (Rails, Sinatra, Gem) projects
Ruby
3
star
46

arthritiscampaign

Ruby
2
star
47

connections-hubot

Hubot repository for connections team
CoffeeScript
2
star
48

dashy4r

dashy4r is a gem that helps you use ruby to integrate with Dashy
Ruby
2
star
49

anonymizer

Simple proxy to anonymize e-mails to remove a barrier to providing feedback.
Python
2
star
50

antiviral-peptide-predictions-using-gan

PandoraGAN: Generating antiviral peptides using generative models
Python
2
star
51

mingle

Mingle: Agile Project Management [Archived]
2
star
52

YouthZoneApp

A simple java open source android application orginally built to the support activities of Onside Youth Zone
Java
1
star
53

mic-predictor

Python
1
star
54

lcm-sayu-infra

1
star
55

lcm-sayu

1
star