{"id":13681341,"url":"https://github.com/kowainik/issue-wanted","last_synced_at":"2025-04-30T03:31:13.783Z","repository":{"id":81581570,"uuid":"135557306","full_name":"kowainik/issue-wanted","owner":"kowainik","description":"🏷 Web application to help beginners to start contributing into Haskell projects","archived":false,"fork":false,"pushed_at":"2020-11-06T17:49:02.000Z","size":136,"stargazers_count":59,"open_issues_count":20,"forks_count":11,"subscribers_count":12,"default_branch":"main","last_synced_at":"2024-08-02T13:32:08.668Z","etag":null,"topics":["backend","github-issues","gsoc-2019","haskell","three-layer-architecture","web-application"],"latest_commit_sha":null,"homepage":"https://kowainik.github.io/posts/gsoc2019","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kowainik.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"ko_fi":"kowainik","github":["vrom911"]}},"created_at":"2018-05-31T08:46:23.000Z","updated_at":"2023-10-22T12:56:54.000Z","dependencies_parsed_at":"2024-01-14T15:23:47.548Z","dependency_job_id":"353c740f-1b56-438f-98c3-ef1959d57c54","html_url":"https://github.com/kowainik/issue-wanted","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fissue-wanted","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fissue-wanted/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fissue-wanted/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fissue-wanted/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kowainik","download_url":"https://codeload.github.com/kowainik/issue-wanted/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224196811,"owners_count":17271896,"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","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":["backend","github-issues","gsoc-2019","haskell","three-layer-architecture","web-application"],"created_at":"2024-08-02T13:01:29.627Z","updated_at":"2024-11-12T00:31:46.602Z","avatar_url":"https://github.com/kowainik.png","language":"Haskell","funding_links":["https://ko-fi.com/kowainik","https://github.com/sponsors/vrom911"],"categories":["Haskell","Examples"],"sub_categories":["Monad Transformers"],"readme":"# Issue Wanted\n\n[![CircleCI](https://circleci.com/gh/kowainik/issue-wanted.svg?style=svg)](https://circleci.com/gh/kowainik/issue-wanted)\n[![Hackage](https://img.shields.io/hackage/v/issue-wanted.svg?logo=haskell)](https://hackage.haskell.org/package/issue-wanted)\n[![MPL-2.0 license](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](https://github.com/kowainik/issue-wanted/blob/master/LICENSE)\n\n`issue-wanted` is a web application focused on improving the open-source Haskell\ncommunity by centralizing GitHub issues across many Haskell repositories into a\nsingle location. The goals of `issue-wanted` are to make it easier for\nprogrammers of all skill levels to find Haskell projects to contribute to,\nincrease the number of contributions to open-source Haskell projects, and\nencourage more programmers to become a part of the Haskell community.\n\n## Architecture Description\n\nMain work on this project was done during Google Summer of Code 2019. For anyone\ninterested in the details of how `issue-wanted` was implemented and why certain\ndesign choices were made, check out these blog posts:\n\n* [GSoC 2019 - Building A Web Application with Haskell](https://rashadg1030.github.io/rashad-blog/6.html)\n* [Guide to Implementing Custom Monadic Effects in Issue-Wanted](https://rashadg1030.github.io/rashad-blog/7.html)\n* [GSoC 2019 - Final Evaluation](https://rashadg1030.github.io/rashad-blog/8.html)\n\n## Backend\n\n### Prerequisites (what you need to have locally)\n\nYou will need to have the following installed on your system in order to build and test `issue-wanted`. Click on the links to learn how to install each one:\n\n1. [ghc](https://www.haskell.org/ghcup/)\n2. [cabal](https://www.haskell.org/cabal/) or [stack](https://docs.haskellstack.org/en/stable/README/)\n3. [docker](https://docs.docker.com/v17.12/install/)\n4. `libpq-dev`: run the command `sudo apt install libpq-dev` to install.\n\nWith `docker` installed, open up a terminal (make sure your in the\n`issue-wanted` directory) and run the command `make postgres`. This will setup\nthe database for you and you should be ready to go!\n\nFollow the instructions under\n[`How to run server`](https://github.com/kowainik/issue-wanted/tree/rashadg1030/81-Document-Postgres-setup#how-to-run-server)\nand test the endpoints to see if everything is set up correctly.\n\nRefer to issue [#81](https://github.com/kowainik/issue-wanted/issues/81) if\nyou're still having trouble.\n\n### How to build\n\nTo build the project, open up a terminal in the base folder and run\n\n```shell\nstack build\n```\n\nor\n\n```shell\ncabal v2-build\n```\n\n### How to generate Elm types\n\nIf any types are changed one should update the generated to Elm types by running:\n\n```shell\nstack run generate-elm\n```\n\nor\n\n```shell\ncabal v2-run generate-elm\n```\n\n### How to run server\n\nFor testing the `issue-wanted` server follow these steps:\n\n1. Open up the terminal in the base folder and run `stack build`\n2. Run the command `stack exec issue-wanted`\n\nThe server will begin running at `http://localhost:8080/`.\n\n### API\n\nIssue-wanted endpoints available:\n\n| Endpoint                     | Description |\n|------------------------------|-------------|\n| `/issues`                    | Returns all issues. |\n| `/issues/:id`                | Returns a single issue with the corresponding id. |\n| `/issues?label=\u003clabel name\u003e` | Returns a list of issues with the corresponding label. |\n\n\u003e Tip: If you stop running the server and then try to restart it, you may need\n\u003e to run the command `fuser -n tcp -k 8080` to free the port.\n\n### How to run automatic tests locally\n\n1. In a separate terminal run `make postgres` (this command will run database in\n   a Docker container)\n2. In the first terminal run `stack test` or `cabal new-test`\n\n### How to deploy new Docker image for CI\n\nWhen `stack` snapshot is updated, you need to update `Dockerfile` accordingly\nand push new docker image to Docker Hub. This can only be done if you have\naccess to the account credentials.\n\nPerform the following commands:\n\n```\ndocker build . -t kowainik/haskell-ci\ndocker push kowainik/haskell-ci\n```\n\n## Frontend\n\nCurrently, frontend is implemented using [`Elm`](https://elm-lang.org/).\n\n### Prerequisites (what you need to have locally)\n\n* [`elm`](https://elm-lang.org/)\n* [`npm`](https://www.npmjs.com/)\n* [`create-elm-app`](https://github.com/halfzebra/create-elm-app): to install run `npm install -g create-elm-app@2.2.0`\n\n### How to run\n\n**NOTE:** All actions should be done in the `frontend` folder:\n\n```shell\ncd frontend/\n```\n\n#### First time\n\n* Get node modules: `npm install`\n* Proceed to Subsequent steps\n\n#### Subsequent\n\n* in one tab: `elm-app start`\n* in another tab: `npm run-script watch-css`\n\nFrontend will begin running at `http://localhost:3000/`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkowainik%2Fissue-wanted","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkowainik%2Fissue-wanted","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkowainik%2Fissue-wanted/lists"}