Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Contributing

## How to test the basic functions of gtt

Create a new project on GitLab if you haven't done so already and write down the project path. e.g. `kriskbx/example-project`. To test groups and subgroups, create a new group with at least one subgroup. Add a new project to both the parent group (e.g. `example-group`) and the subgroup (e.g. `example-group/example-subgroup`) and write down the paths of all the projects and groups. Create at least two issues (write down their id e.g. `42`, `43`) and one merge request (e.g. `13`) in all projects. Or just use our public group over here: https://gitlab.com/gtt

Then run the following basic commands and check that they work as expected:

```
# Test config command
gtt config

# Test basic time tracking
gtt start "kriskbx/example-project" 42
gtt stop
gtt log

# Test cancelling
gtt start "kriskbx/example-project" 42
gtt cancel
gtt log

# Test merge request
gtt start --type=merge_request "kriskbx/example-project" 13
gtt stop
gtt log

# Test issue creation
gtt create "krisbxkbx/example-project" "New Issue"
gtt stop
gtt log

# Test editing
gtt edit

# Test deletion
gtt start "kriskbx/example-project" 42
gtt stop
gtt delete

# Test sync, check out issues on GitLab if changes are synced correctly
gtt sync

# Test basic report
gtt report "kriskbx/example-project"

# Test report for a single issue and multiple issues
gtt report "kriskbx/example-project" 42
gtt report "kriskbx/example-project" 42 43

# Test report for a group
gtt report --type=group "example-group"
gtt report --type=group --subgroups "example-group"

# Test combined reports
gtt report "kriskbx/example-project" "example-group/example-project"

# Test outputs
gtt report --output=table "kriskbx/example-project"
gtt report --output=markdown "kriskbx/example-project"
gtt report --output=csv "kriskbx/example-project"
gtt report --output=pdf --file=test.pdf "kriskbx/example-project"
gtt report --output=xlsx --file=test.xlsx "kriskbx/example-project"

# Test timeframes (adjust the values so it includes/excludes your issues)
gtt report --from="2020-06-02" --to="2020-06-03" "kriskbx/example-project"

# Test filtering (you might need to add milestones, labels and additional stuff to properly test this)
gtt report --closed "kriskbx/example-project"
gtt report --user=username "kriskbx/example-project"
gtt report --milestone=milestone_name "kriskbx/example-project"
gtt report --include_by_labels=critical "kriskbx/example-project"
gtt report --exclude_by_labels=ignore "kriskbx/example-project"
gtt report --query=issues "kriskbx/example-project"
```
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
FROM node:8.2.1-alpine

ENV GTT_VERSION 1.7.39
ENV EDITOR vi

WORKDIR /pwd

RUN yarn global add --prefix /usr/local "gitlab-time-tracker@$GTT_VERSION"

VOLUME ["/root"]
VOLUME ["/root", "/pwd"]
ENTRYPOINT ["gtt"]
CMD ["--help"]
5 changes: 3 additions & 2 deletions documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,13 @@ you can use the official [Docker image](https://hub.docker.com/r/kriskbx/gitlab-
docker run \
--rm -it \
-v ~:/root \
-v $(pwd):/pwd \
kriskbx/gitlab-time-tracker \
--help
```

`--rm` removes the container after running, `-it` makes it interactive, `-v ~:/root` mounts your home directory to the
home directory inside the container. If you want to store the config in another place, mount another directory:
home directory inside the container, `-v $(pwd):/pwd` mounts current directory inside the container to gtt be able to read local config. If you want to store the config in another place, mount another directory:


```shell
Expand All @@ -101,7 +102,7 @@ docker run \
I highly recommend creating an alias and adding it to your `bashrc`:

```shell
echo "alias gtt='docker run --rm -it -v ~:/root kriskbx/gitlab-time-tracker'" >>~/.bashrc
echo "alias gtt='docker run --rm -it -v ~:/root -v $(pwd):/pwd kriskbx/gitlab-time-tracker'" >>~/.bashrc
```

Now you can simply write `gtt` instead of the bulky Docker command before. Try it out: `gtt --help`
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"request-promise-native": "^1.0.4",
"shelljs": "^0.8.3",
"tempfile": "^2.0.0",
"throttled-queue": "^1.0.7",
"underscore": "^1.9.1",
"xdg-basedir": "^3.0.0",
"xlsx": "^0.13.5"
Expand Down
13 changes: 7 additions & 6 deletions src/models/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const request = require('request-promise-native');
const url = require('url');
const async = require('async');
const crypto = require('crypto');
const throttle = require('throttled-queue')(10, 1000);

/**
* base model
Expand All @@ -20,7 +21,7 @@ class base {
this._perPage = this.config ? this.config.get('_perPage') : 100;
this._parallel = this.config ? this.config.get('_parallel') : 4;
this._proxy = this.config && this.config.get('proxy') ? this.config.get('proxy') : undefined;
this._insecure = this.config && this.config.get('unsecure') ? this.config.get('unsecure') : false;
this._insecure = this.config && this.config.get('insecure') ? this.config.get('insecure') : false;
}

/**
Expand All @@ -35,7 +36,7 @@ class base {

data.private_token = this.token;

return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => throttle(() => {
request.post(`${this.url}${path}`, {
json: true,
body: data,
Expand All @@ -49,7 +50,7 @@ class base {
if (this.config.get('_createDump')) this.setDump(response, key);
resolve(response);
}).catch(e => reject(e));
});
}));
}

/**
Expand All @@ -66,7 +67,7 @@ class base {
path += (path.includes('?') ? '&' : '?') + `private_token=${this.token}`;
path += `&page=${page}&per_page=${perPage}`;

return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => throttle(() => {
request(`${this.url}${path}`, {
json: true,
insecure: this._insecure,
Expand All @@ -79,7 +80,7 @@ class base {
if (this.config.get('_createDump')) this.setDump(response, key);
resolve(response);
}).catch(e => reject(e));
});
}));
}

/**
Expand Down Expand Up @@ -190,4 +191,4 @@ class base {
}
}

module.exports = base;
module.exports = base;
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2429,6 +2429,11 @@ [email protected], text-encoding@^0.6.4:
version "0.6.4"
resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19"

throttled-queue@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/throttled-queue/-/throttled-queue-1.0.7.tgz#da7ed6702941993044a1c5fd2ac3a58582dd2977"
integrity sha512-/HT49S7m+NvdyJMoMRzIYlawKjeHn8jEc8TZaGmFi5IBu09hIiU/QoP1zcrB9X2qsVC11PgfRfqd8zEQs7PlEA==

throttleit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
Expand Down