mirror of
https://github.com/cypress-io/cypress.git
synced 2025-12-31 11:39:48 -06:00
126 lines
2.7 KiB
JavaScript
126 lines
2.7 KiB
JavaScript
const minimist = require('minimist')
|
|
const la = require('lazy-ass')
|
|
const is = require('check-more-types')
|
|
const path = require('path')
|
|
const fs = require('fs')
|
|
const execa = require('execa')
|
|
|
|
function getNameAndBinary (args = process.argv) {
|
|
const options = minimist(args)
|
|
|
|
la(is.unemptyString(options.npm), 'missing --npm option', options)
|
|
la(is.unemptyString(options.binary), 'missing --binary option', options)
|
|
|
|
let npm = options.npm
|
|
|
|
if (fs.existsSync(options.npm)) {
|
|
console.log('loading NPM url from', options.npm)
|
|
npm = require(path.resolve(options.npm)).url
|
|
la(is.url(npm), 'not an url', npm)
|
|
} else {
|
|
console.log('NPM option "%s" is not a file', options.npm)
|
|
}
|
|
|
|
let binary = options.binary
|
|
|
|
if (fs.existsSync(options.binary)) {
|
|
console.log('loading binary url from', options.binary)
|
|
binary = require(path.resolve(options.binary)).url
|
|
la(is.url(binary), 'not an url', binary)
|
|
} else {
|
|
console.log('binary option "%s" is not a file', options.binary)
|
|
}
|
|
|
|
return {
|
|
npm,
|
|
binary,
|
|
}
|
|
}
|
|
|
|
function getJustVersion (npmNameOrUrl) {
|
|
la(is.unemptyString(npmNameOrUrl), 'missing NPM string', npmNameOrUrl)
|
|
|
|
if (npmNameOrUrl.startsWith('cypress')) {
|
|
return npmNameOrUrl
|
|
}
|
|
|
|
if (is.url(npmNameOrUrl)) {
|
|
// try finding semver in the url
|
|
// https://something/0.20.3/something...
|
|
const re = /\/(\d+\.\d+\.\d+(-\w+)?)\//
|
|
const matches = re.exec(npmNameOrUrl)
|
|
|
|
if (matches) {
|
|
return matches[1]
|
|
}
|
|
}
|
|
|
|
return npmNameOrUrl
|
|
}
|
|
|
|
const shorten = (s) => {
|
|
return s.substr(0, 7)
|
|
}
|
|
|
|
/**
|
|
* Grabs the full commit SHA and its short version from CI environment variables
|
|
*/
|
|
const getShortCommit = () => {
|
|
const sha = process.env.CIRCLE_SHA1
|
|
|
|
if (sha) {
|
|
return {
|
|
sha,
|
|
short: shorten(sha),
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns CI name for know CIs
|
|
*/
|
|
const getCIName = () => {
|
|
if (process.env.CIRCLECI) {
|
|
return 'Circle'
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the current CI build url
|
|
*/
|
|
const getCIBuildUrl = () => {
|
|
if (process.env.CIRCLECI) {
|
|
// https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables
|
|
return process.env.CIRCLE_BUILD_URL
|
|
}
|
|
}
|
|
|
|
const seconds = (s) => s * 1000
|
|
const minutes = (m) => m * 60 * 1000
|
|
|
|
const getCurrentBranch = async () => {
|
|
const { stdout } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'])
|
|
|
|
return stdout
|
|
}
|
|
|
|
const getPackagePath = ({ location }) => path.join(location, 'package.json')
|
|
|
|
const readPackageJson = (pack) => JSON.parse(fs.readFileSync(getPackagePath(pack)))
|
|
|
|
const independentTagRegex = (name) => new RegExp(`^${name}-v(.+)`)
|
|
|
|
module.exports = {
|
|
getNameAndBinary,
|
|
getJustVersion,
|
|
getShortCommit,
|
|
getCIName,
|
|
getCIBuildUrl,
|
|
seconds,
|
|
minutes,
|
|
getCurrentBranch,
|
|
getPackagePath,
|
|
readPackageJson,
|
|
independentTagRegex,
|
|
}
|