@gravityforms/gulp-tasks
Version:
Configurable Gulp tasks for use in Gravity Forms projects.
128 lines (107 loc) • 4.29 kB
JavaScript
const axios = require( 'axios' );
const FormData = require( 'form-data' );
const fs = require( 'fs' );
const path = require( 'path' );
const { loadEnv } = require( '../utils/tools' );
const getPluginVersion = require( '../utils/get-plugin-version' );
const sendSlackMessage = require( '../utils/send-slack-message' );
const generateSha1 = require( '../utils/generate-sha-1' );
const getConfig = require('../../config');
const { config } = getConfig();
const { trailingSlashIt, getLatestChangelogEntry } = require( './util' );
loadEnv( config.paths.root );
const rootPath = config?.paths?.root || '';
const fileName = config?.settings?.rootPluginFile || '';
const updateManagerVersion = async () => {
// Check if not in production mode and exit early
if ( process.env.GULP_PRODUCTION_MODE !== 'true' ) {
console.log( 'Skipping updating manager version because GULP_PRODUCTION_MODE is not set to true.' );
return;
}
const slug = config?.settings?.slug || 'gravityforms';
const version = process.env.GRAVITY_PLUGIN_VERSION || getPluginVersion( rootPath, fileName );
const apiKey = process.env.MANAGER_API_KEY || '';
const managerUrl = process.env.MANAGER_URL || '';
if ( ! apiKey || ! managerUrl ) {
console.error( 'API key or manager URL not found, cannot update manager version.' );
return;
}
// Get the changelog entry for the latest version (only if enabled)
let changelogEntry = null;
if ( process.env.UPDATE_CHANGELOG === 'true' ) {
const changelogPath = path.join( rootPath, 'change_log.txt' );
changelogEntry = getLatestChangelogEntry( changelogPath );
}
let pathValue = '';
if ( /gravityforms|gravityflow/.test( slug ) ) {
pathValue =
slug === 'gravityforms'
? `gravityforms/releases/gravityforms_${ version }.zip`
: `gravityforms/addons/${ slug.replace( 'gravityforms', '' ) }/${ slug }_${ version }.zip`;
} else {
pathValue = `${ slug }/releases/${ slug }_${ version }.zip`
}
// Generate SHA1 hash and get file size for the zip file
const zipFileName = `${ slug }_${ version }.zip`;
const zipFilePath = path.join( rootPath, zipFileName );
let sha1Hash = null;
let fileSize = null;
if ( fs.existsSync( zipFilePath ) ) {
sha1Hash = await generateSha1( zipFilePath );
fileSize = fs.statSync( zipFilePath ).size;
console.log( `Generated SHA1 hash for ${ zipFileName }: ${ sha1Hash }` );
console.log( `File size for ${ zipFileName }: ${ fileSize } bytes` );
} else {
console.log( `Zip file not found at ${ zipFilePath }, skipping hash and file size generation.` );
}
console.log( `Updating Gravity manager version with path value: ${ pathValue }.` );
if ( process.env.UPDATE_CHANGELOG === 'true' ) {
if ( changelogEntry ) {
console.log( 'Including changelog entry in update request.' );
console.log( 'Changelog entry: ', changelogEntry );
} else {
console.log( 'UPDATE_CHANGELOG enabled but no changelog entry found, proceeding without changelog data.' );
}
} else {
console.log( 'UPDATE_CHANGELOG not enabled, skipping changelog data.' );
}
try {
const params = {
api_key: apiKey,
slug: slug,
latest_version: version,
path: pathValue,
};
// Add hash if available
if ( sha1Hash ) {
params.hash = sha1Hash;
}
// Add file size if available
if ( fileSize ) {
params.file_size = fileSize;
}
// Add changelog if available
if ( changelogEntry ) {
params.change_log = changelogEntry;
}
console.log( 'Updating Gravity manager version with params: ', params );
console.log( 'Manager URL: ', `${ trailingSlashIt( managerUrl ) }wp-json/gravityapi/v1/addons/update_latest_version` );
const response = await axios.patch(
`${ trailingSlashIt( managerUrl ) }wp-json/gravityapi/v1/addons/update_latest_version`,
{},
{
params,
headers: {
'Content-Type': 'application/json'
}
}
);
console.log( 'Success, updated Gravity manager version: ', response.data );
} catch ( error ) {
console.error( 'Error, could not update Gravity manager version: ', error.response ? error.response.data : error.message );
await sendSlackMessage( `Failed to update manager version during build: ${ error.response ? error.response.data : error.message }`, 'error' );
process.exit( 1 );
}
};
updateManagerVersion();