{"id":20389304,"url":"https://github.com/positiondev/skilltree","last_synced_at":"2026-04-16T17:02:49.097Z","repository":{"id":18856103,"uuid":"22072602","full_name":"positiondev/skilltree","owner":"positiondev","description":null,"archived":false,"fork":false,"pushed_at":"2014-10-14T19:18:56.000Z","size":9588,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-04T23:44:38.573Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/positiondev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-07-21T17:01:03.000Z","updated_at":"2015-04-18T15:14:53.000Z","dependencies_parsed_at":"2022-09-24T23:02:05.776Z","dependency_job_id":null,"html_url":"https://github.com/positiondev/skilltree","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/positiondev/skilltree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/positiondev%2Fskilltree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/positiondev%2Fskilltree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/positiondev%2Fskilltree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/positiondev%2Fskilltree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/positiondev","download_url":"https://codeload.github.com/positiondev/skilltree/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/positiondev%2Fskilltree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31895650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T11:36:10.202Z","status":"ssl_error","status_checked_at":"2026-04-16T11:36:09.652Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-11-15T03:17:15.006Z","updated_at":"2026-04-16T17:02:49.074Z","avatar_url":"https://github.com/positiondev.png","language":"Haskell","readme":"# Setup\n\nThe simplest way to work on SkillTree is via a virtual machine. These\ninstructions should work on Linux or Mac - I'm not sure how on\nWindows, but should be possible.\n\nFirst, install the following three packages, via whatever mechanism you have:\n\n- virtualbox (tested on 4.3.12)\n- vagrant (tested on 1.6.3)\n- ansible (tested on 1.6.6)\n- sshpass (for production provisioning only)\n\nNext, move into the directory of the SkillTree source and run the following command:\n\n    vagrant up\n\nIt seems to sometimes fail out the first time after it starts to run\nthe provisioner, so if you see that error, just run:\n\n    vagrant provision\n\nProvisioning is idempotent, so you can do it over and over and nothing\nwill change.\n\nAfter that completes, you will have a running virtual machine with all the needed\nlibraries and binaries. The only thing left to do is to configure the Makefile to\nuse Vagrant. Copy `.vagrantmode.example` to `.vagrantmode`\n\nNow run `make init` to configure the package, run `make dbup` to run\nall the database migrations, and run `make run` to build and start the\napplication. It will start the application on port `8000`, so once it\nstarts up, visit `localhost:8000` in a web browser to see the\napplication, and when you edit the source files or templates, it'll\nautomatically recompile.\n\n\n# Production\n\nTo set up a production deployment, first set the IP address of the\nserver (should be debian 7.5) in both `provisioning/inventory` and the\n`Makefile`. You should already have the VM set up as above (we use the\nVM to build production binaries. Not using the VM is not supported if\nyou want to deploy). First create the production config files. The production\ndatabase password is in the ansible vault. So first get the password.txt file\nby some means, put it in the provisioning folder, and open up the vault with\n\n    ansible-vault edit --vault-password-file=provisioning/password.txt provisioning/secrets.yml\n\nTake the database password and use it to create the prod.cfg file in\nsnaplets/persist and snaplets/postgresql-simple, modeling off of the\nprod-sample.cfg files.\n\nIf this is a new production server, run `make production-init`. It'll\nprompt you for the root password on the server (a few times). If the server\nhas already been set up, this step isn't needed.\n\nRun database migrations with `make dbup PRODUCTION=1`, and deploy the\napplication with `make deploy`. Whenever you want to deploy a new\nversion, just run `make deploy`. If there is an error on startup, the\nnew version will not be switched to, and you can debug it by looking\nat either the application logs (run `make production-log`) or the\nlogs for the managing process (run `make production-keter-log`).\n\n\n# Haskell on your host machine\n\nIf you want to also have haskell on your development machine (in\naddition to the VM), or set up development (not done yet), you can\nalso use ansible to do the same installs (right now only ghc and\ncabal). Run\n\n    ansible-playbook -i provisioning/inventory provisioning/native.yml\n\nFrom the project directory (or from anywhere else, changing the paths\nto inventory and native.yml to be correct).\n\n\n# Running tests\n\nWhen you set up the project, it'll download selenium and the chrome\ndriver. Provided you have PROJDIR/.cabal-sandbox/bin in your PATH,\n`make test` should set up and run the selenium tests, including\nstarting the server.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpositiondev%2Fskilltree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpositiondev%2Fskilltree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpositiondev%2Fskilltree/lists"}