@gravityforms/gulp-tasks
Version:
Configurable Gulp tasks for use in Gravity Forms projects.
95 lines (81 loc) • 3.21 kB
JavaScript
const path = require( 'path' );
const { Octokit } = require( '@octokit/rest' );
const fs = require( 'fs' );
const getPluginVersion = require( '../utils/get-plugin-version' );
const sendSlackMessage = require( '../utils/send-slack-message' );
const getConfig = require('../../config');
const { config } = getConfig();
const rootPath = config?.paths?.root || '';
const fileName = config?.settings?.rootPluginFile || '';
const friendlyName = config?.settings?.friendlyName || '';
const githubToken = process.env.GITHUB_TOKEN;
const owner = process.env.ORG;
const repo = process.env.REPO;
const octokit = new Octokit( { auth: githubToken } );
const uploadRelease = async () => {
if ( process.env.GULP_PRODUCTION_MODE !== 'true' ) {
console.log( 'Skipping uploading release because GULP_PRODUCTION_MODE is not set to true.' );
return;
}
const version = process.env.GRAVITY_PLUGIN_VERSION || getPluginVersion( rootPath, fileName );
const tagName = `v${ version }`;
let uploadUrl;
let releaseId;
try {
// Check if a release with the tag already exists
const { data: releases } = await octokit.repos.listReleases( { owner, repo } );
const existingRelease = releases.find( release => release.tag_name === tagName );
if ( existingRelease ) {
console.log( `Release ${ tagName } already exists. Skipping creation during release upload.` );
uploadUrl = existingRelease.upload_url;
releaseId = existingRelease.id;
} else {
const releaseResponse = await octokit.repos.createRelease( {
owner,
repo,
tag_name: tagName,
name: `Release ${ tagName }`,
body: `Release version ${ version } for ${ friendlyName }.`,
draft: false,
prerelease: false,
} );
uploadUrl = releaseResponse.data.upload_url;
releaseId = releaseResponse.data.id;
}
const existingAssets = await octokit.repos.listReleaseAssets( {
owner,
repo,
release_id: releaseId,
} ).then( response => response.data.map( asset => asset.name ) );
const filePaths = [
path.join( config.paths.root, `${ config.settings.slug }_${ version }.zip` ),
path.join( config.paths.root, 'change_log.txt' ),
path.join( config.paths.root, 'checksums', `${ config.settings.slug }_${ version }.md5` ),
path.join( config.paths.root, 'languages', `${ config.settings.slug }.pot` ),
];
for ( const filePath of filePaths ) {
const fileName = path.basename( filePath );
if ( existingAssets.includes( fileName ) ) {
console.log( `Github release asset already exists and will be skipped: ${ fileName }` );
continue;
}
const fileContent = fs.readFileSync( filePath );
await octokit.repos.uploadReleaseAsset( {
url: uploadUrl,
headers: {
"content-type": "application/octet-stream",
"content-length": fileContent.length,
},
name: fileName,
data: fileContent,
} );
}
console.log( `Release ${ tagName } created and assets uploaded successfully.` );
} catch ( error ) {
console.error( 'Failed to create release or upload assets:', error );
await sendSlackMessage( `Failed to create GitHub release or upload assets during build: ${ error.message }`, 'error' );
process.exit( 1 );
}
};
uploadRelease();