157 lines
8.3 KiB
HTML
157 lines
8.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>JSDoc: Source: core/service-test-runner/infer-pull-request.js</title>
|
|
|
|
<script src="scripts/prettify/prettify.js"> </script>
|
|
<script src="scripts/prettify/lang-css.js"> </script>
|
|
<!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="main">
|
|
|
|
<h1 class="page-title">Source: core/service-test-runner/infer-pull-request.js</h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section>
|
|
<article>
|
|
<pre class="prettyprint source linenums"><code>'use strict'
|
|
/**
|
|
* @module
|
|
*/
|
|
|
|
const { URL, format: urlFormat } = require('url')
|
|
|
|
function formatSlug(owner, repo, pullRequest) {
|
|
return `${owner}/${repo}#${pullRequest}`
|
|
}
|
|
|
|
function parseGithubPullRequestUrl(url, options = {}) {
|
|
const { verifyBaseUrl } = options
|
|
|
|
const parsed = new URL(url)
|
|
const components = parsed.pathname.substr(1).split('/')
|
|
if (components[2] !== 'pull' || components.length !== 4) {
|
|
throw Error(`Invalid GitHub pull request URL: ${url}`)
|
|
}
|
|
const [owner, repo, , pullRequest] = components
|
|
|
|
parsed.pathname = ''
|
|
const baseUrl = urlFormat(parsed, {
|
|
auth: false,
|
|
fragment: false,
|
|
search: false,
|
|
}).replace(/\/$/, '')
|
|
|
|
if (verifyBaseUrl && baseUrl !== verifyBaseUrl) {
|
|
throw Error(`Expected base URL to be ${verifyBaseUrl} but got ${baseUrl}`)
|
|
}
|
|
|
|
return {
|
|
baseUrl,
|
|
owner,
|
|
repo,
|
|
pullRequest: +pullRequest,
|
|
slug: formatSlug(owner, repo, pullRequest),
|
|
}
|
|
}
|
|
|
|
function parseGithubRepoSlug(slug) {
|
|
const components = slug.split('/')
|
|
if (components.length !== 2) {
|
|
throw Error(`Invalid GitHub repo slug: ${slug}`)
|
|
}
|
|
const [owner, repo] = components
|
|
return { owner, repo }
|
|
}
|
|
|
|
function _inferPullRequestFromTravisEnv(env) {
|
|
const { owner, repo } = parseGithubRepoSlug(env.TRAVIS_REPO_SLUG)
|
|
const pullRequest = +env.TRAVIS_PULL_REQUEST
|
|
return {
|
|
owner,
|
|
repo,
|
|
pullRequest,
|
|
slug: formatSlug(owner, repo, pullRequest),
|
|
}
|
|
}
|
|
|
|
function _inferPullRequestFromCircleEnv(env) {
|
|
return parseGithubPullRequestUrl(env.CI_PULL_REQUEST)
|
|
}
|
|
|
|
/**
|
|
* When called inside a CI build, infer the details
|
|
* of a pull request from the environment variables.
|
|
*
|
|
* @param {object} [env=process.env] Environment variables
|
|
* @returns {module:core/service-test-runner/infer-pull-request~PullRequest}
|
|
* Pull Request
|
|
*/
|
|
function inferPullRequest(env = process.env) {
|
|
if (env.TRAVIS) {
|
|
return _inferPullRequestFromTravisEnv(env)
|
|
} else if (env.CIRCLECI) {
|
|
return _inferPullRequestFromCircleEnv(env)
|
|
} else if (env.CI) {
|
|
throw Error(
|
|
'Unsupported CI system. Unable to obtain pull request information from the environment.'
|
|
)
|
|
} else {
|
|
throw Error(
|
|
'Unable to obtain pull request information from the environment. Is this running in CI?'
|
|
)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Pull Request
|
|
*
|
|
* @typedef PullRequest
|
|
* @property {string} pr.baseUrl (returned for travis CI only)
|
|
* @property {string} owner
|
|
* @property {string} repo
|
|
* @property {string} pullRequest PR/issue number
|
|
* @property {string} slug owner/repo/#pullRequest
|
|
*/
|
|
|
|
module.exports = {
|
|
parseGithubPullRequestUrl,
|
|
parseGithubRepoSlug,
|
|
inferPullRequest,
|
|
}
|
|
</code></pre>
|
|
</article>
|
|
</section>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<nav>
|
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-badge-maker.html">badge-maker</a></li><li><a href="module-core_base-service_base.html">core/base-service/base</a></li><li><a href="module-core_base-service_base-graphql.html">core/base-service/base-graphql</a></li><li><a href="module-core_base-service_base-json.html">core/base-service/base-json</a></li><li><a href="module-core_base-service_base-svg-scraping.html">core/base-service/base-svg-scraping</a></li><li><a href="module-core_base-service_base-xml.html">core/base-service/base-xml</a></li><li><a href="module-core_base-service_base-yaml.html">core/base-service/base-yaml</a></li><li><a href="module-core_base-service_errors.html">core/base-service/errors</a></li><li><a href="module-core_base-service_graphql.html">core/base-service/graphql</a></li><li><a href="module-core_server_server.html">core/server/server</a></li><li><a href="module-core_service-test-runner_create-service-tester.html">core/service-test-runner/create-service-tester</a></li><li><a href="module-core_service-test-runner_icedfrisby-shields.html">core/service-test-runner/icedfrisby-shields</a></li><li><a href="module-core_service-test-runner_infer-pull-request.html">core/service-test-runner/infer-pull-request</a></li><li><a href="module-core_service-test-runner_runner.html">core/service-test-runner/runner</a></li><li><a href="module-core_service-test-runner_service-tester.html">core/service-test-runner/service-tester</a></li><li><a href="module-core_service-test-runner_services-for-title.html">core/service-test-runner/services-for-title</a></li><li><a href="module-core_token-pooling_token-pool.html">core/token-pooling/token-pool</a></li><li><a href="module-services_dynamic_json-path.html">services/dynamic/json-path</a></li><li><a href="module-services_steam_steam-base.html">services/steam/steam-base</a></li></ul><h3>Classes</h3><ul><li><a href="module.exports.html">exports</a></li><li><a href="module-core_base-service_base-graphql-BaseGraphqlService.html">BaseGraphqlService</a></li><li><a href="module-core_base-service_base-json-BaseJsonService.html">BaseJsonService</a></li><li><a href="module-core_base-service_base-svg-scraping-BaseSvgScrapingService.html">BaseSvgScrapingService</a></li><li><a href="module-core_base-service_base-xml-BaseXmlService.html">BaseXmlService</a></li><li><a href="module-core_base-service_base-yaml-BaseYamlService.html">BaseYamlService</a></li><li><a href="module-core_base-service_base-BaseService.html">BaseService</a></li><li><a href="module-core_base-service_errors-Deprecated.html">Deprecated</a></li><li><a href="module-core_base-service_errors-ImproperlyConfigured.html">ImproperlyConfigured</a></li><li><a href="module-core_base-service_errors-Inaccessible.html">Inaccessible</a></li><li><a href="module-core_base-service_errors-InvalidParameter.html">InvalidParameter</a></li><li><a href="module-core_base-service_errors-InvalidResponse.html">InvalidResponse</a></li><li><a href="module-core_base-service_errors-NotFound.html">NotFound</a></li><li><a href="module-core_base-service_errors-ShieldsRuntimeError.html">ShieldsRuntimeError</a></li><li><a href="module-core_server_server-Server.html">Server</a></li><li><a href="module-core_service-test-runner_runner-Runner.html">Runner</a></li><li><a href="module-core_service-test-runner_service-tester-ServiceTester.html">ServiceTester</a></li><li><a href="module-core_token-pooling_token-pool-Token.html">Token</a></li><li><a href="module-core_token-pooling_token-pool-TokenPool.html">TokenPool</a></li><li><a href="module-services_steam_steam-base-BaseSteamAPI.html">BaseSteamAPI</a></li></ul><h3>Tutorials</h3><ul><li><a href="tutorial-TUTORIAL.html">TUTORIAL</a></li><li><a href="tutorial-badge-urls.html">badge-urls</a></li><li><a href="tutorial-code-walkthrough.html">code-walkthrough</a></li><li><a href="tutorial-deprecating-badges.html">deprecating-badges</a></li><li><a href="tutorial-input-validation.html">input-validation</a></li><li><a href="tutorial-json-format.html">json-format</a></li><li><a href="tutorial-logos.html">logos</a></li><li><a href="tutorial-performance-testing.html">performance-testing</a></li><li><a href="tutorial-production-hosting.html">production-hosting</a></li><li><a href="tutorial-rewriting-services.html">rewriting-services</a></li><li><a href="tutorial-self-hosting.html">self-hosting</a></li><li><a href="tutorial-server-secrets.html">server-secrets</a></li><li><a href="tutorial-service-tests.html">service-tests</a></li><li><a href="tutorial-users.html">users</a></li></ul><h3>Global</h3><ul><li><a href="global.html#validateAffiliations">validateAffiliations</a></li></ul>
|
|
</nav>
|
|
|
|
<br class="clear">
|
|
|
|
<footer>
|
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.6</a> on Sat Feb 20 2021 02:36:26 GMT+0000 (Coordinated Universal Time)
|
|
</footer>
|
|
|
|
<script> prettyPrint(); </script>
|
|
<script src="scripts/linenumber.js"> </script>
|
|
</body>
|
|
</html>
|