UNPKG

@gravityforms/gulp-tasks

Version:
95 lines (81 loc) 3.21 kB
#!/usr/bin/env node 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();