{"id":45344188,"url":"https://github.com/gastonschabas/rumble-on-scala","last_synced_at":"2026-02-21T11:05:12.974Z","repository":{"id":38028863,"uuid":"273998741","full_name":"gastonschabas/rumble-on-scala","owner":"gastonschabas","description":"trying out things in a scala project","archived":false,"fork":false,"pushed_at":"2026-02-07T09:28:45.000Z","size":627,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-07T18:56:10.477Z","etag":null,"topics":["ci-cd","github-actions","integration-testing","play-framework","scala","scalatest","sonarcloud","testcontainers-scala","workflows"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gastonschabas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-06-21T23:23:15.000Z","updated_at":"2026-02-07T09:28:48.000Z","dependencies_parsed_at":"2023-09-25T00:44:25.062Z","dependency_job_id":"9559e4a8-17fe-4701-a002-86651f32609d","html_url":"https://github.com/gastonschabas/rumble-on-scala","commit_stats":null,"previous_names":[],"tags_count":323,"template":false,"template_full_name":null,"purl":"pkg:github/gastonschabas/rumble-on-scala","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gastonschabas%2Frumble-on-scala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gastonschabas%2Frumble-on-scala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gastonschabas%2Frumble-on-scala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gastonschabas%2Frumble-on-scala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gastonschabas","download_url":"https://codeload.github.com/gastonschabas/rumble-on-scala/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gastonschabas%2Frumble-on-scala/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29679083,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T09:33:50.764Z","status":"ssl_error","status_checked_at":"2026-02-21T09:33:19.949Z","response_time":107,"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":["ci-cd","github-actions","integration-testing","play-framework","scala","scalatest","sonarcloud","testcontainers-scala","workflows"],"created_at":"2026-02-21T11:05:12.306Z","updated_at":"2026-02-21T11:05:12.966Z","avatar_url":"https://github.com/gastonschabas.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"Rumble On Scala\n===============\n\njust a project to experiment with different things around scala ecosystem and other useful tools to build a project.\n\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=gastonschabas_rumble-on-scala\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=gastonschabas_rumble-on-scala)\n[![Continious Delivery](https://github.com/gastonschabas/rumble-on-scala/workflows/Continious%20Delivery/badge.svg)](https://github.com/gastonschabas/rumble-on-scala/actions?query=workflow%3A%22Continious+Delivery%22)\n[![Create Release](https://github.com/gastonschabas/rumble-on-scala/workflows/Create%20Release/badge.svg)](https://github.com/gastonschabas/rumble-on-scala/actions?query=workflow%3A%22Create+Release%22)\n[![Latest Release By Date](https://img.shields.io/github/v/release/gastonschabas/rumble-on-scala)]()\n[![Scala Steward badge](https://img.shields.io/badge/Scala_Steward-helping-blue.svg?style=flat\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://scala-steward.org)\n[![Docker Pulls](https://img.shields.io/docker/pulls/gastonschabas/rumble-on-scala)](https://hub.docker.com/repository/docker/gastonschabas/rumble-on-scala)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/bf145192f50741ef86d798c0b224beea)](https://app.codacy.com/gh/gastonschabas/rumble-on-scala?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=gastonschabas/rumble-on-scala\u0026utm_campaign=Badge_Grade)\n\n## Table of contents\n\n- [Technology Stack Used](#technology-stack-used)\n- [Topics Experimented](#topics-experimented)\n  - [Unit Test](#unit-test)\n  - [Integration Test](#integration-test)\n  - [Static code analyser](#static-code-analyser)\n  - [CI/CD](#cicd)\n  - [Build \u0026 Publish Local Docker Image](#build--publish-local-docker-image)\n- [Run in local environment](#run-in-local-environment)\n  - [Using docker-compose](#using-docker-compose)\n  - [Start app and db using docker](#start-app-and-db-using-docker)\n    - [PostgreSQL Container](#postgresql-container)\n    - [API Container](#api-container)\n- [API Spec](#api-spec)\n  - [/v0/hello](#v0hello)\n\n## Technology Stack Used\n\n- **![Scala Icon](https://www.scala-lang.org/resources/favicon-16x16.png) [Scala](https://www.scala-lang.org/)**: The\nScala Programming Language combines object-oriented and functional programming in one concise, high-level language.\nScala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build\nhigh-performance systems with easy access to huge ecosystems of libraries.\n\n- **\u003cimg src=\"https://www.playframework.com/favicon.ico\" width=\"16\" height=\"16\" /\u003e\n[Play Framework](https://www.playframework.com/)**: Play Framework makes it easy to build web applications with Java \u0026\nScala. Play is based on a lightweight, stateless, web-friendly architecture. Built on Akka, Play provides predictable\nand minimal resource consumption (CPU, memory, threads) for highly-scalable applications.\n\n- **![Slick Icon](http://scala-slick.org/doc/3.3.3/favicon.ico) [Slick](https://scala-slick.org/)**: Slick (\"Scala\nLanguage-Integrated Connection Kit\") is Lightbend’s Functional Relational Mapping (FRM) library for Scala that makes it\neasy to work with relational databases. It allows you to work with stored data almost as if you were using Scala\ncollections while at the same time giving you full control over when database access happens and which data is\ntransferred. You can also use SQL directly. Execution of database actions is done asynchronously, making Slick a perfect\nfit for your reactive applications based on Play and Akka.\n\n- **[Scala Test](https://www.scalatest.org/)**: ScalaTest is designed to increaste your team's productivity through\nsimple, clear tests and executable specifications that improve both code and communication.\n\n- **\u003cimg src=\"https://www.testcontainers.org/favicon.ico\" width=\"16\" height=\"16\" /\u003e\n[Testcontainers](https://www.testcontainers.org/)**: Testcontainers is a Java library that supports JUnit tests,\nproviding lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in\na Docker container.\n\n- **[sbt-native-packager](https://sbt-native-packager.readthedocs.io/en/stable/index.html)**: SBT native packager lets\nyou build application packages in native formats and offers different archetypes for common configurations, such as\nsimple Java apps or server applications.\n\n- **[random-data-generator](https://github.com/DanielaSfregola/random-data-generator)**: A library to generate random\ndata for test purposes, using ScalaCheck and scalacheck-shapeless.\n\n## Topics Experimented\n\n### Unit Test\n- **[ScalaTest](https://www.scalatest.org/user_guide)**: is designed to increase your team's productivity through\nsimple, clear tests and executable specifications that improve both code and communication.\n\n### Integration Test\n- **[testcontainers-scala](https://github.com/testcontainers/testcontainers-scala)**: Scala wrapper for [testcontainers-java](https://github.com/testcontainers/testcontainers-java) that allows using docker containers for functional/integration/unit testing.\n\n### Static code analyser \n- **[ScalaFmt](https://scalameta.org/scalafmt/)**: Formatter tool that can check is your code is well formatted,\nalso you can use it to auto format your code instead of just checking.\n  \n- **[Wart Remover](https://www.wartremover.org/)**: WartRemover takes the pain out of writing scala by removing some of\nthe language’s nastier features. Its main goal is to help you write safe and correct software without having to\nconstantly double-check yourself.\n\n- **[Scalastyle](http://www.scalastyle.org/)**: Scalastyle examines your Scala code and indicates potential problems\nwith it. If you have come across Checkstyle for Java, then you’ll have a good idea what scalastyle is. Except that\nit’s for Scala obviously.\n\n- **[Sonarcloud](https://sonarcloud.io/documentation)**: SonarCloud is a cloud-based code analysis service designed to\ndetect code quality issues in 25 different programming languages, continuously ensuring the maintainability,\nreliability and security of your code.\nUploaded reports can be found [here](https://sonarcloud.io/dashboard?id=gastonschabas_rumble-on-scala)\n\n### CI/CD \n- **[Github Action](https://docs.github.com/en/actions)**: Automate, customize, and execute your software development\nworkflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job\nyou'd like, including CI/CD, and combine actions in a completely customized workflow.\n\n  - Workflows:\n    - [Continuous Integration](.github/workflows/ci.yml): will be triggered when a PR is opened against master. Unit\n    tests, Integration tests and static code analyser will be executed, and the generated reports will be sent to\n    sonarcloud. \n    - [Continuous Delivery](.github/workflows/cd.yml): it will be triggered each time new code is pushed to master.\n    Unit tests, Integration tests and static code analyser will be executed, and the generated reports will be sent to\n    sonarcloud. Once all the steps mentioned before were executed, it will bump the project version and publish a tag.\n    - [Create Release](.github/workflows/realese.yml): each time a tag is published a docker image is publish to the\n      following docker hub repo https://hub.docker.com/repository/docker/gastonschabas/rumble-on-scala, which means the\n      image can be pulled to be executed in an environment that can run docker containers.\n    - [Scala Steward](https://scala-steward.org): Scala Steward is a bot that helps you keep scala library\n    dependencies and sbt plugins up-to-date. This workflow is scheduled to be triggered each Saturday at 9AM. \n\n### Build \u0026 Publish Local Docker Image\n[sbt-native-packager](https://sbt-native-packager.readthedocs.io/en/stable/index.html) have a couple of tasks and one of\nthem is to build and publish a local docker image. This can be done running the following command\n`sbt docker:publishLocal`.\n\n## Run in local environment\n\n### Using docker-compose\nBefore start the app and db using `docker-compose` command, a Dockerfile must be generated using `sbt docker:stage`.\nWith the following command the app and db can be started:\n\n```shell\ndocker-compose --env-file .env up -d\n```\n\n### Start app and db using docker\n\n#### PostgreSQL Container\nA PostgreSQL database must be running to start the app. With the following command, a docker container with the\nPostgreSQL database can be started:\n\n```shell script\ndocker run --name rumble-on-scala-postgres \\\n            -e POSTGRES_PASSWORD=postgre \\\n            -e POSTGRES_USER=postgre \\\n            -e POSTGRES_DB=postgre \\\n            -p 5432:5432 \\\n            -d postgres:12.0-alpine\n```\n\n#### API Container\nThe following environment variables must be passed as parameters:\n\n- [PLAY_SECRET_KEY](https://www.playframework.com/documentation/2.8.x/ApplicationSecret): When started in prod mode, if\nPlay finds that the secret is not set, or if it is set to `changeme`, Play will throw an error.\n- JDBC_DATABASE_URL: jdbc url to a postgres database\n- JDBC_DATABASE_USERNAME: username to access postgres database\n- JDBC_DATABASE_PASSWORD: password to access postgres database\n\nThe image has port 9000 exposed, so it must be mapped to be accessed from the outside.\nThe command to run the docker image in a container would be something like this:\n\n```shell script\ndocker run --name rumble-on-scala-API \\\n            -e PLAY_SECRET_KEY=\"$(head -c 32 /dev/urandom | base64)\" \\\n            -e JDBC_DATABASE_URL=\"jdbc:postgresql://172.17.0.2:5432/postgres\" \\\n            -e JDBC_DATABASE_USERNAME=postgre -e JDBC_DATABASE_PASSWORD=postgre \\\n            -p 9000:9000 \\\n            -d gastonschabas/rumble-on-scala:0.0.0\n```\n\n## API Spec\n\n### /v0/hello\n#### Accepted Headers\n- **Accept-Language**: ${lang} # available languages: es, en, de, fr\n\n#### Curl Request\n```shell script\ncurl --request GET \\\n     --header 'Accept-Language: es' \\\n    'localhost:9000/v0/hello'\n``` ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgastonschabas%2Frumble-on-scala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgastonschabas%2Frumble-on-scala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgastonschabas%2Frumble-on-scala/lists"}