From 23e9b0e31dce7c290bba8d43322e214e7c2584fe Mon Sep 17 00:00:00 2001 From: varac Date: Sat, 27 Aug 2016 21:15:34 +0200 Subject: Gitlab merge reqs --- Gemfile.lock | 8 ++- dashboards/dashboard.erb | 16 ++++-- dashboards/default.erb | 2 +- jobs/gitlab_merge_requests.rb | 36 ++++++++++++ smashing.gemspec | 1 + .../gitlab_merge_requests.coffee | 9 +++ .../gitlab_merge_requests.html | 18 ++++++ .../gitlab_merge_requests.scss | 67 ++++++++++++++++++++++ 8 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 jobs/gitlab_merge_requests.rb create mode 100644 widgets/gitlab_merge_requests/gitlab_merge_requests.coffee create mode 100644 widgets/gitlab_merge_requests/gitlab_merge_requests.html create mode 100644 widgets/gitlab_merge_requests/gitlab_merge_requests.scss diff --git a/Gemfile.lock b/Gemfile.lock index fecabb2..fc509cd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,6 +5,7 @@ PATH coffee-script (~> 2.2.0) crack execjs (~> 2.0.2) + gitlab nagiosharder rack (~> 1.5.4) rufus-scheduler (~> 2.0.24) @@ -38,15 +39,20 @@ GEM eventmachine (1.2.0.1) execjs (2.0.2) fakeweb (1.3.0) + gitlab (3.7.0) + httparty (~> 0.13.0) + terminal-table haml (4.0.7) tilt hashie (1.2.0) hike (1.2.3) http-cookie (1.0.2) domain_name (~> 0.5) - httparty (0.14.0) + httparty (0.13.7) + json (~> 1.8) multi_xml (>= 0.5.2) i18n (0.7.0) + json (1.8.3) metaclass (0.0.4) mime-types (3.1) mime-types-data (~> 3.2015) diff --git a/dashboards/dashboard.erb b/dashboards/dashboard.erb index 7d187ea..35ae341 100644 --- a/dashboards/dashboard.erb +++ b/dashboards/dashboard.erb @@ -1,21 +1,25 @@ -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • + +
  • +
    +
  • diff --git a/dashboards/default.erb b/dashboards/default.erb index d5441b8..86110c0 100644 --- a/dashboards/default.erb +++ b/dashboards/default.erb @@ -3,7 +3,7 @@ $(function() { // These settings override the defaults set in application.coffee. You can do this on a per dashboard basis. Dashing.widget_margins = [2, 2] Dashing.widget_base_dimensions = [235, 295] - Dashing.numColumns = 6 + Dashing.numColumns = 8 }); diff --git a/jobs/gitlab_merge_requests.rb b/jobs/gitlab_merge_requests.rb new file mode 100644 index 0000000..f39caf9 --- /dev/null +++ b/jobs/gitlab_merge_requests.rb @@ -0,0 +1,36 @@ +require 'gitlab' +require 'date' + +# TODO: Move config to yaml +my_group_path = 'leap' +Gitlab.configure do |config| + # API endpoint URL, default + config.endpoint = ENV['GITLAB_ENDPOINT'] + + # User's private token or OAuth2 access token + config.private_token = ENV['GITLAB_TOKEN'] +end + +pr_widget_data_id = 'gitlab-merge-requests' +SCHEDULER.every '10m', :first_in => 0 do |job| + my_group = Gitlab.groups(:search => my_group_path).find do |group| + group.path == my_group_path + end + projects = Gitlab.group(my_group.id).projects.map do |proj| + { :id => proj['id'], :name => proj['name'] } + end + + open_merge_requests = projects.inject([]) { |merges, proj| + Gitlab.merge_requests(proj[:id], :state => 'opened').each do |request| + puts proj[:name] + ': ' + request.title + merges.push({ + title: request.title, + repo: proj[:name], + updated_at: DateTime.parse(request.updated_at).strftime("%b %-d %Y, %l:%m %p"), + creator: "@" + request.author.username + }) + end + merges + } + send_event(pr_widget_data_id, { header: "Open Merge Requests", merges: open_merge_requests }) +end diff --git a/smashing.gemspec b/smashing.gemspec index dba7c38..d662f8c 100644 --- a/smashing.gemspec +++ b/smashing.gemspec @@ -29,6 +29,7 @@ Gem::Specification.new do |s| # additional deps s.add_dependency('crack') s.add_dependency('nagiosharder') + s.add_dependency('gitlab') s.add_development_dependency('rake', '~> 10.1.0') diff --git a/widgets/gitlab_merge_requests/gitlab_merge_requests.coffee b/widgets/gitlab_merge_requests/gitlab_merge_requests.coffee new file mode 100644 index 0000000..e68c3f6 --- /dev/null +++ b/widgets/gitlab_merge_requests/gitlab_merge_requests.coffee @@ -0,0 +1,9 @@ +class Dashing.GitlabMergeRequests extends Dashing.Widget + + ready: -> + # This is fired when the widget is done being rendered + + onData: (data) -> + # Handle incoming data + # You can access the html node of this widget with `@node` + # Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in. \ No newline at end of file diff --git a/widgets/gitlab_merge_requests/gitlab_merge_requests.html b/widgets/gitlab_merge_requests/gitlab_merge_requests.html new file mode 100644 index 0000000..396da97 --- /dev/null +++ b/widgets/gitlab_merge_requests/gitlab_merge_requests.html @@ -0,0 +1,18 @@ +

    GitLab

    +

    + + + +

    diff --git a/widgets/gitlab_merge_requests/gitlab_merge_requests.scss b/widgets/gitlab_merge_requests/gitlab_merge_requests.scss new file mode 100644 index 0000000..d3c51f5 --- /dev/null +++ b/widgets/gitlab_merge_requests/gitlab_merge_requests.scss @@ -0,0 +1,67 @@ +// ---------------------------------------------------------------------------- +// Sass declarations +// ---------------------------------------------------------------------------- +$background-color: teal; + +$heading-color: rgba(255, 255, 255, 0.7); +$merge-title-color: rgba(255, 255, 255, 1.0); +$merge-info-color: rgba(255, 255, 255, 1.0); + +// ---------------------------------------------------------------------------- +// Widget-gitlab-merge-requests styles +// ---------------------------------------------------------------------------- +.widget-gitlab-merge-requests { + + background-color: $background-color; + vertical-align: top !important; + + .header { + margin-bottom: 0; + font-size: xx-large; + color: $heading-color; + } + + .sub-header { + color: $heading-color; + font-size: large; + margin-bottom: 1vh; + } + + .merge { + margin-bottom: 2vh; + } + + .merge-title { + font-size: medium; + font-weight: bold; + color: $merge-title-color; + } + + .merge-info { + font-size: small; + font-style: italic; + color: $merge-info-color; + } + + .merge-info div { + float:left; + } + + .list { + list-style: none; + } + + .updated-at { + color: rgba(0, 0, 0, 0.3); + } + + ol, ul { + margin: 0 15px; + text-align: left; + } + + ol { + list-style-position: inside; + } + +} -- cgit v1.2.3