Giter Club home page Giter Club logo

trollolo's Introduction

Trollolo

Build Status Code Climate Test Coverage

Command line tool to extract data from Trello, in particular for creating burndown charts.

Functionality

A detailed description of the functionality of the tool can be found in the man page.

Expectations

For expectations how the board has to be structured to make the burndown chart functions work see the Trollolo man page. There is an example Trello board which demonstrates the expected structure.

Installation

You need to have Ruby install. Trollolo works with Ruby >= 2.2.

You can install Trollolo as gem with gem install trollolo.

For the chart generation you will need a working matplotlib installation and the python module to read YAML. On openSUSE you can get that with

zypper install python2-matplotlib python2-matplotlib-tk python2-PyYAML

or

zypper install python-matplotlib python-matplotlib-tk python-PyYAML

Configuration

Trollolo reads a configuration file .trollolorc in the home directory of the user running the command line tool. It reads the data required to authenticate with the Trello server from it. It's two values (the example shows random data):

developer_public_key: 87349873487ef8732487234
member_token: 87345897238957a29835789b2374580927f3589072398579820345

These values have to be set with the personal access data for the Trello API and the personal access token of the application, which has to be generated.

For creating a developer key go to the Developer API Keys page on Trello. It's the key in the first box.

For creating a member token use the following URL, replacing ... by the key you obtained in the first step.

https://trello.com/1/authorize?key=...&name=trollolo&expiration=never&response_type=token

To create a member token for the set-priority command use this URL instead:

https://trello.com/1/connect?key=...&name=trollolo&response_type=token&scope=read,write

The board id is the cryptic string in the URL of your board.

The .trollolorc file can also be used to set aliases for board ids. When set, you will be able to use the alias instead of the board-id in the various commands. E.g.

With the following configuration

board_aliases:
  MyTrelloBoard: 53186e8391ef8671265ebf9e

You can issue the command:

  trollolo get cards --board-id=MyTrelloBoard

Creating burndown charts

Trollolo implements a simple work flow for creating burndown charts from the data on a Trello board. It fetches the data from Trello, stores and processes it locally, and generates charts which can then be uploaded as graphics to Trello again.

At the moment it only needs read-only access to the Trello board from which it reads the data. In the future it would be great, if it could also write back the generated data and results to make it even more automatic.

The work flow goes as follows:

Start the workflow by using the current directory as working directory and initialize it for the burndown chart generation:

trollolo burndown init --board-id=MYBOARDID

By default, trollolo uses the current directory as working directory, if you want to specify another directory as working directory, use the --output option as follows:

trollolo burndown init --board-id=MYBOARDID --output=WORKING_DIR

This will create a directory WORKING_DIR and put an initial data file there, which contains the meta data. The file is called burndown-data-1.yaml. You might want to keep this file in a git repository for safe storage and history.

After each daily go to the working directory and call:

trollolo burndown update

This will get the current data from the Trello board and update the data file with the data from the current day. If there already was some data in the file for the same day it will be overridden.

When the sprint is over and you want to start with the next sprint, go to the working directory and call:

trollolo burndown update --new-sprint

This will create a new data file for the next sprint number and populate it with initial data taken from the Trello board. You are ready to go for the sprint now and can continue with calling trollolo burndown after each daily.

To push the current state of the scrum process (current day) to an api endpoint call:

trollolo burndown update --push-to-api URL

Trollolo will send a json encoded POST request to URL with the same structure as the generated burndown yaml file.

Note: If no fast lane cards are in this sprint the fast_lane structure won't appear in the json structure

The specified URL can contain placeholders which will be replaced:

 :sprint => Current running sprint
 :board  => Board ID

To generate the actual burndown chart, go to the working directory and call:

trollolo burndown plot SPRINT_NUMBER

or fetch and plot data in one step with:

trollolo burndown update --plot

This will take the data from the file burndown-data-SPRINT_NUMBER.yaml and create a nice chart from it. It will show the chart and also create a file burndown-SPRINT_NUMBER.png you can upload as cover graphics to a card on your Trello board.

Some more info can be found in the command line help with trollolo help and trollolo help burndown.

Swimlanes

You can define swimlanes to exclude certain cards from the normal burndown data. This can be useful when you track work of multiple projects on the same board and you don't want to apply the full Scrum framework to all of them. An example would be a side project which you limit to one card in process.

Swimlanes are defined by putting a label with the name of the swimlane on all cards which belong to this swimlane. It does not matter in which column they are. To make Trollolo aware of the swimlane, you need to add an entry in the meta section of the burndown YAML such as:

meta:
  swimlanes:
    - My Side Project

This lets Trollolo exclude all cards which have the label with the name My Side Project from the burndown chart.

The data for swimlane cards is collected separately in the burndown YAML separated in todo, doing, and done values. This can be used to generate statistics for the swimlanes. Trollolo currently only writes the raw data but doesn't support any statistics such as generating graphs.

Column names

Trollolo by default looks for columns named such as Sprint Backlog, Doing, or Done. If you need more or other names you can configure that in the burndown YAML. Here is an example:

meta:
  todo_columns:
    - Main Backlog
    - Swimlane Backlog
  doing_columns:
    - Doing
    - Review
    - QA

Example

Burndown example

Other SCRUM commands

Trollolo supports SCRUM on Trello by using one board for the sprint and another one for planning. On these boards several lists are used to organize stories.

The setup-scrum command creates the necessary elements. The names are taken from the configuration. If you change the names in Trello, you need to update theconfiguration in trollolorc.

At the end of a sprint, after the review meeting, remaining cards can be moved back to the planning board with cleanup-sprint. Once the sprint backlog is ready, priorities can be added to the card titles with prioritize. Move the planning backlog to the sprint board with move-backlog.

Labels

  • sticky: used to mark cards which are not moved, like the goal card
  • waterline: for cards which are under the waterline

Lists

  • sprint_backlog: this list contains the stories of the current sprint
  • sprint_qa: any cards in the current sprint which need QA
  • sprint_doing: cards currently being worked on
  • planning_backlog: used to plan the next sprint, these cards will be prioritized
  • planning_ready: contains cards which are not yet estimated and therefore not in the backlog

Default Configuration

These are the default names, add this to trollolorc and change as necessary.

scrum:
  board_names:
    planning: Planning Board
    sprint: Sprint Board
  label_names:
    sticky: Sticky
    waterline: Waterline
  list_names:
    sprint_backlog: Sprint Backlog
    sprint_qa: QA
    sprint_doing: Doing
    planning_backlog: Backlog
    planning_ready: Ready for Estimation

The board names are not used to find the boards on trello. Since several boards can share the same name, they are only used when creating the SCRUM setup.

Examples

Create the boards and lists:

trollolo scrum init

Lookup the ID of the created boards and use them as arguments:

# https://trello.com/b/123abC/sprint-board
# https://trello.com/b/GHi456/planning-board

trollolo scrum end --board-id=123abC --target-board-id=GHi456
trollolo scrum prioritize --board-id=GHi456
trollolo scrum start --planning-board-id=GHi456 --sprint-board-id=123abC

You can use aliases, as described in the configuration section, instead of IDs.

trollolo's People

Contributors

agraul avatar ana06 avatar ankitkataria avatar aosthof avatar atul9 avatar bgeuken avatar bkutil avatar bmwiedemann avatar cornelius avatar jimmykarily avatar kalabiyau avatar matheussbernardo avatar mauromorales avatar namangupta01 avatar rishabhptr avatar ronaq13 avatar swamp09 avatar thardeck 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

trollolo's Issues

Solve offenses for Style/AndOr cop

This cop checks for uses of and and or, and suggests using && and || instead. There are offenses in our project that has been added to .rubocop-todo.yml.

Clue: The cop support autocorrect, so the offenses can be automatically solved. After applying the autocorrect review the resulting code to check everything is as expected.

Sprint cleanup doesn't clean up QA cards

The sprint-cleanup command moves cards from the Sprint Backlog and Doing columns back to the planning board, but leaves out cards in the QA column. It should move these back as well.

wrong usage information

aschnell@thalassa:/ARVIN/yast2/burndown/team-a> trollolo.ruby2.1 plot
ERROR: "trollolo.ruby2.1 plot" was called with no arguments
Usage: "trollolo.ruby2.1 plot"

Run burndown chart generation in container

The burndown chart generation uses a Python script using matplotlib. This works nicely once you have everything you need installed properly. It's not trivial, though, because of Python version differences, the matplotlib backend, or the special font we use.

We already have a container encapsulating this environment. We use it for the tests. We could use the same container for the normal usage of Trollolo as well. This would require Docker to be available and set up on the system running Trollolo, but would get rid of all the other dependencies which might be problematic.

To make it easy to use, we should probably push the container to DockerHub, but also allow to build it locally for testing and development.

Show new title of card in output of set-priorities

When running trollolo set-priorities the cards being prioritized are listed on stdout. It should list the new title of the card, not the old one. Then the new priorities already show up in the titles.

This can even work as a poor man's version of #45 then.

Scaling tasks does not always work

Scaling the tasks in a way that the starting point is the same as for story points does not always work. The burndown-23.png and burndown-56.png in the integration tests show that issue. There the green task line should start at the same point as the black story point line.

It probably has something to do with adding tasks during the sprint.

Add option to force generation of the burndown chart

When the --force option is provided to the trollolo burndown command it always updates the burndown chart even when due to other conditions like the configuration of the daily generation time, the data and chart would not be updated. This is to help fixing problems in the generation, when the data has incorrectly been calculated.

Idea: Manage todo items

Trollolo could provide shortcuts for handling todo items on Trello. This could be used to manage incoming items for a backlog, but also for organizing personal todos.

Trollolo would get a new command todo with sub commands to configure the feature, and to add and list todo items.

trollolo todo config (without target configured):

Configure target board and column by running `trollolo todo config <board-id> <list-name>`

trollolo todo config xyz Todo:

Configured todo target:
Board: Name of Board (xyz)
List: Todo

trollolo todo config (with target configured):

Todo target:
Board: Name of Board (xyz)
List: Todo

trollolo todo add (without target configured):

Configure target board and column by running `trollolo todo config <board-id> <list-name>`

trollolo todo add Do the thing (with target configured):

Added todo: "Do the thing" to list "Todo" on board "Name of Board"

trollolo todo list:

To do:
* Do the thing
* Do the other thing

This could be extended to support different lists for incoming and listing, so the config would get an additional optional parameter. This would allow to add and see todos, but organizing them, setting priorities, deciding what gets on the todo list from the incoming items, all that would be handled on Trello:

trollolo todo config (without target configured):

Configure target board and column by running `trollolo todo config <board-id> <incoming-list-name> <todo-list-name>`

trollolo todo config xyz Incoming Backlog:

Configured todo target:
Board: Name of Board (xyz)
Incoming List: Incoming
Todo List: Backlog

trollolo todo config (with target configured, but no todo-list set):

Todo target:
Board: Name of Board (xyz)
List: Todo

custom number for sprint

This is the documentation for creating a new sprint:

n, [--new-sprint=NEW_SPRINT] # Create new sprint

Because of that I had though you can have a custom name in the sprint, but that is not the case as the value it is just ignored here: https://github.com/openSUSE/trollolo/blob/master/lib/cli.rb#L179

It should be possible to provide a custom number number for creating a sprint:

trollolo burndown --new-sprint=7

Clues:

  • It should only allow numbers as parameters.
  • It should work and be tested for limit cases, for example: The number is the same of the current sprint.
  • It should be documented.

Solve offenses for Layout/SpaceAfterNot cop

This cop checks for space after !. There are offenses in our project that has been added to .rubocop-todo.yml.

Clue: The cop support autocorrect, so the offenses can be automatically solved. After applying the autocorrect, review the resulting code to check everything is as expected.

board-id in burndown is ignored

When running trollolo burndown --new_sprint --board-id=78454 --output=trollolo the board-id parameter is ignored and it uses the board-id of the previous sprint, which is in the last burndown-data.yml file.

Being able to specify the sprint length and weekend_lines

If I am not wrong currently there is no way to specify in the command line the total_days and weekend_lines. So that means that if I want to have an sprint with 8 days I have to generate the .yml, then manually modify the .yml and after that painting the graph again. This could be easily done with two more parameters for trollolo burndown --new-sprint. This would also help to automatize the generation of the burndown-char.

Document options

Although our man is already quite complete the options are not already documented. That is specially important for the burndown command, as it is doing many different things, depending on the given options.

Add command to create sprint boards from configuration

A command like setup-sprint-boards should create all necessary boards, lists and labels to work with trollolos SCRUM commands.

The names (Ready, Backlog, QA, Sprint Backlog, Doing, ...) should be configurable via .trollolorc. The other scrum commands, like sprint clean up and prioritize, should use these new configuration values instead of command line arguments.

sprint_backlog_name: Sprint Backlog
sprint_qa_name: QA
sprint_doing_name: Doing
planning_backlog_name: Backlog
planning_ready_name: Ready for Estimation

board_aliases is not working

board_aliases is not working

board_aliases:
  MyTrelloBoard: Fs7boVwI
> vagrant exec bundle exec trollolo get-cards --board-id=MyTrelloBoard
E, [2017-09-14T10:36:17.688401 #4781] ERROR -- : [401 GET https://api.trello.com/1/boards/MyTrelloBoard?lists=open&cards=open&card_checklists=all]: invalid key
/usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:99:in `invoke_verb': invalid key (Trello::Error)
        from /usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:19:in `get'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/trello_wrapper.rb:84:in `get_board'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/trello_wrapper.rb:32:in `retrieve_board_data'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/trello_wrapper.rb:21:in `board'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/cli.rb:96:in `get_cards'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/bin/trollolo:29:in `<top (required)>'
        from /usr/bin/trollolo:22:in `load'
        from /usr/bin/trollolo:22:in `<main>'

Solve offenses for Layout/SpaceAroundEqualsInParameterDefault cop

Checks that the equals signs in parameter default assignments have surrounding space. There are offenses in our project that has been added to .rubocop-todo.yml.

Clue: The cop support autocorrect, so the offenses can be automatically solved. After applying the autocorrect review the resulting code to check everything is as expected.

Burndown as a Service

Currently Trollolo still depends on some configuration data which have to be provided in the form of a YAML file when running it from the command line. The YAML file contains information such as the length of the sprint and the burndown data processed from the board for each day. So this is additional state which needs to be kept around, usually in a git repository.

If we could get rid of this extra state and keep this information on the Trello board as well, the command line would become stateless. This means it could be run independently of any local configuration at any time. We could even run it periodically in a cron job. This would eliminate the need to explicitly run it manually, so the burndown chart could be provided as a service, which would just magically be updated once the board has the necessary configuration and cards to show it.

This issue acts as an epic for this feature, provides an overview of the concept and links to finer grained stories to implement it.

Concept

The basic idea would be to keep the data from the burndown.yaml file in the description of the burndown chart card as a embedded YAML block. When trollolo burndown --board-id=<someboardid> is run, it looks for the first done column and looks for a card named "Burndown chart" there. This is the card where the YAML is kept and where the resulting burndown chart is uploaded.

When the burndown generation is run automatically we have to deal with situations when the board possibly is not in a consistent state because of start or end of the sprint or during a daily, for example when cards are being moved to a different board from or to a planning board. We'll address this by adding a couple of safety measures to prevent generation of a broken chart, and by doing burndown generation in concert with other commands used as part of the sprint workflow such as the sprint cleanup.

Stories

  • Write back burndown chart graphics to Trello board (#64)
  • Read burndown configuration from Trello board (#65)
  • Write back burndown YAML data to Trello board (#65)
  • Add configuration for when the burndown chart is updated (#66)
  • Add option to force update of burndown chart (#67)
  • Run burndown generation as part of sprint cleanup (#68)
  • Add flag to prevent automatic regeneration of burndown chart (#69)
  • Add command to run burndown generation for a set of boards (#70)

Trollolo crashes when trying to plot test board

I have copied the test board into my Trello account to try trollolo. However, when I try to plot using the test board, one of trollolo's Python scripts crashes.

Steps to reproduce

  • clone trollolo repo and install requirements
$ ./bin/trollolo burndown-init --board-id=dtyEdYTh --output=test
$ cd test
$ ../bin/trollolo burndown
$ ../bin/trollolo plot 1
OR
$ ../bin/trollolo burndown --plot

Expected
Chart to be generated

Actual

(trollolo)[promulo@siren test]$ ../bin/trollolo burndown --plot
Traceback (most recent call last):
  File "/home/promulo/dev/trollolo/scripts/create_burndown.py", line 71, in <module>
    data = burndowndata.BurndownData(args)
  File "/home/promulo/dev/trollolo/scripts/burndowndata.py", line 15, in __init__
    self.setUnplannedTasksDayOne(burndown)
  File "/home/promulo/dev/trollolo/scripts/burndowndata.py", line 116, in setUnplannedTasksDayOne
    self.unplanned_tasks_day_one = burndown["days"][0]["unplanned_tasks"]["done"]
KeyError: 'done'

Using .get("done", 0) instead of ["done"] here avoids the issue but I'm not sure if the problem resides in the Python script, the YAML generation or the test board itself.

move-backlog fails: missing waterline

move-backlog complains about waterline or seabed card needed with the waterline created.

> trollolo move-backlog --planning-board-id=M1puGZme --sprint-board-id=dsEc4bNv
/usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/scrum/backlog_mover.rb:24:in `setup': backlog list on planning board is missing waterline or seabed card (RuntimeError)
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/scrum/backlog_mover.rb:6:in `move'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/lib/cli.rb:371:in `move_backlog'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
        from /usr/lib64/ruby/gems/2.4.0/gems/trollolo-0.0.12/bin/trollolo:29:in `<top (required)>'
        from /usr/bin/trollolo:22:in `load'
        from /usr/bin/trollolo:22:in `<main>'

Test suite needs some love

We need to think about how to improve the test suite because currently there are many thing untested or test that are not actually testing what we want and are difficult to modify when changing the code.

Remove TrelloWrapper

TrelloWrapper bypasses the trello gem and is just a collection of unrelated methods.

There are some client.put and .get calls in the class (https://github.com/openSUSE/trollolo/blob/master/lib/trello_wrapper.rb#L74). These do not escape arguments.
We should replace them with calls to the Trello gem.

The whole class is more like a Helper. Looking at users of TrelloWrapper, it's mostly called from cli.rb. The cli commands mostly call a different function each. There is little re-use. The same is true for backup.rb and burndown_data.rb.

Splitting TrelloWrapper into separate classes could remove some business logic from cli.rb. As we could put it in the new classes.

Sprint lenght "total_days" is integer only

Sprint lenght is limited to full days only, since it's an integer.
Normally we start our sprint with a half first day, and end also count the last day half, because of surrounding meetings. This time we started with a full day already, which then sums up in 8.5 days (9.5 for "total_days"). But that's not supported by trollolo currently.
We should change "total_days" to float, in order to support sprints with half a day as well.

yaml snippet:

---
meta:
  total_days: 9.5
> trollolo.ruby2.1 burndown --plot
Traceback (most recent call last):
  File "/usr/lib64/ruby/gems/2.1.0/gems/trollolo-0.0.10/scripts/create_burndown.py", line 74, in <module>
    plot = plot.Plot(data)
  File "/usr/lib64/ruby/gems/2.1.0/gems/trollolo-0.0.10/scripts/plot.py", line 18, in __init__
    self.setXAxisTicks(self.data.total_days)
  File "/usr/lib64/ruby/gems/2.1.0/gems/trollolo-0.0.10/scripts/plot.py", line 54, in setXAxisTicks
    x_labels = range(0, total_days)
TypeError: range() integer end argument expected, got float.
/usr/lib64/python2.7/site-packages/matplotlib/backends/backend_gtk3.py:215: Warning: Source ID 7 was not found when attempting to remove it
  GLib.source_remove(self._idle_event_id)
Updated data for sprint 8

Add command to run burndown generation for a set of boards

There already is a command to run burndown generation for a set of boards: trollolo burndowns. This takes a list of boards from a local file. We should extend this command or add another one to run burndown generation for a set of boards defined on Trello. This way we could automate burndown generation using a central Trello board which collects the info for all Scrum teams including pointers to specific sprint boards containing burndown charts.

The command should read the configuration from a Trello board specified as a board id given as parameter. It then should look for a list "Teams" and look in the description of each card in this list for a URL to a sprint board. This could be done matching for "Sprint board: https://trello.com/..." extracting the board id from the URL. This way the specification of the board id would also act as link for people using the board in a browser.

For each board the automatic burndown generation should then be tried. It should only run for those boards who have the burndown configuration on the board in the standard way used by the burndown command as well. For board which don't have the information nothing should happen. If there are errors in the configuration or during burndown generation errors should be reported as would be when running burndown on an individual board.

Read burndown configuration from Trello board

In order to get rid of the local state in the burndown.yaml file there should be an option to store this data on the Trello board it belongs to. To have a smooth transition this feature should explicitly be requested by the user with a command line option. So when running `trollolo burndown --board-id= --remote-state" the behavior changes to keeping the state remotely on the board. This means in particular:

  • The burndown YAML is taken from the description of the burndown chart card on the specified board.
    • The burndown chart card is the first card named "burndown chart" (case insensitive match) in the first "Done" column (same card as defined in #64)
    • The YAML is embedded in the description in a code block delimited by a ```yaml marker at the start and a ``` marker at the end
    • If there is more than one yaml block in the description the first one is taken
    • Any other content around the yaml block in the description is ignored by the burndown code
    • If there is no YAML configuration found the command exits with an error describing where it has looked for the information
  • The burndown data is updated from the data on the Trello board and a png is generated
  • The updated data is written back to the same YAML block it was taken from
  • The graphics is uploaded to the burndown data card (as described in #64). When the --remote-state option is given, this is done unconditionally, even when no --upload option is explicitly given.
  • When an error occurs during burndown generation or upload of the updated data it is reported by adding a comment to the burndown chart card and by sending an email to the email address configured in the YAML data (we need to add a new key for that)

Solve offenses for Lint/AssignmentInCondition cop

Checks that operators have space around them, except for ** which should not have surrounding space. There are offenses in our project that has been added to .rubocop-todo.yml.

This cop doesn't support auto correction, so the offenses have to be manually solved.

setup-scrum should ask for credentials

setup-scrum should ask for credentials, as other commands, suchs as burndown, are doing.

> bin/trollolo setup-scrum
E, [2017-09-14T15:15:59.133085 #27956] ERROR -- : [401 POST https://api.trello.com/1/boards]: unauthorized permission requested
/usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:99:in `invoke_verb': unauthorized permission requested (Trello::Error)
        from /usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:24:in `post'
        from /usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/board.rb:68:in `save'
        from /usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/basic_data.rb:27:in `save'
        from /usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:67:in `create'
        from /usr/lib64/ruby/gems/2.4.0/gems/ruby-trello-1.5.1/lib/trello/board.rb:51:in `create'
        from /home/Ana/Documents/trollolo/lib/scrum/creator.rb:16:in `create_sprint_board'
        from /home/Ana/Documents/trollolo/lib/scrum/creator.rb:5:in `create'
        from /home/Ana/Documents/trollolo/lib/cli.rb:323:in `setup_scrum'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
        from /usr/lib64/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/base.rb:466:in `start'
        from bin/trollolo:29:in `<main>'

Run burndown generation as part of sprint cleanup

The command trollolo cleanup-sprint moves cards back from the sprint board to the planning board. This marks the end of the sprint and prepares for the next one. To make sure that the burndown data is complete and reflects the latests state the cleanup command could run the burndown generation before moving cards.

Command to show backlog

When doing sprint commitments we need a way to see the whole backlog in one view.

To achieve that add a show-backlog command which lists the backlog on the terminal in a table. The table should have one column for the priority, one for the size and one for the title.

To show the average velocity we should add a command line option --velocity which specifies an average velocity. This adds a line in the table at the location where the sum of the cards before is closest to the specified velocity.

previous sprint .yml shouldn't be needed

When running trollolo burndown --new-sprint the .yml from the previous sprint is needed, but we are actually only using the number and the board_id. This two parameters can be also added in the command: trollolo burndown --new-sprint=3 --board-id=Fs7boVwl so in this case the previous sprint shouldn't be needed.

trollolo burndown --new-sprint=3 --board-id=Fs7boVwI
'/vagrant/burndown-data-01.yaml' not found

And having this solved I would say that running trollolo burndown-init is also not longer needed, right?

sprint-cleanup command fails when target board does not have a "Ready" column

We renamed the "Ready" column to "Ready for Estimation". This makes the sprint-cleanup fail with a nil reference error.

There should be a proper error message, that the target list could not be found (including the expected name of the target list).

It might be nice to also add a command line option to specify the target list name.

Add flag to prevent automatic regeneration of burndown chart

To prevent generation of the burndown chart with incomplete or inconsistent data we could add a flag to the burndown configuration, which prevents regeneration of the burndown chart. This could be something like sprint_state = done. This could then be used to freeze the burndown chart after final adjustments to the cards have been made, so that cards can freely be manipulated in preparation of the next sprint without automatic burndown generation getting in the way.

Add configuration for when the burndown chart is updated

The burndown YAML configuration should get another entry which defines at which time the burndown data is updated. This usually should be set to some time closely after the daily, assuming this is the time of the day, when the board is guaranteed to be in an up to date state. The data is updated when trollolo burndown runs after this time and there has been no update on the same day yet.

On the last day of the sprint the chart is updated whenever the tool is run. It always replaces the data from the same day, even if there already is an update from after the daily. This is to make it possible to update the data with final state after review and possible adjustments necessary at the end of the sprint.

On the first day of the sprint the first run is taken and data is never updated from the same day.

Solve offenses for Layout/SpaceAroundOperators cop

This cop checks for assignments in the conditions of if/while/until. There are offenses in our project that has been added to .rubocop-todo.yml.

Clue: The cop support autocorrect, so the offenses can be automatically solved. After applying the autocorrect review the resulting code to check everything is as expected.

Write back burndown chart graphics to Trello board

When generating the burndown chart graphics with trollolo burndown --plot or trollolo plot there should be a new option --upload which uploads the generated png file to the card showing the burndown chart. The board id is taken from the YAML file. The card is identified as the first card named "burndown chart" (case insensitive match) in the first "Done" column. If upload fails there should be an error message.

Remove Ruby 2.1 support

I built and installed trollolo with Ruby 2.1 and it is not working:

Ana@linux-nt5w:~/Documents/trollolo(master)> gem.ruby2.1 build trollolo.gemspec 
WARNING:  pessimistic dependency on ruby-trello (~> 1.5.0) may be overly strict
  if ruby-trello is semantically versioned, use:
    add_runtime_dependency 'ruby-trello', '~> 1.5', '>= 1.5.0'
WARNING:  See http://guides.rubygems.org/specification-reference/ for help
  Successfully built RubyGem
  Name: trollolo
  Version: 0.0.11
  File: trollolo-0.0.11.gem

Ana@linux-nt5w:~/Documents/agile-team-dashboard(burndown-chart)> vagrant exec sudo gem.ruby2.1 install trollolo
Building native extensions.  This could take a while...
ERROR:  Error installing trollolo:
        ERROR: Failed to build gem native extension.

    current directory: /usr/lib64/ruby/gems/2.1.0/gems/unf_ext-0.0.7.4/ext/unf_ext
/usr/bin/ruby.ruby2.1 -r ./siteconf20170913-4441-1e8v44t.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib64/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /usr/lib64/ruby/gems/2.1.0/gems/unf_ext-0.0.7.4 for inspection.
Results logged to /usr/lib64/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/unf_ext-0.0.7.4/gem_make.out

I would suggest to remove Ruby 2.1 support as it is quite old. This way we can also remove activesupport dependency which seems to be introduced only for staying compatible with Ruby 2.1: 1b97fc5

Add command to move cards from planning to sprint board

It would be nice to have a command to do the recurring task of moving cards from the product backlog on the planning board to the sprint backlog on the sprint board. We need to do this after each planning meeting.

Here are the details:

  • Add a command trollolo move-backlog --planning-board-id=ID1 --sprint-board-id=ID2
  • The planning board will contain a list of cards in a column named "Backlog" with two special cards marking the waterline and the seabed.
  • The command should move all cards above the seabed card to the column named "Sprint Backlog" on the sprint board, including the waterline card.
  • The order of the card including the position of the waterline card has to be preserved.
  • All card between the waterline card and the seabed card should get a label "Under waterline"
  • The seabed card should be deleted
  • If the "Sprint Backlog" column already contains a waterline or seabed card before the move, they should be deleted or moved in a way that the order of the cards in the sprint backlog is correct as it would be if there would not have been these cards.
  • If there are any other cards in the "Sprint Backlog" column all moved cards should be appended after them
  • A waterline card is a card which has the word "waterline" in the title. The title can be spelled all uppercase, contain additional characters or white space between one or more letters. "Waterline", "water line", and "~ ~ ~ ~ W A T E R L I N E ~ ~ ~ ~" are all valid waterline card titles.
  • A seabded card is a card which has the word "seabed" in the title. The same variations are valid as for the waterline card.
  • If the "Backlog" column on the planning board does not include both, the waterline and the seabed card, an error should be raised and no card should be moved.
  • If the sprint board does not have a column "Sprint Backlog" an error should be raised and no card should be moved.

set-priorities command fails with cards having '#' in the title

If a card has a title which include a #, such as (2) Fix bnc#1004697 - Repository setup inconsistent on kiwi images based on SMT clients the --set-priorities command fails with an error such as

/usr/lib64/ruby/2.2.0/uri/rfc3986_parser.rb:66:in `split': bad URI(is not URI?): https://api.trello.com/1/cards/<redacted>/name?key=<redacted>&token=<redacted>&value=P7%3A%20%282%29%20Fix%20bnc#1004697 - Repository setup inconsistent on kiwi images based on SMT clients (URI::InvalidURIError)                                                                                                        
        from /usr/lib64/ruby/2.2.0/uri/rfc3986_parser.rb:72:in `parse'                                                                                            
        from /usr/lib64/ruby/2.2.0/uri/common.rb:226:in `parse'                                                                                                   
        from /usr/lib64/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/restclient/request.rb:276:in `parse_url'                                                       
        from /usr/lib64/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/restclient/request.rb:280:in `parse_url_with_auth'                                             
        from /usr/lib64/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/restclient/request.rb:175:in `execute'                                                         
        from /usr/lib64/ruby/gems/2.2.0/gems/rest-client-1.8.0/lib/restclient/request.rb:41:in `execute'                                                          
        from /usr/lib64/ruby/gems/2.2.0/gems/ruby-trello-1.5.1/lib/trello/net.rb:29:in `execute_core'                                                             
        from /usr/lib64/ruby/gems/2.2.0/gems/ruby-trello-1.5.1/lib/trello/net.rb:18:in `try_execute'                                                              
        from /usr/lib64/ruby/gems/2.2.0/gems/ruby-trello-1.5.1/lib/trello/net.rb:10:in `execute'
        from /usr/lib64/ruby/gems/2.2.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:88:in `invoke_verb'
        from /usr/lib64/ruby/gems/2.2.0/gems/ruby-trello-1.5.1/lib/trello/client.rb:29:in `put'
        from /home/cs/suse/trollolo/lib/trello_wrapper.rb:83:in `set_name'
        from /home/cs/suse/trollolo/lib/scrum/prioritizer.rb:25:in `block in update_priorities'
        from /home/cs/suse/trollolo/lib/scrum/prioritizer.rb:22:in `each'
        from /home/cs/suse/trollolo/lib/scrum/prioritizer.rb:22:in `update_priorities'
        from /home/cs/suse/trollolo/lib/scrum/prioritizer.rb:11:in `prioritize'
        from /home/cs/suse/trollolo/lib/cli.rb:308:in `set_priorities'
        from /usr/lib64/ruby/gems/2.2.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
        from /usr/lib64/ruby/gems/2.2.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
        from /usr/lib64/ruby/gems/2.2.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
        from /usr/lib64/ruby/gems/2.2.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
        from bin/trollolo:29:in `<main>'

Restructure commands

The current command structure is a bit ad-hoc and has grown over time. We should clean them up. Here is a proposal @kalabiyau and me came up with:

backup get
backup list
backup show

burndown init
burndown get
burndown plot

get [--raw] lists
get [--raw] cards
get [--raw] checklists
get [--raw] url <url-fragment>

help

Remove the fetch-burndown-data command.

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.