script to publish electron to npm directly
This commit is contained in:
		
					parent
					
						
							
								5dfee2a23c
							
						
					
				
			
			
				commit
				
					
						663710e8eb
					
				
			
		
					 5 changed files with 128 additions and 6 deletions
				
			
		
							
								
								
									
										111
									
								
								script/publish-to-npm.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								script/publish-to-npm.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,111 @@
 | 
			
		|||
require('dotenv-safe').load()
 | 
			
		||||
 | 
			
		||||
const temp = require('temp'),
 | 
			
		||||
      fs   = require('fs'),
 | 
			
		||||
      util = require('util'),
 | 
			
		||||
      path = require('path'),
 | 
			
		||||
      childProcess = require('child_process'),
 | 
			
		||||
      GitHubApi = require('github'),
 | 
			
		||||
      request = require('request'),
 | 
			
		||||
      rootPackageJson = require('../package.json')
 | 
			
		||||
 | 
			
		||||
const github = new GitHubApi({
 | 
			
		||||
  // debug: true,
 | 
			
		||||
  headers: { 'User-Agent': 'electron-npm-publisher' },
 | 
			
		||||
  followRedirects: false,
 | 
			
		||||
})
 | 
			
		||||
github.authenticate({
 | 
			
		||||
  type: 'token',
 | 
			
		||||
  token: process.env.GITHUB_TOKEN
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
let tempDir
 | 
			
		||||
temp.track()   // track and cleanup files at exit
 | 
			
		||||
 | 
			
		||||
const files = [
 | 
			
		||||
  'cli.js',
 | 
			
		||||
  'index.js',
 | 
			
		||||
  'install.js',
 | 
			
		||||
  'package.json',
 | 
			
		||||
  'README.md'
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
const jsonFields = [
 | 
			
		||||
  'name',
 | 
			
		||||
  'version',
 | 
			
		||||
  'repository',
 | 
			
		||||
  'description',
 | 
			
		||||
  'license',
 | 
			
		||||
  'author',
 | 
			
		||||
  'keywords'
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
new Promise((resolve, reject) => {
 | 
			
		||||
  temp.mkdir('electron-npm', (err, dirPath) => {
 | 
			
		||||
    if (err) {
 | 
			
		||||
      reject(err)
 | 
			
		||||
    } else {
 | 
			
		||||
      resolve(dirPath)
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
}).then((dirPath) => {
 | 
			
		||||
  tempDir = dirPath
 | 
			
		||||
 | 
			
		||||
  // copy files from `/npm` to temp directory
 | 
			
		||||
  files.forEach((name) => {
 | 
			
		||||
    fs.writeFileSync(
 | 
			
		||||
      path.join(tempDir, name),
 | 
			
		||||
      fs.readFileSync(path.join(__dirname, '..', 'npm', name))
 | 
			
		||||
    )
 | 
			
		||||
  })
 | 
			
		||||
  // copy from root package.json to temp/package.json
 | 
			
		||||
  const packageJson = require(path.join(tempDir, 'package.json'))
 | 
			
		||||
  jsonFields.forEach((fieldName) => {
 | 
			
		||||
    packageJson[fieldName] = rootPackageJson[fieldName]
 | 
			
		||||
  })
 | 
			
		||||
  fs.writeFileSync(
 | 
			
		||||
    path.join(tempDir, 'package.json'),
 | 
			
		||||
    JSON.stringify(packageJson, null, 2)
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  return github.repos.getReleases({
 | 
			
		||||
    owner: 'electron',
 | 
			
		||||
    repo: 'electron',
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
}).then((releases) => {
 | 
			
		||||
  // download electron.d.ts from draft release
 | 
			
		||||
  const draftRelease = releases.data.find(
 | 
			
		||||
    // (release) => release.draft && release.tag_name === `v${rootPackageJson.version}`
 | 
			
		||||
    (release) => release.draft && release.tag_name === `test`
 | 
			
		||||
 | 
			
		||||
  )
 | 
			
		||||
  if (!draftRelease) {
 | 
			
		||||
    throw `cannot find release with tag v${rootPackageJson.version}`
 | 
			
		||||
  }
 | 
			
		||||
  return draftRelease.assets.find((asset) => asset.name === 'electron.d.ts')
 | 
			
		||||
 | 
			
		||||
}).then((tsdAsset) => {
 | 
			
		||||
  if (!tsdAsset) {
 | 
			
		||||
    throw 'cannot find electron.d.ts from draft release assets'
 | 
			
		||||
  }
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
    request.get({
 | 
			
		||||
      url: tsdAsset.url,
 | 
			
		||||
      headers: {
 | 
			
		||||
        'accept': 'application/octet-stream',
 | 
			
		||||
        'user-agent': 'electron-npm-publisher',
 | 
			
		||||
        Authorization: `token ${process.env.GITHUB_TOKEN}`
 | 
			
		||||
      }
 | 
			
		||||
    }, (err, response, body) => {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        reject(err)
 | 
			
		||||
      } else {
 | 
			
		||||
        fs.writeFileSync(path.join(tempDir, 'electron.d.ts'), body)
 | 
			
		||||
        resolve()
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
.then(() => childProcess.execSync('npm publish', { cwd: tempDir }))
 | 
			
		||||
.catch((err) => console.error(`Error: ${err}`))
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue