{"componentChunkName":"component---src-templates-doc-tsx","path":"/product/cli/releases/","result":{"data":{"file":{"id":"695c0264-4bf2-5677-9f70-cb3f677b1c50","relativePath":"product/cli/releases.mdx","sourceInstanceName":"docs","childMarkdownRemark":null,"childMdx":{"body":"function _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/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Release Management\",\n  \"sidebar_order\": 2\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Note = makeShortcode(\"Note\");\nvar CodeTabs = makeShortcode(\"CodeTabs\");\nvar CodeBlock = makeShortcode(\"CodeBlock\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli\"), \" tool can be used for release management on Sentry. It allows you to create, edit and delete releases as well as upload release artifacts for them. Note that releases are global per organization. If you want the releases in different projects to be treated as separate entities, make the version name unique across the organization. For example, if you have projectA and projectB that share version numbers, you can name the releases \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"projectA-1.0\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"projectB-1.0\"), \" respectively.\"), mdx(Note, {\n    mdxType: \"Note\"\n  }, mdx(\"markdown\", null, mdx(\"p\", null, \"Because releases work on projects you will need to specify the organization and project you are working with. For more information about this refer to \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/product/cli/configuration/#sentry-cli-working-with-projects\"\n  }), \"Working with Projects\"), \".\"))), mdx(\"h2\", {\n    \"id\": \"creating-releases\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#creating-releases\",\n    \"aria-label\": \"creating releases permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Creating Releases\"), mdx(\"p\", null, \"Releases are created with the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli releases new\"), \" command. It takes at the very least a version identifier that uniquely identifies the releases. There are a few restrictions -- the release name cannot:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"contain newlines or spaces\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"use a forward slash (\\\"/\\\"), back slash (\\\"\\\\\\\"), period (\\\".\\\"), or double period (\\\"..\\\")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"exceed 200 characters\")), mdx(\"p\", null, \"The value can be arbitrary, but for certain platforms, recommendations exist:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"for mobile devices use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"package-name@version-number\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"package-name@version-number+build-number\"), \". \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Do not\"), \" use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"VERSION_NUMBER (BUILD_NUMBER)\"), \" as the parenthesis are used for display purposes (\", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"mailto:foo@1.0\"\n  }), \"foo@1.0\"), \"+2 becomes 1.0 (2)), so invoking them will cause an error.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"if you use a DVCS we recommed using the identifying hash (eg: the commit SHA, \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"da39a3ee5e6b4b0d3255bfef95601890afd80709\"), \"). You can let sentry-cli automatically determine this hash for supported version control systems with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"sentry-cli releases propose-version\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"if you tag releases we recommend using the release tag (eg: \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"v1.0.0\"), \").\")), mdx(\"p\", null, \"Releases can also be auto created by different systems. For instance upon uploading a source map a release is automatically created. Likewise releases are created by some clients when an event for a release comes in.\"), mdx(\"h2\", {\n    \"id\": \"finalizing-releases\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#finalizing-releases\",\n    \"aria-label\": \"finalizing releases permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Finalizing Releases\"), mdx(\"p\", null, \"By default a release is created \\u201Cunreleased\\u201D. Finalizing a release means that we fill in a second timestamp on the release record, which is prioritized over \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"date_created\"), \" when sorting releases in the UI. This also affects what counts as \\\"the next release\\\" for resolving issues, what release is used as the base for associating commits if you use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--auto\"), \", and creates an entry in the Activity stream.\"), mdx(\"p\", null, \"This can be changed by passing either \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--finalize\"), \" to the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"new\"), \" command which will immediately finalize the release or you can separately call \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli releases finalize VERSION\"), \" later on. The latter is useful if you are managing releases as part of a build process e.g.\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token shebang important\"\n  }), \"#!/bin/sh\"), \"\\nsentry-cli releases new \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$VERSION\"), \"\\\"\"), \"\\n\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token comment\"\n  }), \"# do your build steps here\"), \"\\n\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token comment\"\n  }), \"# once you are done, finalize\"), \"\\nsentry-cli releases finalize \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$VERSION\"), \"\\\"\"))))))), mdx(\"p\", null, \"You can also choose to finalize the release when you've made the release live (when you've deployed to your machines, enabled in the App store, etc.).\"), mdx(\"p\", null, \"If you are using git you can ask Sentry to determine \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"$VERSION\"), \":\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token shebang important\"\n  }), \"#!/bin/sh\"), \"\\n\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token assign-left variable\"\n  }), \"VERSION\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token operator\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token variable\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"`\"), \"sentry-cli releases propose-version\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"`\")))))))), mdx(\"h2\", {\n    \"id\": \"sentry-cli-commit-integration\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#sentry-cli-commit-integration\",\n    \"aria-label\": \"sentry cli commit integration permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Commit Integration\"), mdx(\"p\", null, \"If you have \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/product/releases/#link-a-repository\"\n  }), \"repositories configured\"), \" within your Sentry organization you can associate commits with your release.\"), mdx(\"p\", null, \"There are two modes in which you can use this. One is the fully automatic mode. If you are deploying from a git repository and sentry-cli can discover the git repository from the current working directory you can set the commits with the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--auto\"), \" flag:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases set-commits \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$VERSION\"), \"\\\"\"), \" --auto\")))))), mdx(\"p\", null, \"In case you are deploying without access to the git repository, you can manually specify the commits instead. To do this, pass the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--commit\"), \" parameter to the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"set-commits\"), \" command in the format \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"REPO_NAME@REVISION\"), \". You can repeat this for as many repositories as you have:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases set-commits \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$VERSION\"), \"\\\"\"), \" --commit \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"my-repo@deadbeef\\\"\"))))))), mdx(\"p\", null, \"To see which repos are available for the organization, you can run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli repos list\"), \" which will return a list of configured repositories.\"), mdx(\"p\", null, \"Note that you need to refer to releases you need to use the actual full commit SHA. If you want to refer to tags or references (like \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"HEAD\"), \"), the repository needs to he checked out and reachable from the path where you invoke \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"sentry-cli\"), \".\"), mdx(\"p\", null, \"If you also want to set a previous commit instead of letting the server use the previous release as the base point you can do that by setting a commit range:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases set-commits \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$VERSION\"), \"\\\"\"), \" --commit \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"\\\"my-repo@from..to\\\"\"))))))), mdx(\"h3\", {\n    \"id\": \"alternatively-without-a-repository-integration\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h3\"\n  }, {\n    \"href\": \"#alternatively-without-a-repository-integration\",\n    \"aria-label\": \"alternatively without a repository integration permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Alternatively: Without a Repository Integration\"), mdx(\"p\", null, \"You can still use the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--auto\"), \" flag, and the CLI will automatically use the git tree of your local repo, and associate commits between the previous release's commit and the current head commit with the release. If this is the first release, Sentry will use the latest 20 commits. This behavior is configurable with the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--initial-depth\"), \" flag.\"), mdx(\"p\", null, \"You can use the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--local\"), \" flag to enable this behavior by default.\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases set-commits --local \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$VERSION\"))))))), mdx(\"p\", null, \"If you receive an \\\"Unable to Fetch Commits\\\" email, take a look at our \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://help.sentry.io/hc/en-us/articles/360019866834-Why-am-I-receiving-the-email-Unable-to-Fetch-Commits-\"\n  }), \"Help Center Article\"), \".\"), mdx(\"h2\", {\n    \"id\": \"managing-release-artifacts\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#managing-release-artifacts\",\n    \"aria-label\": \"managing release artifacts permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Managing Release Artifacts\"), mdx(\"p\", null, \"When you are working with JavaScript and other platforms, you can upload release artifacts to Sentry which are then considered during processing. The most common release artifact are \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/clients/javascript/sourcemaps/#raven-js-sourcemaps\"\n  }), \"source maps\"), \" for which \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli\"), \" has specific support.\"), mdx(\"p\", null, \"To manage release artfacts the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli releases files\"), \" command can be used which itself provides various sub commands.\"), mdx(\"h3\", {\n    \"id\": \"upload-files\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h3\"\n  }, {\n    \"href\": \"#upload-files\",\n    \"aria-label\": \"upload files permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Upload Files\"), mdx(\"p\", null, \"The most common use case is to upload files. For the generic upload the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sentry-cli releases files VERSION upload\"), \" command can be used. However since most release artifacts are JavaScript source map related we have a \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"#sentry-cli-sourcemaps\"\n  }), \"Upload Source Maps\"), \" convenience method for that.\"), mdx(\"p\", null, \"Files uploaded are typically named with a full (eg: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"http://example.com/foo.js\"), \") or truncated URL (eg: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"~/foo.js\"), \").\"), mdx(\"p\", null, \"Release artifacts are only considered at time of event processing. So while it\\u2019s possible to modify release artifacts after the fact they will only be considered for future events of that release.\"), mdx(\"p\", null, \"The first argument to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"upload\"), \" is the path to the file, the second is an optional URL we should associate it with. Note that if you want to use an abbreviated URL (eg: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"~/foo.js\"), \") make sure to use single quotes to avoid the expansion by the shell to your home folder.\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases files VERSION upload /path/to/file \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"'~/file.js'\"))))))), mdx(\"h3\", {\n    \"id\": \"sentry-cli-sourcemaps\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h3\"\n  }, {\n    \"href\": \"#sentry-cli-sourcemaps\",\n    \"aria-label\": \"sentry cli sourcemaps permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Upload Source Maps\"), mdx(\"p\", null, \"For source map upload, a separate command is provided which assists you in uploading and verifying source maps:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases files VERSION upload-sourcemaps /path/to/sourcemaps\")))))), mdx(\"p\", null, \"This command provides a bunch of options and attempts as much auto detection as possible. By default, it will scan the provided path for files and upload them named by their path with a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"~/\"), \" prefix. It will also attempt to figure out references between minified files and source maps based on the filename. So if you have a file named \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"foo.min.js\"), \" which is a minified JavaScript file and a source map named \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"foo.min.map\"), \" for example, it will send a long a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Sourcemap\"), \" header to associate them. This works for files the system can detect a relationship of.\"), mdx(\"p\", null, \"The following options exist to change the behavior of the upload command:\"), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--no-sourcemap-reference\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"This prevents the automatic detection of source map references. It\\u2019s not recommended to use this option since the system falls back to not emitting a reference anyways. It is however useful if you are manually adding \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"sourceMapURL\"), \" comments to the minified files and you know that they are more correct than the autodetection.\"))), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--rewrite\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"When this option is provided, \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"sentry-cli\"), \" will rewrite the source maps before upload. This does two things:\"))), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"It flattens out indexed source maps. This has the advantage that it can compress source maps sometimes which might improve your processing times and can work with tools that embed local paths for source map references which would not work on the server. This is useful when working with source maps for development purposes in particular.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Local file references in source maps for source contents are inlined. This works particularly well with React Native projects which might reference thousands of files you probably do not want to upload separately.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"It automatically validates source maps before upload very accurately which can spot errors you would not find otherwise until an event comes in. This is an improved version of what \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"--validate\"), \" does otherwise.\")), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--strip-prefix\"), \" / \", mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--strip-common-prefix\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"When paired with \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"--rewrite\"), \" this will chop-off a prefix from all sources references inside uploaded source maps. For instance, you can use this to remove a path that is build machine specific. The common prefix version will attempt to automatically guess what the common prefix is and chop that one off automatically.\\nThis will not modify the uploaded sources paths. To do that, point the \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"upload\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"upload-sourcemaps\"), \" command to a more precise directory instead.\"))), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--validate\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"This attempts source map validation before upload when rewriting is not enabled. It will spot a variety of issues with source maps and cancel the upload if any are found. This is not the default as this can cause false positives.\"))), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--url-prefix\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"This sets an URL prefix in front of all files. This defaults to \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"~/\"), \" but you might want to set this to the full URL. This is also useful if your files are stored in a sub folder. eg: \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"--url-prefix '~/static/js'\")))), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--ext\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"Overrides the list of file extensions to upload. By default, the following file extensions are processed: \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"js\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"map\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"jsbundle\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"bundle\"), \". The tool will automatically detect the type of the file by the file contents (eg: sources, minified sources, and source maps) and act appropriately. For multiple extensions you need to repeat the option, e.g.: \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"--ext js --ext map\"), \".\"))), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--ignore\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"Specifies one or more patterns of ignored files and folders. Overrides patterns specified in the ignore file. See \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"--ignore-file\"), \" for more information. Note that unlike \", mdx(\"inlineCode\", {\n    parentName: \"dd\"\n  }, \"--ignore-file\"), \", this argument is interpreted relative to the specified path argument.\"))), mdx(\"p\", null, mdx(\"dl\", {\n    parentName: \"p\"\n  }, mdx(\"dt\", {\n    parentName: \"dl\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"dt\"\n  }, \"--ignore-file\")), mdx(\"dd\", {\n    parentName: \"dl\"\n  }, \"Specifies a file containing patterns of files and folders to ignore during the scan. Ignore patterns follow the \", mdx(\"a\", _extends({\n    parentName: \"dd\"\n  }, {\n    \"href\": \"https://git-scm.com/docs/gitignore#_pattern_format\"\n  }), \"gitignore\"), \" rules and are evaluated relative to the location of the ignore file. The file is assumed in the current working directory or any of its parent directories.\"))), mdx(\"p\", null, \"Some example usages:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases files \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token number\"\n  }), \"0.1\"), \" upload-sourcemaps /path/to/sourcemaps\\nsentry-cli releases files \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token number\"\n  }), \"0.1\"), \" upload-sourcemaps /path/to/sourcemaps \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"\\\\\"), \"\\n    --url-prefix \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token string\"\n  }), \"'~/static/js`\\nsentry-cli releases files 0.1 upload-sourcemaps /path/to/sourcemaps \\\\\\n    --url-prefix '\"), \"~/static/js` --rewrite --strip-common-prefix\\nsentry-cli releases files \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token number\"\n  }), \"0.1\"), \" upload-sourcemaps /path/to/sourcemaps \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"\\\\\"), \"\\n    --ignore-file .sentryignore\")))))), mdx(\"h3\", {\n    \"id\": \"list-files\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h3\"\n  }, {\n    \"href\": \"#list-files\",\n    \"aria-label\": \"list files permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"List Files\"), mdx(\"p\", null, \"To list uploaded files, the following command can be used:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases files VERSION list\")))))), mdx(\"p\", null, \"This will return a list of all uploaded files for that release.\"), mdx(\"h3\", {\n    \"id\": \"delete-files\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h3\"\n  }, {\n    \"href\": \"#delete-files\",\n    \"aria-label\": \"delete files permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Delete Files\"), mdx(\"p\", null, \"You can also delete already uploaded files. Either by name or all files at once:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases files VERSION delete NAME_OF_FILE\\nsentry-cli releases files VERSION delete --all\")))))), mdx(\"h2\", {\n    \"id\": \"creating-deploys\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#creating-deploys\",\n    \"aria-label\": \"creating deploys permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Creating Deploys\"), mdx(\"p\", null, \"You can also associate deploys with releases. To create a deploy you first create a release and then a deploy for it. At the very least, you should supply the \\u201Cenvironment\\u201D the deploy goes to (production, staging etc.). You can freely define this:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases deploys VERSION new -e ENVIRONMENT\")))))), mdx(\"p\", null, \"Optionally, you can also define how long the deploy took:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token assign-left variable\"\n  }), \"start\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token operator\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token variable\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token function\"\n  }), \"date\"), \" +%s\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \")\")), \"\\n\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"..\"), \".\\n\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token assign-left variable\"\n  }), \"now\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token operator\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token variable\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token function\"\n  }), \"date\"), \" +%s\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \")\")), \"\\nsentry-cli releases deploys VERSION new -e ENVIRONMENT -t \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token variable\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"$((\"), \"now\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token operator\"\n  }), \"-\"), \"start\", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"token variable\"\n  }), \"))\")))))))), mdx(\"p\", null, \"Deploys can be listed too (however they cannot be deleted):\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"bash\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"bash\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-bash\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"sentry-cli releases deploys VERSION list\")))))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#creating-releases","title":"Creating Releases"},{"url":"#finalizing-releases","title":"Finalizing Releases"},{"url":"#commit-integration-sentry-cli-commit-integration","title":"Commit Integration {#sentry-cli-commit-integration}","items":[{"url":"#alternatively-without-a-repository-integration","title":"Alternatively: Without a Repository Integration"}]},{"url":"#managing-release-artifacts","title":"Managing Release Artifacts","items":[{"url":"#upload-files","title":"Upload Files"},{"url":"#upload-source-maps-sentry-cli-sourcemaps","title":"Upload Source Maps {#sentry-cli-sourcemaps}"},{"url":"#list-files","title":"List Files"},{"url":"#delete-files","title":"Delete Files"}]},{"url":"#creating-deploys","title":"Creating Deploys"}]},"internal":{"type":"Mdx"}}}},"pageContext":{"excerpt":"The  sentry-cli  tool can be used for release management on Sentry. It allows you to create, edit and delete releases as well as upload release artifacts for them. Note that releases are global per organization. If you want the releases in different projects to be treated as separate entities, make the version name unique across the organization. For example, if you have projectA and projectB that share version numbers, you can name the releases  projectA-1.0  and  projectB-1.0  respectively. Because releases work on projects you will need to specify the organization and project you are working with. For more information about this refer to  Working with Projects . Creating Releases Releases are created with the  sentry-cli releases new  command. It takes at the very least a version identifier that uniquely identifies the releases. There are a few restrictions -- the release name cannot: contain newlines or spaces use a forward slash (\"/\"), back slash (\"\\\"), period (\".\"), or double period (\"..\") exceed 200 characters The value can be arbitrary, but for certain platforms, recommendations exist: for mobile devices use  package-name@version-number  or  package-name@version-number+build-number .  Do not  use  VERSION_NUMBER (BUILD_NUMBER)  as the parenthesis are used for display purposes ( foo@1.0 +2 becomes 1.0 (2)), so invoking them will cause an error. if you use a DVCS we recommed using the identifying hash (eg: the commit SHA,  da39a3ee5e6b4b0d3255bfef95601890afd80709 ). You can let sentry-cli automatically determine this hash for supported version control systems with  sentry-cli releases propose-version . if you tag releases we recommend using the release tag (eg:  v1.0.0 ). Releases can also be auto created by different systems. For instance upon uploading a source map a release is automatically created. Likewise releases are created by some clients when an event for a release comes in. Finalizing Releases By default a release is created “unreleased”. Finalizing a release means that we fill in a second timestamp on the release record, which is prioritized over  date_created  when sorting releases in the UI. This also affects what counts as \"the next release\" for resolving issues, what release is used as the base for associating commits if you use  --auto , and creates an entry in the Activity stream. This can be changed by passing either  --finalize  to the  new  command which will immediately finalize the release or you can separately call  sentry-cli releases finalize VERSION  later on. The latter is useful if you are managing releases as part of a build process e.g. You can also choose to finalize the release when you've made the release live (when you've deployed to your machines, enabled in the App store, etc.). If you are using git you can ask Sentry to determine  $VERSION : Commit Integration {#sentry-cli-commit-integration} If you have  repositories configured  within your Sentry organization you can associate commits with your release. There are two modes in which you can use this. One is the fully automatic mode. If you are deploying from a git repository and sentry-cli can discover the git repository from the current working directory you can set the commits with the  --auto  flag: In case you are deploying without access to the git repository, you can manually specify the commits instead. To do this, pass the  --commit  parameter to the  set-commits  command in the format  REPO_NAME@REVISION . You can repeat this for as many repositories as you have: To see which repos are available for the organization, you can run  sentry-cli repos list  which will return a list of configured repositories. Note that you need to refer to releases you need to use the actual full commit SHA. If you want to refer to tags or references (like  HEAD ), the repository needs to he checked out and reachable from the path where you invoke  sentry-cli . If you also want to set a previous commit instead of letting the server use the previous release as the base point you can do that by setting a commit range: Alternatively: Without a Repository Integration You can still use the  --auto  flag, and the CLI will automatically use the git tree of your local repo, and associate commits between the previous release's commit and the current head commit with the release. If this is the first release, Sentry will use the latest 20 commits. This behavior is configurable with the  --initial-depth  flag. You can use the  --local  flag to enable this behavior by default. If you receive an \"Unable to Fetch Commits\" email, take a look at our  Help Center Article . Managing Release Artifacts When you are working with JavaScript and other platforms, you can upload release artifacts to Sentry which are then considered during processing. The most common release artifact are  source maps  for which  sentry-cli  has specific support. To manage release artfacts the  sentry-cli releases files  command can be used which itself provides…","title":"Release Management","description":null,"draft":null,"noindex":null,"notoc":null,"sidebar_order":2,"redirect_from":null,"keywords":null,"id":"695c0264-4bf2-5677-9f70-cb3f677b1c50","legacy":false}},"staticQueryHashes":["1218203755","1222113826","1222113826","1766336459","2158593473","2764967025","3345802723","3818502851","3990806462","4015007367","4192517163","4264099332","518019976"]}