{"id":19633293,"url":"https://github.com/quipper/monorepo-deploy-actions","last_synced_at":"2026-05-25T05:05:21.325Z","repository":{"id":37045646,"uuid":"395162423","full_name":"quipper/monorepo-deploy-actions","owner":"quipper","description":"Deploy microservices of monorepo using GitHub Actions and Argo CD (open source)","archived":false,"fork":false,"pushed_at":"2026-05-12T13:52:40.000Z","size":127423,"stargazers_count":30,"open_issues_count":17,"forks_count":6,"subscribers_count":93,"default_branch":"main","last_synced_at":"2026-05-12T15:37:29.940Z","etag":null,"topics":["github-actions","gitops","kubernetes","monorepo"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quipper.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":"2021-08-12T01:41:30.000Z","updated_at":"2026-05-11T02:59:46.000Z","dependencies_parsed_at":"2026-02-16T05:04:37.526Z","dependency_job_id":null,"html_url":"https://github.com/quipper/monorepo-deploy-actions","commit_stats":null,"previous_names":[],"tags_count":833,"template":false,"template_full_name":"int128/typescript-actions-monorepo","purl":"pkg:github/quipper/monorepo-deploy-actions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quipper%2Fmonorepo-deploy-actions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quipper%2Fmonorepo-deploy-actions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quipper%2Fmonorepo-deploy-actions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quipper%2Fmonorepo-deploy-actions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quipper","download_url":"https://codeload.github.com/quipper/monorepo-deploy-actions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quipper%2Fmonorepo-deploy-actions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33461100,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T02:24:28.008Z","status":"ssl_error","status_checked_at":"2026-05-25T02:23:23.339Z","response_time":57,"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":["github-actions","gitops","kubernetes","monorepo"],"created_at":"2024-11-11T12:16:56.487Z","updated_at":"2026-05-25T05:05:21.320Z","avatar_url":"https://github.com/quipper.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# monorepo-deploy-actions\n\nThis is a set of GitHub Actions to deploy microservices in a mono-repository (monorepo).\n\n## Design\n\n### Structure of monorepo\n\nOur monorepo contains a set of microservices with application code and Kubernetes manifests.\nHere is the example of directory structure.\n\n```\nmonorepo\n├── backend\n|   ├── sources...\n|   └── kubernetes\n|       ├── base\n|       └── overlays\n|           ├── develop\n|           |   └── kustomization.yaml\n|           └── staging\n|               └── kustomization.yaml\n├── frontend\n|   ├── sources...\n|   └── kubernetes\n|       └── overlays\n|           └── ...\n└── ...\n```\n\nWe adopt this strcuture for the following advantages:\n\n- An owner of microservice (i.e. product team) has strong ownership for both application and manifest\n- We can change both application and manifest in a pull request\n\nWe deploy a set of services from a branch to a namespace.\nFor example,\n\n- When `develop` branch is pushed,\n  - Build a Docker image from `develop` branch\n  - Run kustomize build against `develop` overlay\n  - Deploy to `develop` namespace\n- When a pull request is created,\n  - Build a Docker image from head branch\n  - Run kustomize build against `staging` overlay\n  - Deploy to an ephemeral namespace like `pr-12345`\n\nConsequently, a structure of monorepo is like below.\n\n```\nmonorepo\n└── ${service}\n    └── kubernetes\n        └── overlays\n            └── ${overlay}\n                └── kustomization.yaml\n```\n\nHere are the definitions of words.\n\n| Name                     | Description                                 | Example    |\n| ------------------------ | ------------------------------------------- | ---------- |\n| `overlay`                | Name of the overlay to build with Kustomize | `staging`  |\n| `namespace`              | Namespace to deploy into a cluster          | `pr-12345` |\n| `service`                | Name of a microservice                      | `backend`  |\n\n### Structure of Argo CD Applications\n\nWe adopt [App of Apps pattern of Argo CD](https://argoproj.github.io/argo-cd/operator-manual/cluster-bootstrapping/) for deployment hierarchy.\n\nFor a typical namespace such as develop or production, it is deployed with the below applications.\n\n```mermaid\ngraph LR\n  subgraph \"generated-manifests\"\n    AppService[Application develop--SERVICE] --\u003e Resources\n  end\n  App[Application monorepo--develop] --\u003e AppService\n```\n\nFor a pull request namespace, it is deployed with the below applications and [the pull request generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Pull-Request/).\n\n```mermaid\ngraph LR\n  subgraph \"generated-manifests\"\n    AppService[Application pr-NUMBER--SERVICE] --\u003e Resources\n  end\n  AppSet[ApplicationSet monorepo--pr] --\u003e AppPr[Application pr-NUMBER] --\u003e AppService\n```\n\nA namespace branch contains a set of generated manifest and Application manifest per a service.\n\n```\ndestination-repository  (branch: ns/${source-repository}/${overlay}/${namespace})\n├── applications\n|   └── ${namespace}--${service}.yaml  (Application)\n└── services\n    └── ${service}\n        └── generated.yaml\n```\n\n## Development\n\nNode.js and Corepack is required.\n\n```sh\nbrew install node@24\nnpm install -g corepack\n```\n\n### Release workflow\n\nWhen a pull request is merged into main branch, a new minor release is created by GitHub Actions.\nSee https://github.com/int128/release-typescript-action for details.\n\n### Dependency update\n\nYou can enable Renovate to update the dependencies.\nSee https://github.com/int128/typescript-action-renovate-config for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquipper%2Fmonorepo-deploy-actions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquipper%2Fmonorepo-deploy-actions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquipper%2Fmonorepo-deploy-actions/lists"}