82 lines
2.8 KiB
JavaScript
82 lines
2.8 KiB
JavaScript
/* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. */
|
|
|
|
/******************************************************************************
|
|
*
|
|
* You may not use the identified files except in compliance with the Apache
|
|
* License, Version 2.0 (the "License.")
|
|
*
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* NAME
|
|
* buildbinary.js
|
|
*
|
|
* DESCRIPTION
|
|
* Used by maintainers to create a node-oracledb binary for Node.js.
|
|
* See README.md for details.
|
|
*
|
|
* USAGE
|
|
* Run this with 'npm run buildbinary'
|
|
*
|
|
*****************************************************************************/
|
|
|
|
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const execSync = require('child_process').execSync;
|
|
const nodbUtil = require('../lib/util.js');
|
|
|
|
// Files relative to the top level directory
|
|
const buildBinaryFile = nodbUtil.RELEASE_DIR + "/oracledb.node";
|
|
const binaryStagingFile = nodbUtil.STAGING_DIR + '/' + nodbUtil.BINARY_FILE;
|
|
const binaryStagingInfoFile = binaryStagingFile + '-buildinfo.txt';
|
|
|
|
// Build Metadata
|
|
const buildDate = new Date();
|
|
const nodeVersion = process.version;
|
|
|
|
let njsGitSha;
|
|
try {
|
|
njsGitSha = execSync('git --git-dir=./.git rev-parse --verify HEAD').toString().replace(/[\n\r]/, '');
|
|
} catch(e) {
|
|
njsGitSha = 'unknown NJS SHA';
|
|
}
|
|
|
|
let odpiGitSha;
|
|
try {
|
|
odpiGitSha = execSync('git --git-dir=./odpi/.git rev-parse --verify HEAD').toString().replace(/[\n\r]/, '');
|
|
} catch(er) {
|
|
odpiGitSha = 'unknown ODPI-C SHA';
|
|
}
|
|
|
|
const buildInfo = nodbUtil.BINARY_FILE + ' ' + nodeVersion + ' ' + njsGitSha + ' ' + odpiGitSha + ' ' + buildDate.toUTCString();
|
|
|
|
// Build a binary for the current version of Node.js and move it to the Staging directory
|
|
function buildBinary() {
|
|
console.log('Building binary ' + nodbUtil.BINARY_FILE + ' for Node.js ' + nodeVersion);
|
|
try {
|
|
fs.mkdir(nodbUtil.STAGING_DIR, function(err) {if (err && !err.message.match(/EEXIST/)) throw(err);} );
|
|
fs.unlink(buildBinaryFile, function(err) {if (err && !err.message.match(/ENOENT/)) throw(err);});
|
|
fs.unlink(binaryStagingFile, function(err) {if (err && !err.message.match(/ENOENT/)) throw(err);});
|
|
fs.unlink(binaryStagingInfoFile, function(err) {if (err && !err.message.match(/ENOENT/)) throw(err);});
|
|
execSync('npm install');
|
|
fs.renameSync(buildBinaryFile, binaryStagingFile);
|
|
fs.appendFileSync(binaryStagingInfoFile, buildInfo + "\n");
|
|
} catch(err) {
|
|
console.error(err.message);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Main
|
|
//
|
|
|
|
buildBinary();
|