{"id":18601709,"url":"https://github.com/eficode/sproutadt","last_synced_at":"2025-05-16T17:33:41.796Z","repository":{"id":152149998,"uuid":"576219343","full_name":"eficode/sproutadt","owner":"eficode","description":null,"archived":false,"fork":false,"pushed_at":"2022-12-09T09:42:50.000Z","size":1459,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-02-18T01:33:28.845Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/eficode.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}},"created_at":"2022-12-09T09:42:34.000Z","updated_at":"2022-12-09T09:42:54.000Z","dependencies_parsed_at":"2023-07-08T15:16:22.784Z","dependency_job_id":null,"html_url":"https://github.com/eficode/sproutadt","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/eficode%2Fsproutadt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eficode%2Fsproutadt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eficode%2Fsproutadt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eficode%2Fsproutadt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eficode","download_url":"https://codeload.github.com/eficode/sproutadt/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254576438,"owners_count":22094367,"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":[],"created_at":"2024-11-07T02:09:12.901Z","updated_at":"2025-05-16T17:33:41.789Z","avatar_url":"https://github.com/eficode.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# This repository has been configured with the following templates\n\n- Zeroday fullstack\n\n- AWS EKS\n\n# Fullstack template\n\nThe Fullstack template is a fullstack project using Node and React. The template can be automatically deployed to Amazon EKS using the \"AWS EKS\" deployment template. \n\n---\n## Contents\n- [Fullstack template](#fullstack-template)\n  - [Contents](#contents)\n  - [Technologies used](#technologies-used)\n  - [Prerequisites](#prerequisites)\n  - [Local development with Docker](#local-development-with-docker)\n    - [Starting the containers](#starting-the-containers)\n    - [Seed the database](#seed-the-database)\n  - [Local development without Docker](#local-development-without-docker)\n    - [Prepare database](#prepare-database)\n    - [Backend](#backend)\n    - [Frontend](#frontend)\n  - [Linting \u0026 code style](#linting--code-style)\n  - [Testing](#testing)\n    - [Unit tests](#unit-tests)\n    - [Robot tests](#robot-tests)\n  - [Setting up Jenkins](#setting-up-jenkins)\n  - [Teardown of resources after automatic or manual deployment](#teardown-of-resources-after-automatic-or-manual-deployment)\n\n---\n\n## Technologies used\n\n- **Node backend using PostgreSQL**\n\n  - Bearer Token Authentication using JWT\n  - Google Authentication\n\n- **React + Redux Frontend**\n\n  - Webpack 5 + refactored common config\n  - React Router 5\n  - Building minified nginx image for Docker\n\n- **Docker Compose**\n\n  - Override-files for Unit and Acceptance Testing\n\n- **Robot Framework Testing**\n\n  - Running tests using Selenium Grid + Docker\n  - Using Eficode Robot Framework Template\n\n- **Jenkins**\n\n  - Everything built and tested using Docker\n  - Trivy security scanning\n\n- **GitHub Actions**\n  - Everything built and tested using Docker\n  - Trivy security scanning\n  - Slack notifications\n\n---\n\n## Prerequisites\n\n- [docker](http://docker.com) and [docker-compose](https://docs.docker.com/compose/)\n\n---\n\n## Local development with Docker\n\nThis project comes with a [VSCode Remote Container](https://code.visualstudio.com/docs/remote/containers) setup for local development. It requires a VSCode addon [Remote Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) and Docker to work.\n\nTo start the remote container open VSCode Command Palette (Ctrl+Shift+P) and type Reopen in container. This will open the folder inside the dev container which will then have fixed (and extensible) list of VSCode extensions, so that everyone working with the project will have an uniform development experience.\n\nThe project can also be developed without remote containers but it is recommended to use it.\n\n### Starting the containers\n\nTo run the project in development mode, run:\n\n    docker-compose up\n\nFor production mode you need to use the production configuration file:\n\n    docker-compose --project-directory . -f compose/production.yml -f compose/db.yml up\n\n### Seed the database\n\n    docker-compose -f docker-compose.yml -f compose/db.yml run backend-dev node db/seeds.js\n\n---\n\n## Local development without Docker\n\n### Prepare database\n\nInstall postgresql:\n\n    https://www.postgresql.org/download/\n\n    psql -c \"CREATE ROLE demo WITH CREATEDB LOGIN PASSWORD 'demo'\"\n    psql -c \"CREATE DATABASE demo WITH OWNER demo\"\n    psql -c \"CREATE DATABASE demo_test WITH OWNER demo\"\n\nAdd this line to your .env:\n\n    export DATABASE_URL=postgres://demo:demo@localhost/demo\n\n### Backend\n\nRun these commands in the /backend directory:\n\n    npm install\n    npm start\n\nThe backend will run on port `9000`\n\n### Frontend\n\nRun these commands in the /frontend directory:\n\n    npm install\n    npm start\n\nThe frontend will run on port `8000`\n\n---\n\n## Linting \u0026 code style\n\nProject code style is based on [Airbnb JavaScript style quide](https://github.com/airbnb/javascript)\n\nTo use editorconfig, [download plugin for your IDE](https://editorconfig.org/#download).\n\nRun eslint in Docker container\n\n    docker-compose run backend-dev sh -c \"npm run lint\"\n    docker-compose run frontend-dev sh -c \"npm run lint\"\n\nRun `npm run lint` in backend and frontend directories to check the linting locally.\n\n---\n\n## Testing\n\n### Unit tests\n\n    docker-compose --project-directory . -f compose/db-test.yml -f compose/test.yml run mocha\n\n### Robot tests\n\n    docker-compose --project-directory . -f compose/db-test.yml -f compose/robot.yml run robot\n\n---\n\n## Setting up Jenkins\n\n### Setting up Jenkins Manually\n\nYou can read the instructions on [this page](https://confluence.eficode.fi/x/woB9B).\n\n### Setting up Jenkins automatically\n\nJenkins can be set up automatically with the executor script named \"GitHub Jenkins pipeline setup script\". \n\n---\n\n## Teardown of resources after automatic or manual deployment\n\nThe following list includes the resources which are to be removed. Delete resources selectively if required.\n\n1. Delete Jenkins pipeline","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feficode%2Fsproutadt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feficode%2Fsproutadt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feficode%2Fsproutadt/lists"}