diff --git a/.travis.yml b/.travis.yml index 2b7217cd07..894321a0a4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,50 +37,7 @@ script: jobs: include: - node_js: '12' -after_success: npm run apply-next-version -deploy: - - provider: npm - src: "." - edge: true - email: aslushnikov@gmail.com - on: - branch: master - tag: next - api_token: - secure: MzswBGmhSf8AR47qvqEfwWLvMx7+UDLXL0CeTXdHi7gRg6XPQjnUf5xtV9+3WEsCrsUFa0rFYNKLQ8M2Qmubc1/UltnVQubF00/ImIW6gMRQn5wyE0CPKb+DPdSj892wh0LwCXzaUr3e7NdDRcOSRlvyIuPwhVZLeua5Z01CcIKQ/DCFguXrrgURB73hrrM77CdcPW3Fjy3SKo2tilBM0LX8KdJFxPqBTNA0CZwUdSGDyvyG6Z2+/RdMTh7appRdydKbvNVfAfNMo0vYPAwb7V+Exmxox2d/XKq0KeZusn20g17rZRndha9NPx/vGQrROz8FjSZh0kyqLfvxYCkh0qa7sj+DHOrxZnXSoFp5mTq7zm25GP7lp+MRzcEx2gGhpwu6j2n6XeFA1EuDtjDneLqGunK1UZA49ooQEfZoQHqtgoYV19VizG0kB3Lv8SAr/8zGZNofOWHaGCEGrof5WIC2HUJNurqXqVU5r/UUOy6eW941W0FNidbDZUvTbcI33dUlvvss7kDs4lHEBT4Hw/6Uusb2RLE69RgvNj83OaJ+F8V8e88ge4weYKhlcftlNS05UTSZiZQySXjiXyzYLZiZLTjO5T4zBITSAIP9mTdgfTYTPqApskzZZ1Yn5h35YcP8nopkO0WtKfAiZRV3/i/n/OdM+w8yYH6XBfQ4Gdk= - - provider: npm - src: "packages/playwright-firefox" - edge: true - email: aslushnikov@gmail.com - on: - branch: master - tag: next - api_token: - secure: MzswBGmhSf8AR47qvqEfwWLvMx7+UDLXL0CeTXdHi7gRg6XPQjnUf5xtV9+3WEsCrsUFa0rFYNKLQ8M2Qmubc1/UltnVQubF00/ImIW6gMRQn5wyE0CPKb+DPdSj892wh0LwCXzaUr3e7NdDRcOSRlvyIuPwhVZLeua5Z01CcIKQ/DCFguXrrgURB73hrrM77CdcPW3Fjy3SKo2tilBM0LX8KdJFxPqBTNA0CZwUdSGDyvyG6Z2+/RdMTh7appRdydKbvNVfAfNMo0vYPAwb7V+Exmxox2d/XKq0KeZusn20g17rZRndha9NPx/vGQrROz8FjSZh0kyqLfvxYCkh0qa7sj+DHOrxZnXSoFp5mTq7zm25GP7lp+MRzcEx2gGhpwu6j2n6XeFA1EuDtjDneLqGunK1UZA49ooQEfZoQHqtgoYV19VizG0kB3Lv8SAr/8zGZNofOWHaGCEGrof5WIC2HUJNurqXqVU5r/UUOy6eW941W0FNidbDZUvTbcI33dUlvvss7kDs4lHEBT4Hw/6Uusb2RLE69RgvNj83OaJ+F8V8e88ge4weYKhlcftlNS05UTSZiZQySXjiXyzYLZiZLTjO5T4zBITSAIP9mTdgfTYTPqApskzZZ1Yn5h35YcP8nopkO0WtKfAiZRV3/i/n/OdM+w8yYH6XBfQ4Gdk= - - provider: npm - src: "packages/playwright-chromium" - edge: true - email: aslushnikov@gmail.com - on: - branch: master - tag: next - api_token: - secure: MzswBGmhSf8AR47qvqEfwWLvMx7+UDLXL0CeTXdHi7gRg6XPQjnUf5xtV9+3WEsCrsUFa0rFYNKLQ8M2Qmubc1/UltnVQubF00/ImIW6gMRQn5wyE0CPKb+DPdSj892wh0LwCXzaUr3e7NdDRcOSRlvyIuPwhVZLeua5Z01CcIKQ/DCFguXrrgURB73hrrM77CdcPW3Fjy3SKo2tilBM0LX8KdJFxPqBTNA0CZwUdSGDyvyG6Z2+/RdMTh7appRdydKbvNVfAfNMo0vYPAwb7V+Exmxox2d/XKq0KeZusn20g17rZRndha9NPx/vGQrROz8FjSZh0kyqLfvxYCkh0qa7sj+DHOrxZnXSoFp5mTq7zm25GP7lp+MRzcEx2gGhpwu6j2n6XeFA1EuDtjDneLqGunK1UZA49ooQEfZoQHqtgoYV19VizG0kB3Lv8SAr/8zGZNofOWHaGCEGrof5WIC2HUJNurqXqVU5r/UUOy6eW941W0FNidbDZUvTbcI33dUlvvss7kDs4lHEBT4Hw/6Uusb2RLE69RgvNj83OaJ+F8V8e88ge4weYKhlcftlNS05UTSZiZQySXjiXyzYLZiZLTjO5T4zBITSAIP9mTdgfTYTPqApskzZZ1Yn5h35YcP8nopkO0WtKfAiZRV3/i/n/OdM+w8yYH6XBfQ4Gdk= - - provider: npm - src: "packages/playwright-webkit" - edge: true - email: aslushnikov@gmail.com - on: - branch: master - tag: next - api_token: - secure: MzswBGmhSf8AR47qvqEfwWLvMx7+UDLXL0CeTXdHi7gRg6XPQjnUf5xtV9+3WEsCrsUFa0rFYNKLQ8M2Qmubc1/UltnVQubF00/ImIW6gMRQn5wyE0CPKb+DPdSj892wh0LwCXzaUr3e7NdDRcOSRlvyIuPwhVZLeua5Z01CcIKQ/DCFguXrrgURB73hrrM77CdcPW3Fjy3SKo2tilBM0LX8KdJFxPqBTNA0CZwUdSGDyvyG6Z2+/RdMTh7appRdydKbvNVfAfNMo0vYPAwb7V+Exmxox2d/XKq0KeZusn20g17rZRndha9NPx/vGQrROz8FjSZh0kyqLfvxYCkh0qa7sj+DHOrxZnXSoFp5mTq7zm25GP7lp+MRzcEx2gGhpwu6j2n6XeFA1EuDtjDneLqGunK1UZA49ooQEfZoQHqtgoYV19VizG0kB3Lv8SAr/8zGZNofOWHaGCEGrof5WIC2HUJNurqXqVU5r/UUOy6eW941W0FNidbDZUvTbcI33dUlvvss7kDs4lHEBT4Hw/6Uusb2RLE69RgvNj83OaJ+F8V8e88ge4weYKhlcftlNS05UTSZiZQySXjiXyzYLZiZLTjO5T4zBITSAIP9mTdgfTYTPqApskzZZ1Yn5h35YcP8nopkO0WtKfAiZRV3/i/n/OdM+w8yYH6XBfQ4Gdk= - - provider: npm - src: "packages/playwright" - edge: true - email: aslushnikov@gmail.com - on: - branch: master - tag: next - api_token: - secure: MzswBGmhSf8AR47qvqEfwWLvMx7+UDLXL0CeTXdHi7gRg6XPQjnUf5xtV9+3WEsCrsUFa0rFYNKLQ8M2Qmubc1/UltnVQubF00/ImIW6gMRQn5wyE0CPKb+DPdSj892wh0LwCXzaUr3e7NdDRcOSRlvyIuPwhVZLeua5Z01CcIKQ/DCFguXrrgURB73hrrM77CdcPW3Fjy3SKo2tilBM0LX8KdJFxPqBTNA0CZwUdSGDyvyG6Z2+/RdMTh7appRdydKbvNVfAfNMo0vYPAwb7V+Exmxox2d/XKq0KeZusn20g17rZRndha9NPx/vGQrROz8FjSZh0kyqLfvxYCkh0qa7sj+DHOrxZnXSoFp5mTq7zm25GP7lp+MRzcEx2gGhpwu6j2n6XeFA1EuDtjDneLqGunK1UZA49ooQEfZoQHqtgoYV19VizG0kB3Lv8SAr/8zGZNofOWHaGCEGrof5WIC2HUJNurqXqVU5r/UUOy6eW941W0FNidbDZUvTbcI33dUlvvss7kDs4lHEBT4Hw/6Uusb2RLE69RgvNj83OaJ+F8V8e88ge4weYKhlcftlNS05UTSZiZQySXjiXyzYLZiZLTjO5T4zBITSAIP9mTdgfTYTPqApskzZZ1Yn5h35YcP8nopkO0WtKfAiZRV3/i/n/OdM+w8yYH6XBfQ4Gdk= + +after_success: + - node utils/apply_next_version.js + - ./utils/publish_all_packages.sh --tip-of-tree diff --git a/package.json b/package.json index 3147c65e8d..11881fc7bd 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ "clean": "rimraf lib", "build": "node utils/runWebpack.js --mode='development' && tsc -p .", "watch": "node utils/runWebpack.js --mode='development' --watch --silent | tsc -w -p .", - "apply-next-version": "node utils/apply_next_version.js", "version": "node utils/sync_package_versions.js && npm run doc" }, "author": { diff --git a/utils/apply_next_version.js b/utils/apply_next_version.js index cc6bc4f1ac..1cbcc4ca30 100644 --- a/utils/apply_next_version.js +++ b/utils/apply_next_version.js @@ -1,19 +1,3 @@ -const path = require('path'); -const fs = require('fs'); -const execSync = require('child_process').execSync; - -// Compare current HEAD to upstream master SHA. -// If they are not equal - refuse to publish since -// we're not tip-of-tree. -const upstream_sha = execSync(`git ls-remote https://github.com/Microsoft/playwright --tags master | cut -f1`).toString('utf8'); -const current_sha = execSync(`git rev-parse HEAD`).toString('utf8'); -if (upstream_sha.trim() !== current_sha.trim()) { - console.log('REFUSING TO PUBLISH: this is not tip-of-tree!'); - process.exit(1); - return; -} - - const package = require('../package.json'); let version = package.version; const dashIndex = version.indexOf('-'); diff --git a/utils/publish_all_packages.sh b/utils/publish_all_packages.sh new file mode 100755 index 0000000000..d3a19778b5 --- /dev/null +++ b/utils/publish_all_packages.sh @@ -0,0 +1,92 @@ +#!/bin/bash +set -e +set +x + +trap "cd $(pwd -P)" EXIT +cd "$(dirname $0)" + +if [[ $1 == "--help" ]]; then + echo "usage: $(basename $0) [--release|--tip-of-tree]" + echo + echo "Publishes all packages." + echo + echo "--release publish @latest version of all packages" + echo "--tip-of-tree publish @next version of all packages" + exit 1 +fi + +if [[ $# < 1 ]]; then + echo "Please specify either --release or --tip-of-tree" + exit 1 +fi + +if [[ $(git rev-parse --abbrev-ref HEAD) != "master" ]]; then + echo "ERROR: Cannot publish from branch other then 'master'" + exit 1 +fi + +if ! command -v npm >/dev/null; then + echo "ERROR: NPM is not found" + exit 1 +fi + +if [[ (-n $CI) && (-n $NPM_AUTH_TOKEN) && (! -f $HOME/.npmrc) ]]; then + echo "//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}" > $HOME/.npmrc +fi + +if ! npm whoami >/dev/null 2>&1; then + echo "ERROR: NPM failed to log in" + exit 1 +fi + +UPSTREAM_SHA=$(git ls-remote https://github.com/microsoft/playwright --tags master | cut -f1) +CURRENT_SHA=$(git rev-parse HEAD) + +if [[ "${UPSTREAM_SHA}" != "${CURRENT_SHA}" ]]; then + echo "REFUSING TO PUBLISH: this is not tip-of-tree" + exit 1 +fi + +cd .. + +if [[ $1 == "--release" ]]; then + if [[ -n $CI ]]; then + echo "Found \$CI env - cannot publish real release from CI" + exit 1 + fi + if [[ -n $(git status -s) ]]; then + echo "ERROR: git status is dirty; some uncommitted changes or untracked files" + exit 1 + fi + VERSION=$(node -e 'console.log(require("./package.json").version)') + echo -n "Publish Playwright v${VERSION} (y/N)? " + read ANSWER + if [[ "$ANSWER" != "y" ]]; then + echo "Bailing out." + exit 1 + fi + + npm run clean + npm publish . + npm publish packages/playwright-firefox + npm publish packages/playwright-webkit + npm publish packages/playwright-chromium + npm publish packages/playwright + echo "Done." +elif [[ $1 == "--tip-of-tree" ]]; then + if [[ -z $CI ]]; then + echo "Did not find \$CI env - cannot publish tip-of-tree release not from CI" + exit 1 + fi + npm run clean + npm publish . --tag="next" + npm publish packages/playwright-firefox --tag="next" + npm publish packages/playwright-webkit --tag="next" + npm publish packages/playwright-chromium --tag="next" + npm publish packages/playwright --tag="next" + echo "Done." +else + echo "unknown argument - '$1'" + exit 1 +fi +