diff --git a/.drone.yml b/.drone.yml index e027b23aa5f..16caa00cb3a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -506,15 +506,13 @@ steps: - test-backend - test-frontend -- name: release-next-npm-packages +- name: release-canary-npm-packages image: grafana/build-container:1.3.0 commands: - - ./node_modules/.bin/lerna bootstrap - - echo "//registry.npmjs.org/:_authToken=$${NPM_TOKEN}" >> ~/.npmrc - - ./scripts/circle-release-next-packages.sh + - ./scripts/circle-release-canary-packages.sh environment: - NPM_TOKEN: - from_secret: npm_token + GITHUB_PACKAGE_TOKEN: + from_secret: github_package_token depends_on: - end-to-end-tests diff --git a/packages/README.md b/packages/README.md index bbd8dfb6ec6..480716c4149 100644 --- a/packages/README.md +++ b/packages/README.md @@ -27,7 +27,29 @@ Every commit to master that has changes within the `packages` directory is a sub - ``` -Automatic prereleases are published under the `canary` dist tag. +Automatic prereleases are published under the `canary` dist tag to the [github package registry](https://docs.github.com/en/free-pro-team@latest/packages/publishing-and-managing-packages/about-github-packages). + +#### Consuming prereleases + +As mentioned above the `canary` releases are published to the Github package registry rather than the NPM registry. If you wish to make use of these prereleases please follow these steps: + +1. You must use a personal access token to install packages from Github. To create an access token [click here](https://github.com/settings/tokens) and create a token with the `read:packages` scope. Make a copy of the token. +2. Create / modify your `~/.npmrc` file with the following: + +``` +@grafana:registry=https://npm.pkg.github.com +//npm.pkg.github.com/:_authToken={INSERT_GH_TOKEN_HERE} +``` + +3. Update the package.json of your project to use either the `canary` channel or a version of the `canary` channel + +```json +// plugin's package.json +{ + ... + "@grafana/data": "canary" +} +``` ### Manual release diff --git a/scripts/circle-release-canary-packages.sh b/scripts/circle-release-canary-packages.sh new file mode 100755 index 00000000000..882549d03f0 --- /dev/null +++ b/scripts/circle-release-canary-packages.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -eo pipefail + +# shellcheck source=./scripts/helpers/exit-if-fail.sh +source "$(dirname "$0")/helpers/exit-if-fail.sh" + +function prepare_version_commit () { + echo $'\nCommitting version changes. This commit will not be pushed!' + git config --global user.email "drone@grafana.com" + git config --global user.name "Drone" + git commit -am "Version commit" +} + +# check if there were any changes to packages between current and previous commit +count=$(git diff HEAD~1..HEAD --name-only -- packages | awk '{c++} END {print c}') +count="1" +if [ -z "$count" ]; then + echo "No changes in packages, skipping packages publishing" +else + echo "Changes detected in ${count} packages" + echo "Starting to release latest canary version" + + echo "@grafana:registry=https://npm.pkg.github.com" >> ~/.npmrc + echo "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGE_TOKEN}" >> ~/.npmrc + + # For some reason the --no-git-reset is not working as described so + # to get lerna to publish the packages we need to do a commit to the + # repository. We will not push this commit to the origin repository. + prepare_version_commit + + echo $'\nPublishing packages' + yarn packages:publishCanary --registry https://npm.pkg.github.com +fi + diff --git a/scripts/circle-release-next-packages.sh b/scripts/circle-release-next-packages.sh deleted file mode 100755 index 04e9bbf6248..00000000000 --- a/scripts/circle-release-next-packages.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -PACKAGES=(ui toolkit data runtime e2e e2e-selectors) - -# shellcheck source=./scripts/helpers/exit-if-fail.sh -source "$(dirname "$0")/helpers/exit-if-fail.sh" - -function prepare_version_commit () { - echo $'\nCommitting version changes. This commit will not be pushed!' - git config --global user.email "drone@grafana.com" - git config --global user.name "Drone" - git commit -am "Version commit" -} - -function unpublish_previous_canary () { - _package=$1 - echo $'\nUnpublishing previous canary packages' - # dist-tag next to be changed to canary when https://github.com/grafana/grafana/pull/18195 is merged - CURRENT_CANARY=$(npm view @grafana/"${_package}" dist-tags.canary) - if [ -z "${CURRENT_CANARY}" ]; then - echo "@grafana/${_package} - Nothing to unpublish" - else - echo "Unpublish @grafana/${_package}@${CURRENT_CANARY}" - _response=$(npm unpublish @grafana/"${_package}"@"${CURRENT_CANARY}" 2>&1) || ( - echo "$_response" | grep "404" || ( - # We want to deprecate here, rather than fail and return an non-0 exit code - echo "Unpublish unsuccessful [$?]. Deprecating @grafana/${_package}@${CURRENT_CANARY}" - _response=$(npm deprecate @grafana/"${_package}"@"${CURRENT_CANARY}" "this package has been deprecated" 2>&1) || ( - echo "$_response" | grep "404" && return 0 - ) - ) - ) - fi -} - -# check if there were any changes to packages between current and previous commit -count=$(git diff HEAD~1..HEAD --name-only -- packages | awk '{c++} END {print c}') -count="1" -if [ -z "$count" ]; then - echo "No changes in packages, skipping packages publishing" -else - echo "Changes detected in ${count} packages" - echo "Starting to release latest canary version" - - # For some reason the --no-git-reset is not working as described so - # to get lerna to publish the packages we need to do a commit to the - # repository. We will not push this commit to the origin repository. - prepare_version_commit - - # Frontend packages have already been versioned and built by the - # build-frontend step in drone. We will only unpublish the previous - # canary version and publish the current built version as the new - # latest canary build. - for PACKAGE in "${PACKAGES[@]}" - do - unpublish_previous_canary "$PACKAGE" - done - - echo $'\nPublishing packages' - yarn packages:publishCanary -fi - diff --git a/scripts/lib.star b/scripts/lib.star index 0c9e446dec0..d93948675f3 100644 --- a/scripts/lib.star +++ b/scripts/lib.star @@ -736,25 +736,23 @@ def mysql_integration_tests_step(): ], } -def release_next_npm_packages_step(edition): +def release_canary_npm_packages_step(edition): if edition == 'enterprise': return None return { - 'name': 'release-next-npm-packages', + 'name': 'release-canary-npm-packages', 'image': build_image, 'depends_on': [ 'end-to-end-tests', ], 'environment': { - 'NPM_TOKEN': { - 'from_secret': 'npm_token', + 'GITHUB_PACKAGE_TOKEN': { + 'from_secret': 'github_package_token', }, }, 'commands': [ - './node_modules/.bin/lerna bootstrap', - 'echo "//registry.npmjs.org/:_authToken=$${NPM_TOKEN}" >> ~/.npmrc', - './scripts/circle-release-next-packages.sh', + './scripts/circle-release-canary-packages.sh', ], } diff --git a/scripts/master.star b/scripts/master.star index 7ecca3e3cb6..46404c58c2b 100644 --- a/scripts/master.star +++ b/scripts/master.star @@ -25,7 +25,7 @@ load( 'enterprise_downstream_step', 'frontend_metrics_step', 'publish_storybook_step', - 'release_next_npm_packages_step', + 'release_canary_npm_packages_step', 'upload_packages_step', 'deploy_to_kubernetes_step', 'publish_packages_step', @@ -60,7 +60,7 @@ def get_steps(edition, is_downstream=False): build_docker_images_step(edition=edition, ver_mode=ver_mode, ubuntu=True, publish=publish), postgres_integration_tests_step(), mysql_integration_tests_step(), - release_next_npm_packages_step(edition), + release_canary_npm_packages_step(edition), upload_packages_step(edition=edition, ver_mode=ver_mode, is_downstream=is_downstream), deploy_to_kubernetes_step(edition=edition, is_downstream=is_downstream), ]