diff --git a/.goreleaser.yml b/.goreleaser.yml index 43456ed9..6328b158 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -7,6 +7,9 @@ builds: - CGO_ENABLED=0 ldflags: - -X github.com/commitdev/zero/version.AppVersion={{.Version}} -X github.com/commitdev/zero/version.AppBuild={{.ShortCommit}} + goarch: + - amd64 + - 386 archives: - replacements: darwin: Darwin diff --git a/README.md b/README.md index d05978ce..14c1c2a7 100644 --- a/README.md +++ b/README.md @@ -71,42 +71,7 @@ ___ ## Getting Started -### How to Install and Configure Zero - -There are multiple ways to install Zero: - -- Install Zero using your systems package manager. - -``` -# MacOS -brew tap commitdev/zero -brew install zero -``` - -- Install Zero by downloading the binary. - -Download the latest [Zero binary] for your systems architecture. Unzip your downloaded package and copy the Zero binary to the desired location and add it to your system PATH. - -Zero currently supports: -| System | Support| Package Manager | -|---------|:-----:|:------:| -| MacOS | ✅ | `brew` | -| Linux | ✅ | `deb, rpm, apk` | -| Windows | ❌ | n/a | - -### Prerequisites - -In order to use Zero, run the `zero check` command on your system to find out which other tools / dependencies you might need to install. - -![zero-check](./docs/img/zero-check.png) - -[AWS CLI], [Kubectl], [Terraform], [jq], [Git], [Wget] - -You need to [register a new domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html) / [host a registered domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/MigratingDNS.html) you will use to access your infrastructure on [Amazon Route 53](https://aws.amazon.com/route53/). - -> We recommended you have two domains - one for staging and another for production. For example, mydomain.com and mydomain-staging.com. This will lead to environments that are more similar, rather than trying to use a subdomain like staging.mydomain.com for staging which may cause issues in your app later on. - -___ +[See the getting started guide at the Zero docs site.](https://getzero.dev/docs/zero/getting-started/installation) ### Building blocks of Zero @@ -120,134 +85,6 @@ Also declares dependency used to determine the order of execution with other mod See [`zero-module.yml` reference](./docs/module-definition.md) for details. ___ -## Using zero to spin up your own stack - -Using Zero to spin up your infrastructure and application is easy and straightforward. Using just a few commands, you can configure and deploy your very own scalable, high-performance, production-ready infrastructure. - -A few caveats before getting started: - -- For Zero to provision resources, you will need to be authenticated with AWS [(authenticate with aws-cli)](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods). - -- It is recommended practice to [create a GitHub org](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch) where your code is going to live. If you choose, after creating your codebases, Zero will automatically create repositories and check in your code for you. You will need to [create a Personal Access Token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) to enable this. - -
- If using CircleCI as your build pipeline ... - - - Grant [CircleCi Organization access](https://github.com/settings/connections/applications/78a2ba87f071c28e65bb) to your repositories to allow pulling the code during the build pipeline. - - - You will need to [create a CircleCi access token](https://circleci.com/docs/2.0/managing-api-tokens/) and enter it during the setup process; you should store your generated tokens securely. - - - For your CI build to work, you need to opt into the use of third-party orbs. You can find this in your CircleCi Org Setting > Security > Allow Uncertified Orbs. -
- -### zero init - -The `zero init` command creates a new project and outputs an infrastructure configuration file with user input prompted responses into a file. -> 📁 `YOUR_PROJECT_NAME/zero-project.yml` - -```shell -# To create and customize a new project you run -$ zero init - -## Sample project initialization -✔ Project Name: myapp-infra -🎉 Initializing project -✔ EKS + Go + React + Gatsby -✔ Should the created projects be checked into github automatically? (y/n): y -✔ What's the root of the github org to create repositories in?: github.com/myapp-org -✔ Existing AWS Profiles -✔ default - -Github personal access token: used for creating repositories for your project -Requires the following permissions: [repo::public_repo, admin::orgread:org] -The token can be created at https://github.com/settings/tokens -✔ Github Personal Access Token with access to the above organization: - -CircleCI api token: used for setting up CI/CD for your project -The token can be created at https://app.circleci.com/settings/user/tokens -✔ Circleci api key for CI/CD: -✔ us-west-2 -✔ Production Root Host Name (e.g. mydomain.com) - this must be the root of the chosen domain, not a subdomain.: commitzero.com -✔ Production Frontend Host Name (e.g. app.): app. -✔ Production Backend Host Name (e.g. api.): api. -✔ Staging Root Host Name (e.g. mydomain-staging.com) - this must be the root of the chosen domain, not a subdomain.: commitzero-stage.com -✔ Staging Frontend Host Name (e.g. app.): app. -✔ Staging Backend Host Name (e.g. api.): api. -✔ What do you want to call the zero-aws-eks-stack project?: infrastructure -✔ What do you want to call the zero-deployable-backend project?: backend-service -✔ What do you want to call the zero-deployable-react-frontend project?: frontend - -``` - -### zero create - -The `zero create` command renders the infrastructure modules you've configured into your project folder and pushes your code to GitHub. - -```shell -# Template the selected modules and configuration specified in zero-project.yml and push to the repository. -$ cd zero-init # change your working dir to YOUR_PROJECT_NAME -$ zero create - -## Sample Output -🕰 Fetching Modules -📝 Rendering Modules - Finished templating : backend-service/.circleci/README.md -✅ Finished templating : backend-service/.circleci/config.yml -✅ Finished templating : backend-service/.gitignore -... -... -✅ Finished templating : infrastructure/terraform/modules/vpc/versions.tf -⬆ Done Rendering - committing repositories to version control. -✅ Repository created: github.com/myapp-org/infrastructure -✅ Repository created: github.com/myapp-org/backend-service -✅ Repository created: github.com/myapp-org/frontend -✅ Done - run zero apply to create any required infrastructure or execute any other remote commands to prepare your environments. - - -``` - -### zero apply - -The `zero apply` command takes the templated modules generated based on your input and spins up a scalable & performant infrastructure for you! - -_Note that this can take 20 minutes or more depending on your choices, as it is waiting for all the provisioned infrastructure to be created_ -```shell -$ zero apply - -# Sample Output -Choose the environments to apply. This will create infrastructure, CI pipelines, etc. -At this point, real things will be generated that may cost money! -Only a single environment may be suitable for an initial test, but for a real system we suggest setting up both staging and production environments. -✔ Production -🎉 Bootstrapping project zero-init. Please use the zero-project.yml file to modify the project as needed. -Cloud provider: AWS -Runtime platform: Kubernetes -Infrastructure executor: Terraform - -... -... - - -✅ Done. -Your projects and infrastructure have been successfully created. Here are some useful links and commands to get you started: -zero-aws-eks-stack: -- Repository URL: github.com/myapp-org/infrastructure -- To see your kubernetes clusters, run: 'kubectl config get-contexts' -- To switch to a cluster, use the following commands: -- for production use: kubectl config use-context arn:aws:eks:us-west-2:123456789:cluster/myapp-infra-production-us-west-2 - -- To inspect the selected cluster, run 'kubectl get node,service,deployment,pods' -zero-deployable-react-frontend: -- Repository URL: github.com/myapp-org/frontend -- Deployment Pipeline URL: https://app.circleci.com/pipelines/github/myapp-org/frontend -- Production Landing Page: app.commitzero.com - -zero-deployable-backend: -- Repository URL: github.com/myapp-org/backend-service -- Deployment Pipeline URL: https://app.circleci.com/pipelines/github/myapp-org/backend-service -- Production API: api.commitzero.com -``` - -***Your stack is now up and running, follow the links in your terminal to visit your application 🎉*** ## Zero Default Stack @@ -258,10 +95,10 @@ The core zero modules currently available are: | Project | URL | |---|---| | AWS Infrastructure | [https://github.com/commitdev/zero-aws-eks-stack](https://github.com/commitdev/zero-aws-eks-stack) | -| Backend (Go) | [https://github.com/commitdev/zero-deployable-backend](https://github.com/commitdev/zero-deployable-backend) | -| Backend (Node.js) | [https://github.com/commitdev/zero-deployable-node-backend](https://github.com/commitdev/zero-deployable-node-backend) | -| Frontend (React) | [https://github.com/commitdev/zero-deployable-react-frontend](https://github.com/commitdev/zero-deployable-react-frontend) | -| Static Site (Gatsby) | [https://github.com/commitdev/zero-deployable-landing-page](https://github.com/commitdev/zero-deployable-landing-page) | +| Backend (Go) | [https://github.com/commitdev/zero-backend-go](https://github.com/commitdev/zero-backend-go) | +| Backend (Node.js) | [https://github.com/commitdev/zero-backend-node](https://github.com/commitdev/zero-backend-node) | +| Frontend (React) | [https://github.com/commitdev/zero-frontend-react](https://github.com/commitdev/zero-frontend-react) | +| Static Site (Gatsby) | [https://github.com/commitdev/zero-static-site-gatsby](https://github.com/commitdev/zero-static-site-gatsby) | ___ @@ -313,17 +150,11 @@ Why is my deployed application not yet accessible? - It takes about 20 - 35 mins for your deployed application to be globally available through AWS CloudFront CDN. -[git]: https://git-scm.com -[kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/ -[terraform]:https://www.terraform.io/downloads.html -[jq]: https://github.com/stedolan/jq -[AWS CLI]: https://aws.amazon.com/cli/ [acw]: https://aws.amazon.com/cloudwatch/ [vpc]: https://aws.amazon.com/vpc/ [iam]: https://aws.amazon.com/iam/ [asg]: https://aws.amazon.com/autoscaling/ [zero binary]: https://github.com/commitdev/zero/releases/ -[Wget]: https://stackoverflow.com/questions/33886917/how-to-install-wget-in-macos [and more]: https://github.com/commitdev/zero-aws-eks-stack/blob/master/docs/resources.md [terraform]: https://terraform.io [letsencrypt]: https://letsencrypt.org/ diff --git a/doc-site/docs/getting-started/prerequisites.md b/doc-site/docs/getting-started/prerequisites.md index f99054be..2168d016 100644 --- a/doc-site/docs/getting-started/prerequisites.md +++ b/doc-site/docs/getting-started/prerequisites.md @@ -4,6 +4,31 @@ sidebar_label: Prerequisites sidebar_position: 2 --- + +Using Zero to spin up your infrastructure and application is easy and straightforward. Using just a few commands, you can configure and deploy your very own scalable, high-performance, production-ready infrastructure. + +A few caveats before getting started: + +- For Zero to provision resources, you will need to be [authenticated with the AWS CLI tool ](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods). + +- It is recommended practice to [create a GitHub org](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch) where your code is going to live. If you choose, after creating your codebases, Zero will automatically create repositories and check in your code for you. You will need to [create a Personal Access Token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) to enable this. + +
+ If using CircleCI as your build pipeline... +
    +
  • + Grant CircleCi Organization access to your repositories to allow pulling the code during the build pipeline. +
  • +
  • + You will need to create a CircleCi access token and enter it during the setup process; you should store your generated tokens securely. +
  • +
  • + For your CI build to work, you need to opt into the use of third-party orbs. You can find this in your CircleCi Org Setting > Security > Allow Uncertified Orbs. +
  • +
+
+ + ### `zero check` In order to use Zero, run the `zero check` command on your system to find out which other tools / dependencies you might need to install. @@ -13,5 +38,13 @@ In order to use Zero, run the `zero check` command on your system to find out wh You need to [register a new domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html) / [host a registered domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/MigratingDNS.html) you will use to access your infrastructure on [Amazon Route 53](https://aws.amazon.com/route53/). -> We recommended you have two domains - one for staging and another for production. For example, mydomain.com and mydomain-staging.com. This will lead to environments that are more similar, rather than trying to use a subdomain like staging.mydomain.com for staging which may cause issues in your app later on. +:::tip + We recommended you have two domains - one for staging and another for production. For example, mydomain.com and mydomain-staging.com. This will lead to environments that are more similar, rather than trying to use a subdomain like staging.mydomain.com for staging which may cause issues in your app later on. +::: +[AWS CLI]: https://aws.amazon.com/cli/ +[git]: https://git-scm.com +[kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/ +[terraform]:https://www.terraform.io/downloads.html +[jq]: https://github.com/stedolan/jq +[Wget]: https://stackoverflow.com/questions/33886917/how-to-install-wget-in-macos diff --git a/doc-site/docs/getting-started/zero-apply.md b/doc-site/docs/getting-started/zero-apply.md index 850ba824..7b2f0b2a 100644 --- a/doc-site/docs/getting-started/zero-apply.md +++ b/doc-site/docs/getting-started/zero-apply.md @@ -6,7 +6,10 @@ sidebar_position: 5 The `zero apply` command takes the templated modules generated based on your input and spins up a scalable & performant infrastructure for you! -_Note that this can take 20 minutes or more depending on your choices, as it is waiting for all the provisioned infrastructure to be created_ +:::note +This can take 20 minutes or more depending on your choices, as it must wait for all the provisioned infrastructure to be created +::: + ```shell $ zero apply @@ -33,12 +36,12 @@ zero-aws-eks-stack: - for production use: kubectl config use-context arn:aws:eks:us-west-2:123456789:cluster/myapp-infra-production-us-west-2 - To inspect the selected cluster, run 'kubectl get node,service,deployment,pods' -zero-deployable-react-frontend: +zero-frontend-react: - Repository URL: github.com/myapp-org/frontend - Deployment Pipeline URL: https://app.circleci.com/pipelines/github/myapp-org/frontend - Production Landing Page: app.commitzero.com -zero-deployable-backend: +zero-backend-go: - Repository URL: github.com/myapp-org/backend-service - Deployment Pipeline URL: https://app.circleci.com/pipelines/github/myapp-org/backend-service - Production API: api.commitzero.com diff --git a/doc-site/docs/getting-started/zero-create.md b/doc-site/docs/getting-started/zero-create.md index d06c4fae..01b2b9ae 100644 --- a/doc-site/docs/getting-started/zero-create.md +++ b/doc-site/docs/getting-started/zero-create.md @@ -27,4 +27,6 @@ $ zero create ✅ Done - run zero apply to create any required infrastructure or execute any other remote commands to prepare your environments. -``` \ No newline at end of file +``` + +After this step you will be able to examine the created repositories before proceeding to `zero apply`. If you chose not to have zero create a repository for you, you can still use the `zero apply` command to create the infrastructure but you will need to check these repositories into your version control system of choice. diff --git a/doc-site/docs/getting-started/zero-init.md b/doc-site/docs/getting-started/zero-init.md index daffa527..461b31e5 100644 --- a/doc-site/docs/getting-started/zero-init.md +++ b/doc-site/docs/getting-started/zero-init.md @@ -36,7 +36,9 @@ The token can be created at https://app.circleci.com/settings/user/tokens ✔ Staging Frontend Host Name (e.g. app.): app. ✔ Staging Backend Host Name (e.g. api.): api. ✔ What do you want to call the zero-aws-eks-stack project?: infrastructure -✔ What do you want to call the zero-deployable-backend project?: backend-service -✔ What do you want to call the zero-deployable-react-frontend project?: frontend +✔ What do you want to call the zero-backend-go project?: backend-service +✔ What do you want to call the zero-frontend-react project?: frontend -``` \ No newline at end of file +``` + +After this step you will be able to examine the `zero-project.yml` file to ensure your settings are correct before proceeding to `zero create`. diff --git a/doc-site/src/components/HomepageTrustedBy.js b/doc-site/src/components/HomepageTrustedBy.js index be1eb9b6..04a65bea 100644 --- a/doc-site/src/components/HomepageTrustedBy.js +++ b/doc-site/src/components/HomepageTrustedBy.js @@ -12,7 +12,7 @@ const trustedByData = [ }, { img: "img/partners/atlasone.png", - src: "https://atlasone.ca/", + src: "https://www.atlasone.ca/", }, { img: "img/partners/placeholder.png", @@ -39,4 +39,4 @@ export default function TrustedByCarousel() {

Trusted By

-} \ No newline at end of file +} diff --git a/internal/config/projectconfig/project_config_test.go b/internal/config/projectconfig/project_config_test.go index 2614f571..8e585b6b 100644 --- a/internal/config/projectconfig/project_config_test.go +++ b/internal/config/projectconfig/project_config_test.go @@ -40,9 +40,9 @@ func TestLoadConfig(t *testing.T) { func eksGoReactSampleModules() projectconfig.Modules { parameters := projectconfig.Parameters{"a": "b"} return projectconfig.Modules{ - "aws-eks-stack": projectconfig.NewModule(parameters, "zero-aws-eks-stack", "github.com/something/repo1", "github.com/commitdev/zero-aws-eks-stack", []string{}, []projectconfig.Condition{}), - "deployable-backend": projectconfig.NewModule(parameters, "zero-deployable-backend", "github.com/something/repo2", "github.com/commitdev/zero-deployable-backend", []string{}, []projectconfig.Condition{}), - "deployable-react-frontend": projectconfig.NewModule(parameters, "zero-deployable-react-frontend", "github.com/something/repo3", "github.com/commitdev/zero-deployable-react-frontend", []string{}, []projectconfig.Condition{}), + "aws-eks-stack": projectconfig.NewModule(parameters, "zero-aws-eks-stack", "github.com/something/repo1", "github.com/commitdev/zero-aws-eks-stack", []string{}, []projectconfig.Condition{}), + "backend-go": projectconfig.NewModule(parameters, "zero-backend-go", "github.com/something/repo2", "github.com/commitdev/zero-backend-go", []string{}, []projectconfig.Condition{}), + "frontend-react": projectconfig.NewModule(parameters, "zero-frontend-react", "github.com/something/repo3", "github.com/commitdev/zero-frontend-react", []string{}, []projectconfig.Condition{}), } } @@ -61,20 +61,20 @@ modules: dir: zero-aws-eks-stack repo: github.com/something/repo1 source: github.com/commitdev/zero-aws-eks-stack - deployable-backend: + backend-go: parameters: a: b files: - dir: zero-deployable-backend + dir: zero-backend-go repo: github.com/something/repo2 - source: github.com/commitdev/zero-deployable-backend - deployable-react-frontend: + source: github.com/commitdev/zero-backend-go + frontend-react: parameters: a: b files: - dir: zero-deployable-react-frontend + dir: zero-frontend-react repo: github.com/something/repo3 - source: github.com/commitdev/zero-deployable-react-frontend + source: github.com/commitdev/zero-frontend-react ` } diff --git a/internal/registry/registry.go b/internal/registry/registry.go index 6d345299..1631342b 100644 --- a/internal/registry/registry.go +++ b/internal/registry/registry.go @@ -13,18 +13,18 @@ func GetRegistry(path string) Registry { "EKS + Go + React + Gatsby", []string{ path + "/zero-aws-eks-stack", - path + "/zero-deployable-landing-page", - path + "/zero-deployable-backend", - path + "/zero-deployable-react-frontend", + path + "/zero-static-site-gatsby", + path + "/zero-backend-go", + path + "/zero-frontend-react", }, }, { "EKS + NodeJS + React + Gatsby", []string{ path + "/zero-aws-eks-stack", - path + "/zero-deployable-landing-page", - path + "/zero-deployable-node-backend", - path + "/zero-deployable-react-frontend", + path + "/zero-static-site-gatsby", + path + "/zero-backend-node", + path + "/zero-frontend-react", }, }, }