Skip to content

Instantly share code, notes, and snippets.

@mipearson
Created January 4, 2015 10:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mipearson/bead74376e8636e23676 to your computer and use it in GitHub Desktop.
Save mipearson/bead74376e8636e23676 to your computer and use it in GitHub Desktop.
trello2github
#!/usr/bin/env ruby
# Copyright (c) 2015 The Exchange Group Pty Ltd
# Code licensed under http://opensource.org/licenses/MIT
require 'bundler/setup'
require 'octokit'
require 'trello'
require 'pry'
TRELLO_API_KEY = ''
TRELLO_OAUTH_TOKEN = ""
TRELLO_BOARD_ID = ''
GITHUB_REPO = 'exchangegroup/...'
GITHUB_USERNAME = ''
GITHUB_PASSWORD = ''
CLOSED_LISTS = %w{Complete}
MILESTONE_MAPPING = {
'some trello label' => 1
}
LABEL_MAPPING = {
'some trello label' => 'some github label'
}
Octokit.configure do |c|
c.login = GITHUB_USERNAME
c.password = GITHUB_PASSWORD
end
Trello.configure do |c|
c.developer_public_key = TRELLO_API_KEY
c.member_token = TRELLO_OAUTH_TOKEN
end
# binding.pry
def main
board = Trello::Board.find(TRELLO_BOARD_ID)
board.lists.each do |list|
puts list.name
puts "----"
list.cards.each do |card|
migrate_card(card)
end
puts "\n\n"
end
end
def migrate_card card
name = card.name
desc = card.desc
labels = card.labels.map(&:name)
check_items = card.checklists.first.try(:check_items)
print "Card: #{card.name}"
iss = Octokit.create_issue(
GITHUB_REPO,
name,
issue_body(desc, check_items),
milestone: convert_milestone(labels),
labels: convert_labels(labels),
)
if CLOSED_LISTS.include?(card.list.name)
Octokit.close_issue(GITHUB_REPO, iss.number)
end
puts ": #{iss.id}"
sleep 1 # GH rate limiting
end
def issue_body desc, check_items
body = desc
if !check_items.nil?
body << "\n"
body << "## TODO\n"
body << "\n"
check_items.each do |item|
body << ' - '
body << (item['state'] == 'incomplete' ? '[ ] ' : '[x] ')
body << item['name']
body << "\n"
end
end
body
end
def convert_milestone(labels)
labels.each do |label|
if MILESTONE_MAPPING[label]
return MILESTONE_MAPPING[label]
end
end
nil
end
def convert_labels(labels)
labels.map { |i| LABEL_MAPPING[i] }.compact
end
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment