From 6d845f6b61d8f8765014d21457fa983690277f90 Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Wed, 9 Jan 2019 13:56:08 -0800 Subject: [PATCH 1/2] Add a grind script to sanity-check a release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will help avoid accidentally releasing dev versions 😖. --- .travis.yml | 9 +++++++-- tool/grind.dart | 1 + tool/grind/sanity_check.dart | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tool/grind/sanity_check.dart diff --git a/.travis.yml b/.travis.yml index c4a0bb191..a3be6a8c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -73,10 +73,15 @@ script: tool/travis/test.sh jobs: include: - # Deploy to GitHub. - - stage: deploy 1 + # Sanity check before releasing anywhere. + - stage: sanity check if: &deploy-if (type IN (push, api)) AND (repo = sass/dart-sass) AND tag =~ ^\d+\.\d+\.\d+([+-].*)?$ + script: pub run grinder sanity-check-before-release + + # Deploy to GitHub. + - stage: deploy 1 + if: *deploy-if env: &github-env - GITHUB_USER=sassbot # GITHUB_AUTH="..." diff --git a/tool/grind.dart b/tool/grind.dart index 3c01d80f7..16f422900 100644 --- a/tool/grind.dart +++ b/tool/grind.dart @@ -13,6 +13,7 @@ export 'grind/chocolatey.dart'; export 'grind/github.dart'; export 'grind/homebrew.dart'; export 'grind/npm.dart'; +export 'grind/sanity_check.dart'; export 'grind/standalone.dart'; export 'grind/synchronize.dart'; diff --git a/tool/grind/sanity_check.dart b/tool/grind/sanity_check.dart new file mode 100644 index 000000000..8d49c3f5a --- /dev/null +++ b/tool/grind/sanity_check.dart @@ -0,0 +1,22 @@ +// Copyright 2019 Google Inc. Use of this source code is governed by an +// MIT-style license that can be found in the LICENSE file or at +// https://opensource.org/licenses/MIT. + +import 'dart:io'; + +import 'package:collection/collection.dart'; +import 'package:grinder/grinder.dart'; +import 'package:pub_semver/pub_semver.dart'; + +import 'utils.dart'; + +@Task('Verify that the package is in a good state to release.') +sanityCheckBeforeRelease() { + if (const ListEquality().equals(Version.parse(version).preRelease, ["dev"])) { + fail("$version is a dev release."); + } + + if (!File("CHANGELOG.md").readAsStringSync().contains(RegExp("^## ${RegExp.escape(version)}\$", multiLine: true))) { + fail("There's no CHANGELOG entry for $version."); + } +} From 5e4f7f57a1179e77774c274b4957f95dbdfeba36 Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Wed, 9 Jan 2019 13:59:31 -0800 Subject: [PATCH 2/2] Verify that the Travis tag matches the pubspec version --- tool/grind/sanity_check.dart | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tool/grind/sanity_check.dart b/tool/grind/sanity_check.dart index 8d49c3f5a..531947a4c 100644 --- a/tool/grind/sanity_check.dart +++ b/tool/grind/sanity_check.dart @@ -12,11 +12,18 @@ import 'utils.dart'; @Task('Verify that the package is in a good state to release.') sanityCheckBeforeRelease() { + var travisTag = environment("TRAVIS_TAG"); + if (travisTag != version) { + fail("TRAVIS_TAG $travisTag is different than pubspec version $version."); + } + if (const ListEquality().equals(Version.parse(version).preRelease, ["dev"])) { fail("$version is a dev release."); } - if (!File("CHANGELOG.md").readAsStringSync().contains(RegExp("^## ${RegExp.escape(version)}\$", multiLine: true))) { + var versionHeader = + RegExp("^## ${RegExp.escape(version)}\$", multiLine: true); + if (!File("CHANGELOG.md").readAsStringSync().contains(versionHeader)) { fail("There's no CHANGELOG entry for $version."); } }