forked from wix/react-native-calendars
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
102 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,3 +4,4 @@ npm-debug.log | |
.idea | ||
yarn.lock | ||
.vscode | ||
package-lock.json |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
/* eslint-disable no-console */ | ||
const exec = require('shell-utils').exec; | ||
const semver = require('semver'); | ||
const fs = require('fs'); | ||
const _ = require('lodash'); | ||
|
||
const ONLY_ON_BRANCH = 'origin/master'; | ||
const VERSION_TAG = 'latest'; | ||
const VERSION_INC = 'minor'; | ||
|
||
function run() { | ||
if (!validateEnv()) { | ||
return; | ||
} | ||
setupGit(); | ||
createNpmRc(); | ||
versionTagAndPublish(); | ||
} | ||
|
||
function validateEnv() { | ||
if (!process.env.JENKINS_CI) { | ||
throw new Error('releasing is only available from CI'); | ||
} | ||
|
||
if (!process.env.JENKINS_MASTER) { | ||
console.log('not publishing on a different build'); | ||
return false; | ||
} | ||
|
||
if (process.env.GIT_BRANCH !== ONLY_ON_BRANCH) { | ||
console.log(`not publishing on branch ${process.env.GIT_BRANCH}`); | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
function setupGit() { | ||
exec.execSyncSilent('git config --global push.default simple'); | ||
exec.execSyncSilent(`git config --global user.email "${process.env.GIT_EMAIL}"`); | ||
exec.execSyncSilent(`git config --global user.name "${process.env.GIT_USER}"`); | ||
const remoteUrl = new RegExp('https?://(\\S+)').exec(exec.execSyncRead('git remote -v'))[1]; | ||
exec.execSyncSilent(`git remote add deploy "https://${process.env.GIT_USER}:${process.env.GIT_TOKEN}@${remoteUrl}"`); | ||
exec.execSync(`git checkout ${ONLY_ON_BRANCH}`); | ||
} | ||
|
||
function createNpmRc() { | ||
exec.execSync('rm -f package-lock.json'); | ||
const content = ` | ||
email=\${NPM_EMAIL} | ||
//registry.npmjs.org/:_authToken=\${NPM_TOKEN} | ||
`; | ||
fs.writeFileSync('.npmrc', content); | ||
} | ||
|
||
function versionTagAndPublish() { | ||
const packageVersion = semver.clean(process.env.npm_package_version); | ||
console.log(`package version: ${packageVersion}`); | ||
|
||
const currentPublished = findCurrentPublishedVersion(); | ||
console.log(`current published version: ${currentPublished}`); | ||
|
||
const version = semver.gt(packageVersion, currentPublished) ? packageVersion : semver.inc(currentPublished, VERSION_INC); | ||
tryPublishAndTag(version); | ||
} | ||
|
||
function findCurrentPublishedVersion() { | ||
return exec.execSyncRead(`npm view ${process.env.npm_package_name} dist-tags.${VERSION_TAG}`); | ||
} | ||
|
||
function tryPublishAndTag(version) { | ||
let theCandidate = version; | ||
for (let retry = 0; retry < 5; retry++) { | ||
try { | ||
tagAndPublish(theCandidate); | ||
console.log(`Released ${theCandidate}`); | ||
return; | ||
} catch (err) { | ||
const alreadyPublished = _.includes(err.toString(), 'You cannot publish over the previously published version'); | ||
if (!alreadyPublished) { | ||
throw err; | ||
} | ||
console.log(`previously published. retrying with increased ${VERSION_INC}...`); | ||
theCandidate = semver.inc(theCandidate, VERSION_INC); | ||
} | ||
} | ||
} | ||
|
||
function tagAndPublish(newVersion) { | ||
console.log(`trying to publish ${newVersion}...`); | ||
exec.execSync(`npm --no-git-tag-version --allow-same-version version ${newVersion}`); | ||
exec.execSyncRead(`npm publish --tag ${VERSION_TAG}`); | ||
exec.execSync(`git tag -a ${newVersion} -m "${newVersion}"`); | ||
exec.execSyncSilent(`git push deploy ${newVersion} || true`); | ||
} | ||
|
||
run(); |