1+ import fs from 'fs' ;
2+ import path from 'path' ;
13import { Octokit } from '@octokit/rest' ;
2- import {
3- GetResponseTypeFromEndpointMethod ,
4- GetResponseDataTypeFromEndpointMethod ,
5- } from "@octokit/types" ;
64import semver from 'semver' ;
75
86/**
@@ -14,16 +12,21 @@ const REPO = Object.freeze({
1412} ) ;
1513
1614/**
17- * Determine if this version is releasable .
15+ * Release mongosh to Github releases .
1816 *
1917 * @param {string } version - The current version.
18+ * @param {string } artifact - The artifact path.
2019 * @param {Octokit } octokit - The octokit instance.
21- *
22- * @returns {Promise } The promise of the boolean.
2320 */
24- const isReleasable = async ( version : string , octokit : Octokit ) : Promise < boolean > => {
21+ const releaseToGithub = async ( version : string , artifact : string , octokit : Octokit ) : Promise < any > => {
2522 const latestRelease = await getLatestRelease ( octokit ) ;
26- return semver . gt ( version , latestRelease . tag_name . replace ( 'v' , '' ) ) ;
23+ if ( semver . gt ( version , latestRelease . tag_name . replace ( 'v' , '' ) ) ) {
24+ // Create a new release if our version is higher than latest.
25+ const newRelease = await createRelease ( version , octokit ) ;
26+ await uploadAsset ( artifact , newRelease . id , octokit ) ;
27+ } else {
28+ await uploadAsset ( artifact , latestRelease . id , octokit ) ;
29+ }
2730} ;
2831
2932/**
@@ -48,33 +51,43 @@ const getLatestRelease = async(octokit: Octokit): Promise<any> => {
4851 * @param {string } version - The release version.
4952 * @param {Octokit } octokit - The octokit instance.
5053 */
51- const createRelease = ( version : string , octokit : Octokit ) : Promise < any > => {
54+ const createRelease = async ( version : string , octokit : Octokit ) : Promise < any > => {
5255 const params = {
5356 ...REPO ,
5457 tag_name : `v${ version } ` ,
5558 name : version ,
5659 body : 'TODO: Generate Release Notes'
5760 } ;
58- return octokit . repos . createRelease ( params ) ;
61+ const { data } = await octokit . repos . createRelease ( params ) ;
62+ console . log ( 'mongosh: created release:' , data ) ;
63+ return data ;
5964} ;
6065
6166/**
6267 * Upload the asset to the release.
6368 *
64- *
69+ * @param {string } artifact - The artifact.
70+ * @param {number } releaseId - The release id.
71+ * @param {Octokit } octokit - The octokit instance.
6572 */
6673const uploadAsset = ( artifact : string , releaseId : number , octokit : Octokit ) : Promise < any > => {
6774 const params = {
6875 ...REPO ,
6976 release_id : releaseId ,
70- data : ''
77+ name : path . basename ( artifact ) ,
78+ data : artifact
7179 } ;
72- return octokit . repos . uploadReleaseAsset ( params ) ;
80+ console . log ( 'mongosh: uploading asset:' , artifact ) ;
81+ return octokit . repos . uploadReleaseAsset ( params ) . catch ( ( e ) => {
82+ // If the asset already exists it will throw, but we just log
83+ // it since we don't want to overwrite assets.
84+ console . error ( e ) ;
85+ } ) ;
7386} ;
7487
75- export default createRelease ;
88+ export default releaseToGithub ;
7689export {
77- isReleasable ,
90+ getLatestRelease ,
7891 createRelease ,
7992 uploadAsset
8093} ;
0 commit comments