import axios from 'axios' ; import * as fs from 'fs' ; import * as path from 'path' ; import * as mime from 'mime' ; const githubToken = process . env . GH_TOKEN ; async function tagUrl ( tag ) { const response = await axios . get ( `https://api.github.com/repos/thomasnordquist/mqtt-explorer/releases?access_token=${ githubToken }` ) ; const tagRelease = response . data . find ( ( release ) => release . tag_name === tag ) ; return tagRelease ? cleanUploadUrl ( tagRelease . upload_url ) : undefined ; } async function createDraft ( tag ) { console . log ( 'create draft' ) ; const response = await axios ( { method : 'post' , url : `https://api.github.com/repos/thomasnordquist/mqtt-explorer/releases?access_token=${ githubToken }` , data : { tag_name : tag , name : tag . slice ( 1 ) , draft : true } } ) ; return cleanUploadUrl ( response . data . upload_url ) ; } function cleanUploadUrl ( url ) { const match = url . match ( /(.*){/ ) ; return match ? match [ 1 ] : undefined ; } async function uploadAsset ( ) { const tag = process . env . GIT_TAG ; const files = process . argv . slice ( 2 ) ; if ( ! tag || files . length === 0 ) { console . log ( 'Nothing to do' ) ; return ; } let uploadUrl ; try { uploadUrl = await tagUrl ( tag ) ; if ( ! uploadUrl ) { console . log ( 'tag does not exist' ) ; try { uploadUrl = await createDraft ( tag ) ; } catch ( error ) { console . error ( 'failed to create draft' , error . stack ) ; process . exit ( 1 ) ; } } } catch ( error ) { console . error ( 'failed to find tag release' , error . stack ) ; process . exit ( 1 ) ; } if ( uploadUrl ) { console . log ( uploadUrl ) ; for ( const file of files ) { console . log ( 'uploading file' , file ) ; await uploadFile ( uploadUrl , file ) ; console . log ( 'upload completed' ) ; } } } async function uploadFile ( uploadUrl , file ) { const data = fs . readFileSync ( file ) ; const mimeType = mime . getType ( path . extname ( file ) ) ; return axios ( { data , method : 'post' , url : `${ uploadUrl }?name=${ path . basename ( file ) }&access_token=${ githubToken }` , headers : { 'Content-Type' : mimeType } } ) ; } uploadAsset ( ) ;