first commit
This commit is contained in:
1
build/node_modules/electron-releases/.env.example
generated
vendored
Normal file
1
build/node_modules/electron-releases/.env.example
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
GITHUB_AUTH_TOKEN=df09c7ee4a81d0cbfc128201baee5f2da2a3ae94
|
||||
3
build/node_modules/electron-releases/.travis.yml
generated
vendored
Normal file
3
build/node_modules/electron-releases/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- '8'
|
||||
158492
build/node_modules/electron-releases/index.json
generated
vendored
Normal file
158492
build/node_modules/electron-releases/index.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
68
build/node_modules/electron-releases/package.json
generated
vendored
Normal file
68
build/node_modules/electron-releases/package.json
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"electron-releases@2.1.0",
|
||||
"/Users/asciidisco/Desktop/asciidisco.com/build"
|
||||
]
|
||||
],
|
||||
"_from": "electron-releases@2.1.0",
|
||||
"_id": "electron-releases@2.1.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-cyKFD1bTE/UgULXfaueIN1k5EPFzs+FRc/rvCY5tIynefAPqopQEgjr0EzY+U3Dqrk/G4m9tXSPuZ77v6dL/Rw==",
|
||||
"_location": "/electron-releases",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "electron-releases@2.1.0",
|
||||
"name": "electron-releases",
|
||||
"escapedName": "electron-releases",
|
||||
"rawSpec": "2.1.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "2.1.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/electron-to-chromium"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/electron-releases/-/electron-releases-2.1.0.tgz",
|
||||
"_spec": "2.1.0",
|
||||
"_where": "/Users/asciidisco/Desktop/asciidisco.com/build",
|
||||
"bugs": {
|
||||
"url": "https://github.com/electron/electron-releases/issues"
|
||||
},
|
||||
"description": "Complete and up-to-date info about every release of Electron",
|
||||
"devDependencies": {
|
||||
"chai": "^4.1.2",
|
||||
"check-for-leaks": "^1.2.0",
|
||||
"dotenv-safe": "^4.0.4",
|
||||
"flat": "^4.0.0",
|
||||
"github": "^13.0.1",
|
||||
"got": "^8.0.1",
|
||||
"hubdown": "^2.0.0",
|
||||
"lodash": "^4.17.4",
|
||||
"make-promises-safe": "^1.1.0",
|
||||
"mocha": "^4.0.1",
|
||||
"npm": "^5.6.0",
|
||||
"parse-link-header": "^1.0.1",
|
||||
"platform-utils": "^1.0.0",
|
||||
"semver": "^5.4.1",
|
||||
"standard": "^10.0.3",
|
||||
"standard-markdown": "^4.0.2"
|
||||
},
|
||||
"homepage": "https://github.com/electron/electron-releases#readme",
|
||||
"license": "MIT",
|
||||
"main": "index.json",
|
||||
"name": "electron-releases",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/electron/electron-releases.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node script/build.js",
|
||||
"prepack": "check-for-leaks",
|
||||
"prepush": "check-for-leaks",
|
||||
"release": "./script/release.sh",
|
||||
"test": "mocha && standard --fix && standard-markdown"
|
||||
},
|
||||
"version": "2.1.0"
|
||||
}
|
||||
106
build/node_modules/electron-releases/readme.md
generated
vendored
Normal file
106
build/node_modules/electron-releases/readme.md
generated
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
# electron-releases
|
||||
|
||||
> Complete and up-to-date info about every release of Electron.
|
||||
|
||||
This package:
|
||||
|
||||
- includes all [GitHub Releases](https://developer.github.com/v3/repos/releases/#get-a-single-release) data about Electron.
|
||||
- does not include draft releases.
|
||||
- includes prereleases which are not published to npm.
|
||||
- tracks which versions are published to npm.
|
||||
- tracks [npm dist-tags](https://docs.npmjs.com/cli/dist-tag) like `latest` and `beta`.
|
||||
- includes V8, Chromium, and Node.js version data.
|
||||
- includes [GitHub-flavored HTML](https://ghub.io/hubdown) for each release's changelog.
|
||||
- ignores npm versions from the days before [Electron was `electron`](https://electronjs.org/blog/npm-install-electron).
|
||||
- is [updated regularly](#updates).
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
npm i electron-releases
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
The module exports an array of release objects:
|
||||
|
||||
```js
|
||||
const releases = require('electron-releases')
|
||||
|
||||
// find newest version:
|
||||
releases[0].tag_name // => 'v1.8.2-beta.3'
|
||||
|
||||
// find `latest` on npm, which is not necessarily the most recent release:
|
||||
releases.find(release => release.npm_dist_tag === 'latest')
|
||||
|
||||
// find `beta` on npm:
|
||||
releases.find(release => release.npm_dist_tag === 'beta')
|
||||
```
|
||||
|
||||
### Data
|
||||
|
||||
Each release contains all the data returned by the
|
||||
[GitHub Releases API](https://developer.github.com/v3/repos/releases/#get-a-single-release),
|
||||
plus some extra properties:
|
||||
|
||||
- `version` (String) - the same thing as `dist_tag`, but without the `v` for convenient [semver comparisons](https://github.com/npm/node-semver#usage).
|
||||
- `npm_dist_tag` (String) - an [npm dist-tag](https://docs.npmjs.com/cli/dist-tag) like `latest` or `beta`. Most releases will not have this property.
|
||||
- `npm_package_name` (String) - For packages published to npm, this will be `electron` or `electron-prebuilt`. For packages not published to npm, this property will not exist.
|
||||
- `total_downloads` (Number) - Total downloads of all assets in the release that
|
||||
have a [detectable platform](https://github.com/zeke/platform-utils#api) in their
|
||||
filename like `.zip`, `.dmg`, `.exe`, `.rpm`, `.deb`, etc.
|
||||
- `deps` (Object) - version numbers for Electron dependencies.
|
||||
- `v8` (String)
|
||||
- `chromium` (String)
|
||||
- `node` (String)
|
||||
- etc..
|
||||
|
||||
## Updates
|
||||
|
||||
This module is self-publishing. It runs in a
|
||||
[Heroku Scheduler](https://devcenter.heroku.com/articles/scheduler)
|
||||
process every ten minutes. A new version of this module is published if any of
|
||||
the following change:
|
||||
|
||||
- number of Electron releases on GitHub
|
||||
- number of Electron releases on npm
|
||||
- npm `electron@beta` version
|
||||
- npm `electron@latest` version
|
||||
|
||||
If none of these has changed, the build process aborts and runs again ten minutes
|
||||
later. For more detail, see [script/release.sh](script/release.sh)
|
||||
|
||||
The Heroku app is also synced to the GitHub repo, so every push to the
|
||||
`master` branch will automatically deploy a new version of this app.
|
||||
|
||||
## Tests
|
||||
|
||||
```sh
|
||||
npm install
|
||||
npm test
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
None
|
||||
|
||||
## Dev Dependencies
|
||||
|
||||
- [chai](https://github.com/chaijs/chai): BDD/TDD assertion library for node.js and the browser. Test framework agnostic.
|
||||
- [check-for-leaks](): avoid publishing secrets to git and npm
|
||||
- [dotenv-safe](https://github.com/rolodato/dotenv-safe): Load environment variables from .env and ensure they are defined
|
||||
- [github](): NodeJS wrapper for the GitHub API
|
||||
- [got](): Simplified HTTP requests
|
||||
- [hubdown](): Convert markdown to GitHub-style HTML using a common set of remark plugins
|
||||
- [lodash](): Lodash modular utilities.
|
||||
- [mocha](https://github.com/mochajs/mocha): simple, flexible, fun test framework
|
||||
- [npm](https://github.com/npm/npm): a package manager for JavaScript
|
||||
- [parse-link-header](https://github.com/thlorenz/parse-link-header): Parses a link header and returns paging information for each contained link.
|
||||
- [semver](): The semantic version parser used by npm.
|
||||
- [standard](https://github.com/standard/standard): JavaScript Standard Style
|
||||
- [standard-markdown](): Test your Markdown files for Standard JavaScript Style™
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
167
build/node_modules/electron-releases/script/build.js
generated
vendored
Executable file
167
build/node_modules/electron-releases/script/build.js
generated
vendored
Executable file
@@ -0,0 +1,167 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('make-promises-safe')
|
||||
require('dotenv-safe').load()
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const semver = require('semver')
|
||||
const hubdown = require('hubdown')
|
||||
const GitHub = require('github')
|
||||
const got = require('got')
|
||||
const parseLinkHeader = require('parse-link-header')
|
||||
const {getPlatformFromFilename} = require('platform-utils')
|
||||
const github = new GitHub()
|
||||
|
||||
// `electron` was once a different module on npm. prior to 1.3.1 it was
|
||||
// published as `electron-prebuilt`
|
||||
const firstNpmVersion = '1.3.1'
|
||||
|
||||
github.authenticate({
|
||||
type: 'token',
|
||||
token: process.env.GITHUB_AUTH_TOKEN
|
||||
})
|
||||
|
||||
main()
|
||||
|
||||
async function main () {
|
||||
console.log('fetching list of `electron` releases on npm')
|
||||
const npmElectronData = await got('https://registry.npmjs.com/electron', {json: true})
|
||||
const npmVersions = Object.keys(npmElectronData.body.versions)
|
||||
// filter out old versions of `electron` that were actually a different module
|
||||
.filter(version => semver.gte(version, firstNpmVersion))
|
||||
|
||||
console.log('fetching list of `electron-prebuilt` releases on npm')
|
||||
const npmElectronPrebuiltData = await got('https://registry.npmjs.com/electron-prebuilt', {json: true})
|
||||
|
||||
const npmVersionsPrebuilt = Object.keys(npmElectronPrebuiltData.body.versions)
|
||||
// filter out `electron-prebuilt` versions that were published in tandem with `electron` for a while.
|
||||
.filter(version => semver.lt(version, firstNpmVersion))
|
||||
|
||||
console.log('fetching npm dist-tags')
|
||||
const distTags = npmElectronData.body['dist-tags']
|
||||
const npmDistTaggedVersions = Object.keys(distTags)
|
||||
.reduce((acc, key) => {
|
||||
acc[distTags[key]] = key
|
||||
return acc
|
||||
}, {})
|
||||
|
||||
console.log('fetching GitHub Releases page count')
|
||||
const countRes = await github.repos.getReleases(ghOpts({per_page: 1}))
|
||||
|
||||
let pagesToFetch
|
||||
try {
|
||||
const count = Number(parseLinkHeader(countRes.meta.link).last.page)
|
||||
console.log(`found ${count} releases on GitHub`)
|
||||
pagesToFetch = Math.ceil(count / 100)
|
||||
} catch (err) {
|
||||
console.error('problem fetching number of releases')
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('fetching release data from GitHub')
|
||||
let releases = []
|
||||
for (let i = 1; i <= pagesToFetch; i++) {
|
||||
const batch = await github.repos.getReleases(ghOpts({page: i}))
|
||||
releases = releases.concat(batch.data)
|
||||
}
|
||||
|
||||
console.log(`found ${releases.length} releases on GitHub`)
|
||||
|
||||
console.log('fetching version data for deps like V8, Chromium, and Node.js')
|
||||
const depDataRes = await got('https://atom.io/download/electron/index.json', {json: true})
|
||||
const depData = depDataRes.body
|
||||
|
||||
releases = releases
|
||||
.filter(release => !release.draft)
|
||||
.filter(release => semver.valid(release.tag_name.substring(1)))
|
||||
.map(release => {
|
||||
// derive version from tag_name for semver comparisons
|
||||
release.version = release.tag_name.substring(1)
|
||||
|
||||
// published to npm? electron? electron-prebuilt?
|
||||
if (npmVersions.includes(release.version)) release.npm_package_name = 'electron'
|
||||
if (npmVersionsPrebuilt.includes(release.version)) release.npm_package_name = 'electron-prebuilt'
|
||||
|
||||
// weave in version data for V8, Chromium, Node.js, etc
|
||||
const deps = depData.find(version => version.version === release.version)
|
||||
if (deps) release.deps = deps
|
||||
|
||||
// apply dist tags from npm (usually `latest` and `beta`)
|
||||
const npmDistTag = npmDistTaggedVersions[release.version]
|
||||
if (npmDistTag) release.npm_dist_tag = npmDistTag
|
||||
|
||||
if (release.assets) {
|
||||
release.total_downloads = release.assets
|
||||
.reduce((acc, asset) => {
|
||||
const platform = getPlatformFromFilename(asset.name)
|
||||
if (platform) acc += asset.download_count
|
||||
return acc
|
||||
}, 0)
|
||||
}
|
||||
|
||||
return release
|
||||
})
|
||||
|
||||
// highest versions first
|
||||
.sort((a, b) => semver.compare(b.version, a.version))
|
||||
|
||||
console.log('processing changelogs to HTML')
|
||||
releases = await Promise.all(releases.map(processRelease))
|
||||
|
||||
// Abort the build early if module is already up to date
|
||||
const old = require('..')
|
||||
const oldLatest = old.find(release => release.npm_dist_tag === 'latest').version
|
||||
const newLatest = releases.find(release => release.npm_dist_tag === 'latest').version
|
||||
const oldBeta = old.find(release => release.npm_dist_tag === 'beta').version
|
||||
const newBeta = releases.find(release => release.npm_dist_tag === 'beta').version
|
||||
const oldNpmCount = old.find(release => release.npm_package_name === 'electron').length
|
||||
const newNpmCount = releases.find(release => release.npm_package_name === 'electron').length
|
||||
|
||||
if (
|
||||
old.length === releases.length &&
|
||||
oldLatest === newLatest &&
|
||||
oldBeta === newBeta &&
|
||||
oldNpmCount === newNpmCount
|
||||
) {
|
||||
console.log('module already has up-to-date versions and dist tags. exiting.')
|
||||
process.exit()
|
||||
}
|
||||
|
||||
const fullFile = path.join(__dirname, '../index.json')
|
||||
fs.writeFileSync(fullFile, JSON.stringify(releases, null, 2))
|
||||
console.log(`wrote ${path.relative(process.cwd(), fullFile)}`)
|
||||
}
|
||||
|
||||
// helpers
|
||||
|
||||
async function processRelease (release) {
|
||||
release.version = release.tag_name.substring(1)
|
||||
release.body = release.body
|
||||
|
||||
// turn PR references like #123 into hyperlinks
|
||||
.replace(
|
||||
/ #(\d+)$/gm,
|
||||
' <a href="https://github.com/electron/electron/pull/$1">#$1</a>'
|
||||
)
|
||||
|
||||
// adjust heading levels (h2 becomes h3, etc)
|
||||
.replace(/^#### /gm, '##### ')
|
||||
.replace(/^### /gm, '#### ')
|
||||
.replace(/^## /gm, '### ')
|
||||
|
||||
const parsed = await hubdown(release.body)
|
||||
release.body_html = parsed.content
|
||||
|
||||
return release
|
||||
}
|
||||
|
||||
function ghOpts (opts) {
|
||||
const defaults = {
|
||||
owner: 'electron',
|
||||
repo: 'electron',
|
||||
per_page: 100
|
||||
}
|
||||
return Object.assign({}, defaults, opts)
|
||||
}
|
||||
20
build/node_modules/electron-releases/script/release.sh
generated
vendored
Executable file
20
build/node_modules/electron-releases/script/release.sh
generated
vendored
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -x # print commands before execution
|
||||
set -o errexit # always exit on error
|
||||
set -o pipefail # honor exit codes when piping
|
||||
set -o nounset # fail on unset variables
|
||||
|
||||
git clone "https://github.com/electron/electron-releases" module
|
||||
cd module
|
||||
npm install
|
||||
npm run build
|
||||
npm test
|
||||
[[ `git status --porcelain` ]] || exit
|
||||
git add .
|
||||
git config user.email electron@github.com
|
||||
git config user.name electron-bot
|
||||
git commit -am "update electron-releases"
|
||||
npm version minor -m "bump minor to %s"
|
||||
git push origin master --follow-tags
|
||||
npm publish
|
||||
90
build/node_modules/electron-releases/test/index.js
generated
vendored
Normal file
90
build/node_modules/electron-releases/test/index.js
generated
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
require('chai').should()
|
||||
const {describe, it} = require('mocha')
|
||||
const releases = require('..')
|
||||
const semver = require('semver')
|
||||
const flat = require('flat')
|
||||
|
||||
describe('electron-releases', () => {
|
||||
it('is an array', () => {
|
||||
releases.should.be.an('array')
|
||||
})
|
||||
|
||||
it('contains over 270 releases', () => {
|
||||
releases.length.should.be.above(270)
|
||||
})
|
||||
|
||||
it('uses snake_case for all properties', () => {
|
||||
const keys = Object.keys(flat(releases))
|
||||
keys.length.should.be.above(0)
|
||||
keys.every(key => key.toLowerCase() === key).should.eq(true)
|
||||
})
|
||||
|
||||
it('sets `tag_name` on every release', () => {
|
||||
releases.every(release => {
|
||||
return release.tag_name &&
|
||||
release.tag_name.length &&
|
||||
release.tag_name.startsWith('v') &&
|
||||
semver.valid(release.tag_name.replace('v', ''))
|
||||
}).should.eq(true)
|
||||
})
|
||||
|
||||
it('sets `version` on every release', () => {
|
||||
releases.every(release => semver.valid(release.version)).should.eq(true)
|
||||
})
|
||||
|
||||
it('does NOT include drafts', () => {
|
||||
const prereleases = releases.filter(release => release.prerelease)
|
||||
prereleases.length.should.be.above(0)
|
||||
})
|
||||
|
||||
it('includes prereleases', () => {
|
||||
const prereleases = releases.filter(release => release.prerelease)
|
||||
prereleases.length.should.be.above(0)
|
||||
})
|
||||
|
||||
it('includes version data for V8, Chromium, Node.js, etc', () => {
|
||||
const releasesWithVersionData = releases.filter(release => release.deps)
|
||||
releasesWithVersionData.length.should.be.above(154)
|
||||
})
|
||||
|
||||
it('includes one release with the `beta` npm dist tag', () => {
|
||||
const betas = releases.filter(release => release.npm_dist_tag === 'beta')
|
||||
betas.length.should.eq(1)
|
||||
})
|
||||
|
||||
it('includes one release with the `latest` npm dist tag', () => {
|
||||
const latests = releases.filter(release => release.npm_dist_tag === 'latest')
|
||||
latests.length.should.eq(1)
|
||||
})
|
||||
|
||||
it('includes npm_package_name prop to indicate npm publish status', () => {
|
||||
releases.find(release => release.version === '1.4.7').npm_package_name.should.eq('electron')
|
||||
releases.find(release => release.version === '1.0.0').npm_package_name.should.eq('electron-prebuilt')
|
||||
releases.filter(release => release.npm_package_name === 'electron').length.should.be.above(62)
|
||||
|
||||
// assert exact number because the days of publishing electron-prebuilt are over
|
||||
releases.filter(release => release.npm_package_name === 'electron-prebuilt').length.should.eq(96)
|
||||
})
|
||||
|
||||
// for context, see https://electronjs.org/blog/npm-install-electron
|
||||
it('sets `electron` as `npm_package_name` for releases >=1.3.1', () => {
|
||||
const npmReleasesOfElectron = releases.filter(release => release.npm_package_name === 'electron')
|
||||
npmReleasesOfElectron.length.should.be.above(0)
|
||||
npmReleasesOfElectron.every(release => semver.gte(release.version, '1.3.1')).should.eq(true)
|
||||
})
|
||||
|
||||
it('sets `electron-prebuilt` as `npm_package_name` for releases <1.3.1', () => {
|
||||
const npmReleasesOfElectronPrebuilt = releases.filter(release => release.npm_package_name === 'electron-prebuilt')
|
||||
npmReleasesOfElectronPrebuilt.length.should.be.above(0)
|
||||
npmReleasesOfElectronPrebuilt.every(release => semver.lt(release.version, '1.3.1')).should.eq(true)
|
||||
})
|
||||
|
||||
it('includes processed changelogs in HTML format')//, () => {
|
||||
// })
|
||||
|
||||
it('includes a total_downloads property for each release', () => {
|
||||
const npmReleases = releases.filter(release => release.npm_package_name)
|
||||
npmReleases.length.should.be.above(0)
|
||||
npmReleases.every(release => release.total_downloads > 0).should.eq(true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user