{"id":31425119,"url":"https://github.com/icculus/migrate-trello-to-github","last_synced_at":"2025-09-30T04:56:05.604Z","repository":{"id":312758485,"uuid":"1048009079","full_name":"icculus/migrate-trello-to-github","owner":"icculus","description":"A script to migrate Trello boards to GitHub issues.","archived":false,"fork":false,"pushed_at":"2025-09-03T14:13:33.000Z","size":55,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-18T09:03:44.712Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/icculus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["icculus"],"patreon":"icculus"}},"created_at":"2025-08-31T18:03:36.000Z","updated_at":"2025-09-03T14:13:37.000Z","dependencies_parsed_at":"2025-09-01T21:25:03.715Z","dependency_job_id":"be0d1816-b79d-42dc-86d9-552b221b8c17","html_url":"https://github.com/icculus/migrate-trello-to-github","commit_stats":null,"previous_names":["icculus/migrate-trello-to-github"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/icculus/migrate-trello-to-github","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fmigrate-trello-to-github","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fmigrate-trello-to-github/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fmigrate-trello-to-github/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fmigrate-trello-to-github/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/icculus","download_url":"https://codeload.github.com/icculus/migrate-trello-to-github/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icculus%2Fmigrate-trello-to-github/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277632374,"owners_count":25850734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-30T02:00:09.208Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-30T04:56:03.953Z","updated_at":"2025-09-30T04:56:05.590Z","avatar_url":"https://github.com/icculus.png","language":"Perl","funding_links":["https://github.com/sponsors/icculus","https://patreon.com/icculus"],"categories":[],"sub_categories":[],"readme":"# migrate-trello-to-github\n\n## What is this?\n\nThis is a perl script to migrate a [Trello](https://trello.com/) board to\na [Github](https://github.com/) issue tracker.\n\nGitHub does not offer a way to fully manage their \"Project\" boards through\ntheir API, so this _only_ builds issues out of Trello cards.\n\nThis script expects that we're starting with a new repository. It can probably\nwork to migrate bugs into an existing repo, but it will want to overwrite\nyour README.md and add an \"attachments\" directory to the git repo. Do so at\nyour own risk!\n\nMost data will migrate from Trello: comments, checklists, attachments, covers,\netc.\n\nThis has only been tested on Linux, but probably works anywhere Perl and a\nfew extra Perl modules work.\n\n\n## Setup\n\nThis script does not need to be installed system-wide. However, it needs some\ncommon Perl modules installed:\n\n- Net::GitHub\n- LWP::Simple\n- URI::Encode\n- JSON\n\nUbuntu/Debian users can install these with:\n\n```bash\nsudo apt-get install libwww-perl libjson-pp-perl libnet-github-perl liburi-encode-perl\n```\n\nOther distros likely have similar packages, check your package manager. If all\nelse fails, you can try forcing the issue with CPAN:\n\n```bash\nsudo perl -MCPAN -e 'install Net::GitHub;'\n```\n\n(etc.)\n\n\nIf the script starts at all, you have all the modules you need, but you should\ngather some other important things.\n\nYou'll need a GitHub Personal Access Token. These are free and created through\nthe GitHub web interface.\n\nGo here: https://github.com/settings/tokens/new\n\nI checked all the boxes, which basically says \"something with this magic\npassword can do anything with my account\" but in practice you can trim most of\nthis out. Realistically, you might only need the \"repo\" checkboxes.\n\nClick \"Generate token\" and copy the string they show you somewhere. It won't be\nshown again. This string will allow the script to interact with GitHub on your\nbehalf.\n\nYou also need some pieces from Trello.\n\nFirst, you need the URL of the board to migrate. This is just the address\nin the web browser when you first load the board. It looks something like\n`https://trello.com/b/abc123xY/my-todo-list`.\n\nIf the board is private, you'll want to make it public while this script\ndownloads its data. As soon as that is complete you can make the board\nprivate again. The script will tell you when it is done downloading. If the\nscript has to run multiple times, it'll will still only have to do the\ndownload once, and will save the data between runs.\n\nIt is optional, but you should also get an access token from Trello. You can\nuse this script without one, but we can't migrate the full history for every\ncard without it. A trello export only lists the latest 1000 action on a given\nboard, but even a moderately-used board will have thousands, or tens of\nthousands, of actions...every time a card is moved, commented on, etc,\ngenerates a new action. Without the full action data, you'll still have the\nmost important card info (description, attachments, checklists) but older\npieces will be lost. If you have an access token for Trello, though, the\nscript can download the complete information and no history/comments will be\nlost.\n\nTo get an access token from Trello, got to https://trello.com/power-ups/admin/new\nand fill in the form. The name can be \"trello-to-github\" or whatever, \"Iframe\nconnector URL\" can be any valid URL; we don't use it. Click \"Create\". On the\nnext page, click \"API key\" and then \"Generate a new API key.\" On the next\npage, you'll want to copy the \"API key\" and \"Secret\" strings.\n\n\n## Run the script\n\nThe simplest form is this:\n\n```bash\n./migrate-trello-to-github.pl https://trello.com/b/abc123xY/my-todo-list MyGithubUsername NewGithubRepoName GITHUB_API_TOKEN state-directory\n```\n\nWhere `GITHUB_API_TOKEN` is the GitHub API token you generated,\nstate-directory is a temporary scratch directory that the script will create.\n\nThis will make a new GitHub repo at https://github.com/MyGithubUsername/NewGithubRepoName\nand import all the data from https://trello.com/b/abc123xY/my-todo-list. Some comments and other\nactivity from the Trello cards might be missing because we didn't provide a\nTrello API key in this example.\n\n\nOther options you can add to the script:\n\n- `--usermap=a:b`\n\n  Tell the script that when you see Trello username `a`, it maps to GitHub\n  username `b`. This is not required (we'll just use their full name from\n  Trello otherwise), but it might be useful. Specify this option once for\n  each username you want to map.\n\n- `--destroy-existing-repo`\n\n  This will **WITHOUT WARNING** destroy the existing repo and build it from\n  scratch. This cannot be undone! Any changes made to this repo outside of\n  this script will be gone permanently.\n\n- `--trello-api-key=STRING --trello-api-token=STRING`\n\n  Specify Trello API keys. These are the \"API key\" and \"Secret\" fields we\n  mentioned before.\n\n- `--no-rate-limit`\n\n  This script sleeps a little from time to time to try to avoid triggering\n  GitHub's rate limiting. If you have permission from GitHub to go\n  full-speed, or you don't have much data to upload, this will remove the\n  sleeps. If we hit a rate limit, the script can pick up where it left off\n  later, though, so you might want this if you plan to babysit the script,\n  too.\n\n- `--skip-card-activity`\n\n  Just upload the description, cover, attachments, and checklists for all\n  cards. Comments and other activity will be ignored. Cleaner, if the\n  history isn't useful to you.\n\n\n## Cleanup\n\nDone with this script?\n\nIf it didn't work out, you can delete the GitHub repo through their web\ninterface.\n\nYou can delete the state-directory now, if you want.\n\nYou can delete the GitHub API key now at https://github.com/settings/tokens\n\nIf you made a Trello API key, you can delete it now at\nhttps://trello.com/power-ups/admin\n\n\n\n## Questions? Problems?\n\nAsk me, or file a bug. Pull requests are always welcome!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficculus%2Fmigrate-trello-to-github","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ficculus%2Fmigrate-trello-to-github","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficculus%2Fmigrate-trello-to-github/lists"}