{"id":13405751,"url":"https://github.com/yeti-switch/yeti-web","last_synced_at":"2026-05-24T00:05:52.469Z","repository":{"id":18262318,"uuid":"83711165","full_name":"yeti-switch/yeti-web","owner":"yeti-switch","description":"Yeti admin interface. Opensource SIP SBC with billing.","archived":false,"fork":false,"pushed_at":"2026-03-10T16:34:17.000Z","size":247868,"stargazers_count":62,"open_issues_count":48,"forks_count":38,"subscribers_count":12,"default_branch":"master","last_synced_at":"2026-03-10T18:48:31.798Z","etag":null,"topics":["billing","sbc","sip","softswitch","telecommunications","voip","voip-billing"],"latest_commit_sha":null,"homepage":"https://yeti-switch.org","language":"Ruby","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/yeti-switch.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,"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}},"created_at":"2017-03-02T18:27:21.000Z","updated_at":"2026-03-10T16:34:03.000Z","dependencies_parsed_at":"2026-02-23T00:02:05.651Z","dependency_job_id":null,"html_url":"https://github.com/yeti-switch/yeti-web","commit_stats":null,"previous_names":[],"tags_count":375,"template":false,"template_full_name":null,"purl":"pkg:github/yeti-switch/yeti-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeti-switch%2Fyeti-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeti-switch%2Fyeti-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeti-switch%2Fyeti-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeti-switch%2Fyeti-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yeti-switch","download_url":"https://codeload.github.com/yeti-switch/yeti-web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeti-switch%2Fyeti-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30545059,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-15T14:38:58.992Z","status":"ssl_error","status_checked_at":"2026-03-15T14:38:29.659Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["billing","sbc","sip","softswitch","telecommunications","voip","voip-billing"],"created_at":"2024-07-30T19:02:10.408Z","updated_at":"2026-03-15T15:02:38.009Z","avatar_url":"https://github.com/yeti-switch.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"# Welcome to YETI\n![Tests](https://github.com/yeti-switch/yeti-web/workflows/Tests/badge.svg?branch=master)\n![Coverage Status](https://img.shields.io/badge/Code%20Coverage-87%25-success?style=flat)\n[![Made in Ukraine](https://img.shields.io/badge/made_in-ukraine-ffd700.svg?labelColor=0057b7)](https://stand-with-ukraine.pp.ua)\n\n\n[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct-team.svg)](https://stand-with-ukraine.pp.ua)\n\n\n# Contributing, Development setup\n\n## Ruby\n\nYou have to use Ruby version 3.3.9 with installed bundler.\n\n## Postgresql\n\nIt is strongly recommended to use PostgreSQL version 16.\nThe easiest way to install it - is to use Debian Linux and follow official PostgreSQL instruction\nhttps://www.postgresql.org/download/linux/debian/\n\nYou need to install:\n\n```sh\ncurl https://pkg.yeti-switch.org/key.gpg | sudo apt-key add -\ncurl https://www.postgresql.org/media/keys/ACCC4CF8.asc\t| sudo apt-key add -\nsudo add-apt-repository \"deb http://pkg.yeti-switch.org/debian/buster unstable main\"\nsudo add-apt-repository \"deb http://deb.debian.org/debian buster main buster non-free\"\nsudo add-apt-repository \"deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main\"\nsudo apt-get install postgresql-16 postgresql-contrib-13 postgresql-16-prefix postgresql-16-pgq3 postgresql-16-pgq-ext postgresql-16-yeti postgresql-16-pllua\nsudo apt-get install -t buster-pgdg libpq-dev\n```\nIn addition you need to compile or install from .deb package Yeti PostgreSQL extension `postgresql-16-yeti` https://github.com/yeti-switch/yeti-pg-ext\n\n## Preparing yeti-web application\n\nFork and clone yeti-web repository and run:\n\n```sh\nbundle install\n```\n\nThen create `config/database.yml`, example is `config/database.yml.development`. Notice this project uses two databases main \"yeti\" and second database \"cdr\"\n\nThen create `config/yeti_web.yml`, example is `config/yeti_web.yml.development`.\nThen create `config/secrets.yml`, example is `config/secrets.yml.distr`.\n\nTo disable the creation of new versions via paper_trail for some model please fill the array under key `versioning_disable_for_models` in the `config/yeti_web.yml`\n\nСreate `config/policy_roles.yml`, example is `config/policy_roles.yml.distr` or disable policy feature by changing following lines in `config/yeti_web.yml`:\n\n```yaml\nrole_policy:\n  when_no_config: allow\n  when_no_policy_class: allow\n```\n\nAnd run command to create development database:\n\n```sh\nRAILS_ENV=development bundle exec rake db:create db:schema:load db:migrate db:seed\nRAILS_ENV=development bundle exec rake custom_seeds[network_prefixes]\n```\n\nYou can skip `custom_seeds[network_prefixes]` is you want to use your own network prefixes.\n\nThen start rails server `bundle exec rails s` and login to http://localhost:3000/ with\nlogin `admin` and password `111111`\n\nThen prepare test database(do not use db:test:prepare).\n\n```sh\nRAILS_ENV=test bundle exec rake db:drop db:create db:schema:load db:migrate db:seed\nRAILS_ENV=test bundle exec rake custom_seeds[network_prefixes]\n```\n\nThis project has CDR-database, configured as cdr\nsee https://guides.rubyonrails.org/active_record_multiple_databases.html\nAnd all commands should be run explicitly by calling \"db:*:cdr\" commands.\n\nNOTICE: Test DB needs seeds, actually only PGQ seed.\n\nAnd run tests:\n\n```sh\nbundle exec rspec\n```\n\n## Migrations\n\nWhen you run several migrations in a row, you may wish to stop at some point. In this case you should add `stop_step` method to the migration:\n\n```ruby\n# example /db/migrate/20171105085529_one.rb\ndef change\n  # do something\nend\n\ndef stop_step\n  true\nend\n```\n\nIn this case all migrations after this one will no be performed. To continue migration process you should run `rake db:migrate` command again.\n\nIf you do not want to migrate with stops, use env-variable IGNORE_STOPS=true\n\n```sh\nIGNORE_STOPS=true bundle exec rake db:migrate\n```\n\n## Migrations that insert rows into yeti database\n\n```bash\nRAILS_ENV=test bundle exec rake db:create db:schema:load db:seed\nRAILS_ENV=test bundle exec rake custom_seeds[network_prefixes]\n# create migration inside db/migrations\nRAILS_ENV=test bundle exec rake db:migrate\n# SCHEMA_NAME - schema of table into which you've inserted row(s)\n# YETI_TEST_DB_NAME - yeti test database name on local machine\npg_dump --column-inserts --data-only --schema=SCHEMA_NAME --file=db/seeds/main/SCHEMA_NAME.sql YETI_TEST_DB_NAME\n```\n\nIf you want to use network prefixes from yaml you need to exclude them from db/seeds/main/sys.sql\n```bash\npg_dump --column-inserts --data-only --schema=sys --file=db/seeds/main/sys.sql --exclude-table=countries --exclude-table=networks --exclude-table=network_prefixes --exclude-table=network_types YETI_TEST_DB_NAME\n```\n\n## Dump network prefixes\n\n```ruby\nnt_keys = %w[id name uuid]\nnetwork_types = System::NetworkType.order(id: :asc).pluck(*nt_keys).map { |values| Hash[nt_keys.zip(values)] }\nFile.write('db/network_types.yml', network_types.to_yaml)\nnetwork_keys = %w[id name uuid type_id]\nnetworks = System::Network.order(id: :asc).pluck(*network_keys).map { |values| Hash[network_keys.zip(values)] }\nFile.write('db/networks.yml', networks.to_yaml)\ncountry_keys = %w[id iso2 name]\ncountries = System::Country.order(id: :asc).pluck(*country_keys).map { |values| Hash[country_keys.zip(values)] }\nFile.write('db/countries.yml', countries.to_yaml)\nnp_keys = %w[id number_max_length number_min_length prefix uuid country_id network_id]\nnetwork_prefixes = System::NetworkPrefix.order(id: :asc).pluck(*np_keys).map { |values| Hash[np_keys.zip(values)] }\nFile.write('db/network_prefixes.yml', network_prefixes.to_yaml)\n```\n\n## Use Docker Postgres for development\n\nFor development purpouse it is convinient to use PostgreSQL from Docker image. Here is the instruction how to set it up-and-running:\n\n* Install Docker(Ubuntu example)\n\n  [Install Docker on Ubuntu 18.10](https://www.thecodecampus.de/blog/install-docker-on-ubuntu-18-10/)\n\n* Run following commands in terminal from `yeti-web` projects directory\n\n  ```\n  sudo docker build -t yeti_postgres -f ci/pg13.Dockerfile .\n  ```\n\n* Start the Postgres Server using docker image, with remapped port to 3010 and volume \"yetiPgData\" to persist data after docker container stops:\n\n  ```\n  sudo docker run -p 3010:5432 --volume yetiPgData:/var/lib/postgresql yeti_postgres\n  ```\n\n* Update `config/database.yml` with\n\n  ```yml\n  username: postgres\n  password:\n  port: 3010\n  ```\n\n* Initialize database with instructions described in [Contributing, Development setup](#contributing-development-setup) section(db:create, db:schema:load, etc.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeti-switch%2Fyeti-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyeti-switch%2Fyeti-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeti-switch%2Fyeti-web/lists"}