{
    "componentChunkName": "component---src-pages-docs-doc-page-tsx",
    "path": "/docs/deployments/gitops-releases",
    "result": {"data":{"site":{"siteMetadata":{"siteUrl":"https://www.architect.io"}},"page":{"edges":[{"node":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"GitOps releases\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"gitops-releases\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, \"GitOps releases\", mdx(\"a\", {\n    parentName: \"h1\",\n    \"href\": \"#gitops-releases\",\n    \"aria-label\": \"gitops releases permalink\",\n    \"className\": \"anchor after\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  })))), mdx(\"p\", null, \"In the previous doc you learned how to automate preview environments on pull requests. In this doc, you'll learn how to create additional GitOps workflows that promote your code to staging when pull requests are merged, and production when new releases are cut.\"), mdx(\"h2\", {\n    \"id\": \"sync-staging-with-master\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, \"Sync staging with master\", mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#sync-staging-with-master\",\n    \"aria-label\": \"sync staging with master permalink\",\n    \"className\": \"anchor after\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  })))), mdx(\"p\", null, \"The best way to maintain a staging environment is by syncing it with your mainline git branch - every time a change is made to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"master\"), \", trigger a deploy to staging. Whether through direct pushes or successful pull requests, this will ensure that the staging environment always mirrors the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"master\"), \" branch of your repo.\"), mdx(\"p\", null, \"The workflows below will first create a new \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"latest\"), \" tag of your component in Architects registry. Then it will trigger \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"architect deploy\"), \" to ship that component and its changes to an existing \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"staging\"), \" environment. This environment is not created by this workflow since it is intended to be persistent, so you'll have to create the environment in advance.\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ARCHITECT_PASSWORD\"), \" must be a \", mdx(\"a\", {\n    href: \"https://cloud.architect.io/users/me/access-tokens\",\n    target: \"_blank\"\n  }, \"personal access token\"), \".\")), mdx(\"h3\", {\n    \"id\": \"github-actions\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, \"Github Actions\", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#github-actions\",\n    \"aria-label\": \"github actions permalink\",\n    \"className\": \"anchor after\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  })))), mdx(\"div\", {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"yaml\"\n  }, mdx(\"pre\", {\n    parentName: \"div\",\n    \"className\": \"language-yaml\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Deploy master\\n\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"env\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"ARCHITECT_EMAIL\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" $\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \" secrets.ARCHITECT_EMAIL \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token comment\"\n  }, \"# pass secrets into a job from Github > Settings > Secrets\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"ARCHITECT_PASSWORD\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" $\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \" secrets.ARCHITECT_PASSWORD \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"ARCHITECT_ACCOUNT\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" <account\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"name\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \">\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"MAINLINE_TAG_NAME\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" latest\\n\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"on\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"push\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"branches\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" master\\n\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"jobs\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"architect\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"runs-on\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" ubuntu\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"latest\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"steps\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"uses\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" actions/checkout@v2\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"uses\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" actions/setup\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"node@v2\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"with\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n          \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"node-version\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token string\"\n  }, \"'14'\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Tests\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" echo \\\"Run your tests here\\\"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Install Architect CLI\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" sudo npm install \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"g @architect\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"io/cli\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Login to Architect Cloud\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" architect login \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token comment\"\n  }, \"# credentials loaded automatically from envs ARCHITECT_EMAIL/ARCHITECT_PASSWORD\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Tag and Register Component\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" architect register ./architect.yml \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"tag $\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \" env.MAINLINE_TAG_NAME \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Deploy to Staging\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"|\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token scalar string\"\n  }, \"\\n          architect deploy --environment staging --auto-approve examples/my-component:${{ env.MAINLINE_TAG_NAME }}\")))), mdx(\"h2\", {\n    \"id\": \"cut-releases-for-production\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, \"Cut releases for production\", mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#cut-releases-for-production\",\n    \"aria-label\": \"cut releases for production permalink\",\n    \"className\": \"anchor after\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  })))), mdx(\"p\", null, \"The last step of your GitOps workflow is to finally get your code into production! If you want, you're welcome to use the workflow described previously to automatically deploy from \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"master\"), \" straight to production, but in this workflow we'll show how to trigger the deployment on a manual release cut. By triggering on new releases, we can log a version history of all the code that made its way to production to make it easier to instrument rollbacks.\"), mdx(\"p\", null, \"The workflows below will first register the component with a tag matching the name of the new release. Then they will deploy the new component tag to an environment named \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"production\"), \". Obviously production is intended to be persistent, so you'll have to create the environment in advance.\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ARCHITECT_PASSWORD\"), \" must be a \", mdx(\"a\", {\n    href: \"https://cloud.architect.io/users/me/access-tokens\",\n    target: \"_blank\"\n  }, \"personal access token\"), \".\")), mdx(\"h3\", {\n    \"id\": \"github-actions-1\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, \"Github Actions\", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#github-actions-1\",\n    \"aria-label\": \"github actions 1 permalink\",\n    \"className\": \"anchor after\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  })))), mdx(\"div\", {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"yaml\"\n  }, mdx(\"pre\", {\n    parentName: \"div\",\n    \"className\": \"language-yaml\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Deploy release\\n\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"env\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"ARCHITECT_EMAIL\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" $\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \" secrets.ARCHITECT_EMAIL \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token comment\"\n  }, \"# pass secrets into a job from Github > Settings > Secrets\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"ARCHITECT_PASSWORD\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" $\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \" secrets.ARCHITECT_PASSWORD \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"ARCHITECT_ACCOUNT\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" test\\n\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"on\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"release\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"types\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" published\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"branches\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" master\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"tags\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" v\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token important\"\n  }, \"*.*.*\"), \"\\n\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"jobs\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n  \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"architect\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"runs-on\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" ubuntu\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"latest\\n    \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"steps\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"uses\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" actions/checkout@v2\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"uses\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" actions/setup\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"node@v2\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"with\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \"\\n          \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"node-version\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token string\"\n  }, \"'14'\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Tests\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" echo \\\"Run your tests here\\\"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Install Architect CLI\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" sudo npm install \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"g @architect\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"io/cli\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Login to Architect Cloud\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" architect login \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token comment\"\n  }, \"# credentials loaded automatically from envs ARCHITECT_EMAIL/ARCHITECT_PASSWORD\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Tag and Register Component\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" architect register ./architect.yml \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \"tag $\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \" github.event.release.tag_name \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\"), \"\\n      \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"-\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"name\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" Deploy to Production\\n        \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token key atrule\"\n  }, \"run\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \":\"), \" \", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"|\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token scalar string\"\n  }, \"\\n          architect deploy --environment production --auto-approve examples/my-component:${{ github.event.release.tag_name }}\")))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#gitops-releases","title":"GitOps releases","items":[{"url":"#sync-staging-with-master","title":"Sync staging with master","items":[{"url":"#github-actions","title":"Github Actions"}]},{"url":"#cut-releases-for-production","title":"Cut releases for production","items":[{"url":"#github-actions-1","title":"Github Actions"}]}]}]},"frontmatter":{"title":"GitOps releases","description":null,"author":null,"date":null,"image":null}}}]},"all":{"edges":[{"node":{"id":"6ca2c250-227d-5ef2-8046-4a958d927040","fileAbsolutePath":"/opt/build/repo/src/pages/docs/_NO-PAGES-HERE.md","frontmatter":{"title":""},"fields":{"order":"0","parent":null,"slug":"_NO-PAGES-HERE","key":"_NO-PAGES-HERE"}}},{"node":{"id":"a46d338e-d3c3-579f-9d4d-a9e75e2efa04","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/0-getting-started/index.md","frontmatter":{"title":"Getting started"},"fields":{"order":"0.0","parent":null,"slug":"getting-started/index","key":"getting-started"}}},{"node":{"id":"a3f0dd71-19bc-5964-9964-19284797ea04","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/0-getting-started/0-introduction.md","frontmatter":{"title":"Introduction"},"fields":{"order":"0.0","parent":"getting-started","slug":"getting-started/introduction","key":"introduction"}}},{"node":{"id":"55f5bb40-378d-56ac-a5fd-db2a54ffa5f6","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/0-getting-started/1-external-services.md","frontmatter":{"title":"External services"},"fields":{"order":"0.1","parent":"getting-started","slug":"getting-started/external-services","key":"external-services"}}},{"node":{"id":"b67404b5-991c-51f5-a1ff-d74262436a56","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/0-getting-started/2-working-with-tasks.md","frontmatter":{"title":"Working With Tasks"},"fields":{"order":"0.2","parent":"getting-started","slug":"getting-started/working-with-tasks","key":"working-with-tasks"}}},{"node":{"id":"7653fe9f-2e4d-5a17-b9e3-f3ca4f9bb91c","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/index.md","frontmatter":{"title":"Components"},"fields":{"order":"1.0","parent":null,"slug":"components/index","key":"components"}}},{"node":{"id":"86593204-32c2-52ad-b6f0-35699b1dcb9a","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/0-architect-yml.md","frontmatter":{"title":"architect.yml"},"fields":{"order":"1.0","parent":"components","slug":"components/architect-yml","key":"architect-yml"}}},{"node":{"id":"7ebce8d0-bc94-5dd6-b8de-ee3201b5a538","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/1-services.md","frontmatter":{"title":"Services"},"fields":{"order":"1.1","parent":"components","slug":"components/services","key":"services"}}},{"node":{"id":"e0ede896-cccc-55e6-b53a-661b5b357f09","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/2-service-discovery.md","frontmatter":{"title":"Service discovery"},"fields":{"order":"1.2","parent":"components","slug":"components/service-discovery","key":"service-discovery"}}},{"node":{"id":"a269f179-05ce-5565-b3ab-79489f7f4d63","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/3-interfaces.md","frontmatter":{"title":"Interfaces"},"fields":{"order":"1.3","parent":"components","slug":"components/interfaces","key":"interfaces"}}},{"node":{"id":"1ff85f82-951c-5af0-8b58-e43b27a4f931","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/4-dependencies.md","frontmatter":{"title":"Dependencies"},"fields":{"order":"1.4","parent":"components","slug":"components/dependencies","key":"dependencies"}}},{"node":{"id":"54f8cba0-551c-5a55-8e03-5dd04553b015","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/5-tasks.md","frontmatter":{"title":"Tasks"},"fields":{"order":"1.5","parent":"components","slug":"components/tasks","key":"tasks"}}},{"node":{"id":"bacb11d2-c055-5f25-854a-d6f518bf4017","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/6-parameters.md","frontmatter":{"title":"Parameters"},"fields":{"order":"1.6","parent":"components","slug":"components/parameters","key":"parameters"}}},{"node":{"id":"a5f1c45e-8135-5905-851f-806b8304a9a2","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/7-local-configuration.md","frontmatter":{"title":"Local configuration"},"fields":{"order":"1.7","parent":"components","slug":"components/local-configuration","key":"local-configuration"}}},{"node":{"id":"5473f945-539f-5604-a296-d46202c4f927","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/1-components/8-ingress-rules.md","frontmatter":{"title":"Ingress rules"},"fields":{"order":"1.8","parent":"components","slug":"components/ingress-rules","key":"ingress-rules"}}},{"node":{"id":"a7440547-79ad-5125-87f4-4c63e605a3ed","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/index.md","frontmatter":{"title":"Deployments"},"fields":{"order":"2.0","parent":null,"slug":"deployments/index","key":"deployments"}}},{"node":{"id":"8f583e77-4a46-5bba-b94f-56a28fa4f132","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/0-local-environments.md","frontmatter":{"title":"Local environments"},"fields":{"order":"2.0","parent":"deployments","slug":"deployments/local-environments","key":"local-environments"}}},{"node":{"id":"a0ead35e-e924-5e87-a72d-b9c0e5addf98","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/1-automated-previews.md","frontmatter":{"title":"Automated preview environments"},"fields":{"order":"2.1","parent":"deployments","slug":"deployments/automated-previews","key":"automated-previews"}}},{"node":{"id":"da390951-9a64-5c67-b884-2e7b46ad42b8","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/2-gitops-releases.md","frontmatter":{"title":"GitOps releases"},"fields":{"order":"2.2","parent":"deployments","slug":"deployments/gitops-releases","key":"gitops-releases"}}},{"node":{"id":"6019f30c-1016-5e73-a67b-4297e071766c","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/3-secrets.md","frontmatter":{"title":"Secrets"},"fields":{"order":"2.3","parent":"deployments","slug":"deployments/secrets","key":"secrets"}}},{"node":{"id":"2218af9b-3bd7-54e2-b8c5-075d54ee55b9","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/4-custom-domains.md","frontmatter":{"title":"Custom domains"},"fields":{"order":"2.4","parent":"deployments","slug":"deployments/custom-domains","key":"custom-domains"}}},{"node":{"id":"7b3d7a73-fa30-5a75-a62c-2a83c6c8aa87","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/5-deployment-rollbacks.md","frontmatter":{"title":"Pipeline rollbacks"},"fields":{"order":"2.5","parent":"deployments","slug":"deployments/deployment-rollbacks","key":"deployment-rollbacks"}}},{"node":{"id":"df87d55d-68be-542e-ad07-7e685b518d4e","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/2-deployments/6-multitenant-deployments.md","frontmatter":{"title":"Multi-Tenant Deployments"},"fields":{"order":"2.6","parent":"deployments","slug":"deployments/multitenant-deployments","key":"multitenant-deployments"}}},{"node":{"id":"90dcd6b8-6865-5bef-a54a-b4e66b800928","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/5-reference/index.md","frontmatter":{"title":"Reference"},"fields":{"order":"5.0","parent":null,"slug":"reference/index","key":"reference"}}},{"node":{"id":"0b6a7522-25cc-574b-8878-f26143c682f3","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/5-reference/0-cli.md","frontmatter":{"title":""},"fields":{"order":"5.0","parent":"reference","slug":"reference/cli","key":"cli"}}},{"node":{"id":"2399c8ac-af88-5625-ba5f-e40f6966da47","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/5-reference/1-contexts.md","frontmatter":{"title":"Contexts"},"fields":{"order":"5.1","parent":"reference","slug":"reference/contexts","key":"contexts"}}},{"node":{"id":"14307377-6e9d-53ef-a21e-8de5b7131c20","fileAbsolutePath":"/opt/build/repo/architect-cli/docs/5-reference/2-architect-yml.md","frontmatter":{"title":"architect.yml"},"fields":{"order":"5.2","parent":"reference","slug":"reference/architect-yml","key":"architect-yml"}}}]}},"pageContext":{"slug":"deployments/gitops-releases"}},
    "staticQueryHashes": ["764694655"]}