{"id":42892281,"url":"https://github.com/googlecodelabs/monolith-to-microservices","last_synced_at":"2026-01-30T14:59:53.624Z","repository":{"id":37451056,"uuid":"207409203","full_name":"googlecodelabs/monolith-to-microservices","owner":"googlecodelabs","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-21T19:45:43.000Z","size":4194,"stargazers_count":210,"open_issues_count":23,"forks_count":174,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-10-22T13:15:46.284Z","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":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/googlecodelabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2019-09-09T21:35:53.000Z","updated_at":"2024-10-20T17:14:15.000Z","dependencies_parsed_at":"2024-05-02T10:46:05.969Z","dependency_job_id":"f9bd1fb5-8379-4278-bafc-5fb0cee18e72","html_url":"https://github.com/googlecodelabs/monolith-to-microservices","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/googlecodelabs/monolith-to-microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlecodelabs%2Fmonolith-to-microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlecodelabs%2Fmonolith-to-microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlecodelabs%2Fmonolith-to-microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlecodelabs%2Fmonolith-to-microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googlecodelabs","download_url":"https://codeload.github.com/googlecodelabs/monolith-to-microservices/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlecodelabs%2Fmonolith-to-microservices/sbom","scorecard":{"id":439958,"data":{"date":"2025-08-11","repo":{"name":"github.com/googlecodelabs/monolith-to-microservices","commit":"deeb3099f6a29c0ec8b92a20013fdc94f69f0d47"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 1/9 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: microservices/src/frontend/Dockerfile:15: pin your Docker image by updating node:16 to node:16@sha256:f77a1aef2da8d83e45ec990f45df50f1a286c5fe8bbfb8c6e4246c6389705c0b","Warn: containerImage not pinned by hash: microservices/src/orders/Dockerfile:15: pin your Docker image by updating node:16 to node:16@sha256:f77a1aef2da8d83e45ec990f45df50f1a286c5fe8bbfb8c6e4246c6389705c0b","Warn: containerImage not pinned by hash: microservices/src/products/Dockerfile:15: pin your Docker image by updating node:16 to node:16@sha256:f77a1aef2da8d83e45ec990f45df50f1a286c5fe8bbfb8c6e4246c6389705c0b","Warn: containerImage not pinned by hash: monolith/Dockerfile:15: pin your Docker image by updating node:16 to node:16@sha256:f77a1aef2da8d83e45ec990f45df50f1a286c5fe8bbfb8c6e4246c6389705c0b","Warn: npmCommand not pinned by hash: microservices/src/frontend/Dockerfile:25","Warn: npmCommand not pinned by hash: microservices/src/orders/Dockerfile:25","Warn: npmCommand not pinned by hash: microservices/src/products/Dockerfile:25","Warn: npmCommand not pinned by hash: monolith/Dockerfile:25","Warn: npmCommand not pinned by hash: setup.sh:22","Warn: npmCommand not pinned by hash: setup.sh:38","Warn: npmCommand not pinned by hash: setup.sh:43","Warn: npmCommand not pinned by hash: setup.sh:48","Info:   0 out of   4 containerImage dependencies pinned","Info:   0 out of   8 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":5,"reason":"SAST tool is not run on all commits -- score normalized to 5","details":["Warn: 12 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"27 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T05:23:34.254Z","repository_id":37451056,"created_at":"2025-08-19T05:23:34.254Z","updated_at":"2025-08-19T05:23:34.254Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28914895,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T12:13:43.263Z","status":"ssl_error","status_checked_at":"2026-01-30T12:13:22.389Z","response_time":66,"last_error":"SSL_read: 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":[],"created_at":"2026-01-30T14:59:53.359Z","updated_at":"2026-01-30T14:59:53.577Z","avatar_url":"https://github.com/googlecodelabs.png","language":"JavaScript","readme":"# Monolith to Microservices\n\n## NOTE: This is not an officially supported Google product\n\n## Introduction\n\n### This project is used by the Google Cloud Platform team to demonstrate different services within Google Cloud. This project contains two versions of the same application, one architected as a monolith and the other as a set of microservices\n\n## Setup\n\n### **NOTE:** Make sure you have a newer version of NodeJS (16.13.0) or newer (in Cloud Shell you can run `nvm install --lts`)\n\n```bash\ngit clone https://github.com/googlecodelabs/monolith-to-microservices\ncd monolith-to-microservices\n./setup.sh\n```\n\n## Monolith\n\n### To run the monolith project use the following commands from the top level directory\n\n```bash\ncd monolith\nnpm start\n```\n\nYou should see output similar to the following\n\n```text\nMonolith listening on port 8080!\n```\n\n#### That's it! You now have a perfectly functioning monolith running on your machine\n\n### Docker - Monolith\n\n#### To create a Docker image for the monolith, execute the following commands\n\n```bash\ncd monolith\ndocker build -t monolith:1.0.0 .\n```\n\nTo run the Docker image, execute the following commands\n\n```bash\ndocker run --rm -p 8080:8080 monolith:1.0.0\n```\n\n## Microservices\n\n### To run the microservices project use the following commands from the top level directory\n\n```bash\ncd microservices\nnpm start\n```\n\nYou should see output similar to the following\n\n```text\n[0] Frontend microservice listening on port 8080!\n[2] Orders microservice listening on port 8081!\n[1] Products microservice listening on port 8082!\n```\n\n### That's it! You now have a perfectly functioning set of microservices running on your machine\n\n### Docker - Microservices\n\n### To create a Docker image for the microservices, you will have to create a Docker image for each service. Execute the following commands for each folder under the microservices folder\n\n```bash\ncd microservices/src/frontend\ndocker build -t frontend:1.0.0 .\n\ncd ../products\ndocker build -t products:1.0.0 .\n\ncd ../orders\ndocker build -t orders:1.0.0 .\n```\n\nTo run the Docker image, execute the following commands\n\n```bash\ndocker run -d --rm -p 8080:8080 monolith:1.0.0\ndocker run -d --rm -p 8081:8081 orders:1.0.0\ndocker run -d --rm -p 8082:8082 products:1.0.0\n```\n\n#### To stop the containers, you will need to find the CONTAINER ID for each and stop them individually. See the steps below\n\n```bash\ndocker ps -a\n\nCONTAINER ID        IMAGE                        COMMAND                CREATED\n4c01db0b339c        frontend:1.0.0               bash                   17 seconds ago\nd7886598dbe2        orders:1.0.0                 bash                   17 seconds ago\nd85756f57265        products:1.0.0               bash                   17 seconds ago\n\ndocker stop 4c01db0b339c\ndocker stop d7886598dbe2\ndocker stop d85756f57265\n```\n\n## React App\n\n### The react-app folder contains a React application created from `create-react-app`. You can modify this fronted, but afterwards, you will need to build and move the static files to the monolith and microservices project. You can do this by running the standard create-react-app build command below\n\n```bash\nnpm run build\n```\n\n#### This will run the build script to create the static files two times. The first will build with relative URLs and copy the static files to the monolith/public folder. The second run will build with the standard microservices URLs and copy the static files to the microservices/src/frontend/public folder\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglecodelabs%2Fmonolith-to-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgooglecodelabs%2Fmonolith-to-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglecodelabs%2Fmonolith-to-microservices/lists"}