{"id":21228248,"url":"https://github.com/hexlet/hexlet-cv","last_synced_at":"2025-05-12T15:08:07.256Z","repository":{"id":35552588,"uuid":"198099921","full_name":"Hexlet/hexlet-cv","owner":"Hexlet","description":"Stackoverflow for Resume","archived":false,"fork":false,"pushed_at":"2024-04-12T07:42:49.000Z","size":4503,"stargazers_count":91,"open_issues_count":35,"forks_count":103,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-04-13T21:43:39.300Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"https://cv.hexlet.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hexlet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2019-07-21T20:03:39.000Z","updated_at":"2024-05-03T11:57:21.460Z","dependencies_parsed_at":"2024-02-12T08:20:50.983Z","dependency_job_id":"0255ac38-516e-49d5-af0c-b191b503aef6","html_url":"https://github.com/Hexlet/hexlet-cv","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/Hexlet%2Fhexlet-cv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hexlet%2Fhexlet-cv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hexlet%2Fhexlet-cv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hexlet%2Fhexlet-cv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hexlet","download_url":"https://codeload.github.com/Hexlet/hexlet-cv/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238059009,"owners_count":19409607,"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":["hacktoberfest"],"created_at":"2024-11-20T23:15:18.643Z","updated_at":"2025-02-10T05:10:44.869Z","avatar_url":"https://github.com/Hexlet.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hexlet CV\n\n[![Maintainability](https://api.codeclimate.com/v1/badges/ac489ba3a4c73baf89a9/maintainability)](https://codeclimate.com/github/Hexlet/hexlet-cv/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/ac489ba3a4c73baf89a9/test_coverage)](https://codeclimate.com/github/Hexlet/hexlet-cv/test_coverage)\n[![Main](https://github.com/Hexlet/hexlet-cv/actions/workflows/main.yml/badge.svg?branch=main\u0026event=push)](https://github.com/Hexlet/hexlet-cv/actions/workflows/main.yml)\n\n## About\nThe purpose of Hexlet CV is to provide a community platform where you get resume recommendations from community members and professional HR.\n\nInteractions on Hexlet CV are based on resumes and resume recommendations. On a particular resume, each community member provides only one recommendation.\n\nJoin the community, post resumes and leave recommendations for other members. Tell your colleagues and friends about the site!\n\nThe project uses Ruby on Rails.\n\nTasks can be discussed in the [Telegram community](https://t.me/hexletcommunity/12).\n\n## System requirements\n\n* Ruby \u003e= 3.3.0\n* Node.js \u003e= 19.0.0\n* SQLite3\n* [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli#download-and-install)\n\n## Setup\n\n```sh\nmake setup\n\n# or for Apple silicon machine if setup fails with unsupported arch\n\nmake setup-arm64\n\nmake test # run tests\nmake start # run server http://localhost:3000\n\nmake fixtures-load # sometimes, when fixtures were changed\n```\n\n## Setup in Docker\n\n```sh\nmake compose-setup # setup app\nmake app-test # run tests\nmake compose # run server http://localhost:3000\n\nmake app-ci-check # run ci\n```\n\n## Debug in Docker\n\n```sh\ndocker container ls # watch container\ndocker attach [container_id]\n\nor\n\nmake app-debug\n```\n\nand insert `debugger` in controller\n\n## Setup in Podman\n\nDependencies: podman, podman-compose\n\nIf you have installed podman-docker, you can use, directly, `make compose-*` commands (except `make app-debug`)\n\nOr explicitly use the `make podman-compose-*` commands.\n\n```sh\nmake podman-compose-setup # setup app\nmake podman-compose-app-test # run tests\nmake podman-compose # run server http://localhost:3000\n\nmake podman-compose-app-ci-check\n```\n\n## Debug in Podman\n\n```sh\npodman container ls # watch container\npodman attach [container_id]\n\nor\n\nmake podman-compose-app-debug\n\n```\n\nand insert `debugger` in controller\n\n## Deploy\n\nAdd database:\n\n```sh\nheroku addons:create heroku-postgresql:hobby-dev\n```\n\nPrepare environment variables:\n\n```sh\nheroku config:set SECRET_KEY_BASE=$(rake secret)\nheroku config:set HOST=$(heroku info -s | grep web_url | cut -d= -f2) # https://cv.hexlet.io for production\nheroku config:set RACK_ENV=production\nheroku config:set RAILS_ENV=production\nheroku config:set RAILS_LOG_TO_STDOUT=enabled\nheroku config:set EMAIL_FROM=support@hexlet.io\n```\n\n## Deploy to render.com\n\u003cdetails\u003e\u003csummary\u003eINFO IS HERE\u003c/summary\u003e\n\n* Go to https://dashboard.render.com\n* Add New PostgreSQL with YOUR_CUSTOM_NAME_PG and select Region\n* Add New Web Service with link to your repo clone\\\n  select:\n    * YOUR_CUSTOM_NAME_CV\n    * same Region\n    * Runtime: Ruby\n    * Build Command - `./bin/render-build.sh`\n    * Start Command - `./bin/render-start.sh` or `bundle exec puma -C config/puma.rb`\n* Go to YOUR_CUSTOM_NAME_PG PostgreSQL -\u003e Info and copy `Internal Database URL`\n\n* Go to YOUR_CUSTOM_NAME_CV app -\u003e Environment\n    * Environment Variables, by one\\\n      or\n    * Secret Files .env with your settings, based on .env.example and add this variables:\n      * HOST\n        ```shell\n        echo \"HOST=your-app-name.onrender.com\" \u003e\u003e .env\n        ```\n      * EMAIL_SPECIAL_USER\n        ```shell\n        echo \"EMAIL_SPECIAL_USER=any_existing_email@in_database\" \u003e\u003e .env\n        ```\n      * DATABASE_URL\n        ```shell\n        echo \"DATABASE_URL=Internal Database URL\" \u003e\u003e .env\n        ```\n      * RACK_ENV and RAILS_ENV\n        ```shell\n        echo \"RACK_ENV=staging\" \u003e\u003e .env\n        echo \"RAILS_ENV=staging\" \u003e\u003e .env\n        ```\n      * RENDER_LOAD_FIXTURES to load fixtures\n        ```shell\n        echo \"RENDER_LOAD_FIXTURES=1\" \u003e\u003e .env\n        ```\n      Generate new master.key if the original is missing\n      * RAILS_MASTER_KEY\n        ```shell\n        export RAILS_MASTER_KEY=\"$(ruby -r securerandom -e 'print SecureRandom.hex(16)')\"\n        echo $RAILS_MASTER_KEY\n        printf $RAILS_MASTER_KEY \u003e config/master.key\n        echo \"RAILS_MASTER_KEY=$RAILS_MASTER_KEY\" \u003e\u003e .env\n        rm config/credentials.yml.enc\n        EDITOR=vim bin/rails credentials:edit # to update config/credentials.yml.enc\n                                              # press :wq+Enter\n        ```\n      * CREDENTIALS_ENC\n        ```shell\n        echo \"CREDENTIALS_ENC=$(cat config/credentials.yml.enc)\" \u003e\u003e .env\n        ```\n\n* You can deploy app\n\u003c/details\u003e\n\n---\n\nConfigure reCAPTCHA for production:\n\n* Follow the link [reCAPTCHA](https://www.google.com/recaptcha)\n* Log into Admin Console with your credentials or create a new Google Account in case you don't have one\n* At Admin Console register a new site as shown in example below\n\nConfigure reCAPTCHA for development:\n\n* add test key to .ENV file if they were not generated:\n\n```\n# test key for recapcha https://github.com/MTG/freesound/issues/879\nRECAPTCHA_SITE_KEY=6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI\nRECAPTCHA_SECRET_KEY=6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe\n```\n\n```sh\nLabel: \u003capp_name\u003e.herokuapp.com\nType reCAPTCHA: reCAPTCHA v2 (Checkbox \"I'm not a robot\")\nDomains: \u003capp_name\u003e.herokuapp.com (localhost or/and 0.0.0.0 for development env)\n```\n* Accept terms of use and submit\n* Add generated reCAPTCHA `SITE KEY` and `SECRET KEY` to environment variables in production\n* To use reCAPTCHA in development simply copy `SITE KEY` and `SECRET KEY` to your .env file\n---\n\n[![Hexlet Ltd. logo](https://raw.githubusercontent.com/Hexlet/assets/master/images/hexlet_logo128.png)](https://hexlet.io/pages/about?utm_source=github\u0026utm_medium=link\u0026utm_campaign=hexlet-cv)\n\nThis repository is created and maintained by the team and the community of Hexlet, an educational project. [Read more about Hexlet](https://hexlet.io/pages/about?utm_source=github\u0026utm_medium=link\u0026utm_campaign=hexlet-cv).\n\nSee most active contributors on [hexlet-friends](https://friends.hexlet.io/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexlet%2Fhexlet-cv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhexlet%2Fhexlet-cv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexlet%2Fhexlet-cv/lists"}