UNPKG

@gravityforms/gulp-tasks

Version:
110 lines (97 loc) 4.07 kB
const gulp = require( 'gulp' ); const path = require( 'path' ); const awspublish = require( 'gulp-awspublish' ); const awspublishRouter = require( 'gulp-awspublish-router' ); const getPluginVersion = require( '../utils/get-plugin-version' ); const sendSlackMessage = require( '../utils/send-slack-message' ); const getConfig = require('../../config'); const { config } = getConfig(); const { isGravityFormsAddon, trailingSlashIt } = require( '../utils/tools' ); const version = () => process.env.GRAVITY_PLUGIN_VERSION || getPluginVersion( config.paths.root, config.settings.rootPluginFile ); const zipPath = () => ! isGravityFormsAddon( config ) ? 'releases' : `addons/${ config.settings.slug.replace( 'gravityforms', '' ) }`; const getBucketName = ( publishConfig ) => { let bucketName = publishConfig?.bucket || config?.settings?.awsBucket || process.env.AWS_GRAVITYFORMS_BUCKET; const buildEnvironment = process.env.BUILD_ENVIRONMENT; if ( ! buildEnvironment ) { bucketName += `.dev`; } else if ( buildEnvironment !== 'prod' ) { bucketName += `.${ buildEnvironment }`; } return bucketName; }; const createPublisher = ( publishConfig ) => { const bucketName = getBucketName( publishConfig ); return awspublish.create( { credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, signatureVersion: 'v3', }, region: publishConfig.region || process.env.AWS_DEFAULT_REGION || 'us-east-1', params: { Bucket: bucketName, }, } ); }; const generatePublishTask = ( { filePath, uploadPathFunc, publishConfig } ) => () => { // Check if not in production mode and exit early if ( process.env.GULP_PRODUCTION_MODE !== 'true' ) { console.log( 'Skipping publishing task because GULP_PRODUCTION_MODE is not set to true.' ); // Using a dummy task to signal completion return gulp.task( 'dummy', done => done() )(); } const filePathResolved = typeof filePath === 'function' ? filePath() : filePath; const uploadPath = publishConfig.path || uploadPathFunc(); const accessLevel = publishConfig.access || 'private'; const force = publishConfig.force || false; const publisher = createPublisher( publishConfig ); const bucket = getBucketName( publishConfig ); const headers = { 'x-amz-acl': accessLevel }; console.log( `Publishing ${ filePathResolved } to S3 on the ${ bucket } bucket at ${ uploadPath } with ${ accessLevel } access` ); return gulp.src( filePathResolved ) .pipe( awspublishRouter( { routes: { "^.+$": { key: `${ trailingSlashIt( uploadPath ) }${ path.basename( filePathResolved ) }`, headers, } } } ) ) .pipe( publisher.publish( headers, { force } ) ) .on( 'error', function( err ) { console.error( 'AWS publishing error:', err ); sendSlackMessage( `Failed to upload to AWS during publish: ${ err }`, 'error' ).then( () => { process.exit( 1 ); } ); } ) .pipe( awspublish.reporter() ); }; module.exports = { publishReleaseZip: generatePublishTask( { filePath: () => `${ trailingSlashIt( config.paths.root ) }${ config.settings.slug }_${ version() }.zip`, uploadPathFunc: zipPath, publishConfig: config?.publish?.release?.zip || {}, } ), publishReleaseChangelog: generatePublishTask( { filePath: `${ trailingSlashIt( config.paths.root ) }change_log.txt`, uploadPathFunc: zipPath, publishConfig: config?.publish?.release?.changeLog || { access: 'public-read', }, } ), publishReleaseChecksums: generatePublishTask( { filePath: () => path.join( config.paths.root, 'checksums', `${ config.settings.slug }_${ version() }.md5` ), uploadPathFunc: () => `${ trailingSlashIt( zipPath() ) }checksums`, publishConfig: config?.publish?.release?.checksums || { access: 'public-read', force: true, }, } ), publishReleasePotFile: generatePublishTask( { filePath: () => path.join( config.paths.root, 'languages', `${ config.settings.slug }.pot` ), uploadPathFunc: () => 'translations/pots', publishConfig: config?.publish?.release?.pot || { access: 'public-read', }, } ), };