11import * as core from '@actions/core' ;
2- import { context , GitHub } from '@actions/github' ;
2+ import { context , getOctokit } from '@actions/github' ;
3+ import { RestEndpointMethodTypes } from '@octokit/plugin-rest-endpoint-methods/dist-types/' ;
34
4- import { Context } from '@actions/github/lib/context' ;
5-
6- import Octokit from '@actions/github/node_modules/@octokit/rest' ;
7-
8- type ReposCreateReleaseParams = Octokit . Octokit . ReposCreateReleaseParams ;
5+ type Context = typeof context ;
6+ type GitHub = ReturnType < typeof getOctokit > ;
7+ type ReposCreateReleaseParams = RestEndpointMethodTypes [ 'repos' ] [ 'createRelease' ] [ 'parameters' ] ;
98
109const listReleases = async ( client : GitHub , ctx : Context ) => {
1110 const response = await client . repos . listReleases ( {
1211 owner : ctx . repo . owner ,
1312 page : 0 ,
14- // eslint-disable-next-line @typescript-eslint/camelcase
1513 per_page : 10 ,
1614 repo : ctx . repo . repo ,
1715 } ) ;
@@ -34,9 +32,15 @@ const findRelease = async (client: GitHub, ctx: Context, tag: string) => {
3432const createRelease = async ( client : GitHub , params : ReposCreateReleaseParams ) => {
3533 core . startGroup ( `Creating ${ params . tag_name } release` ) ;
3634 const response = await client . repos . createRelease ( params ) ;
37- core . info ( `Release ${ response . data . tag_name } created [id: ${ response . data . id } ]` ) ;
38- core . endGroup ( ) ;
39- return response . data ;
35+ if ( response ) {
36+ core . info ( `Release ${ response . data . tag_name } created [id: ${ response . data . id } ]` ) ;
37+ core . endGroup ( ) ;
38+ return response . data ;
39+ } else {
40+ core . info ( `Unable to create release ${ params . tag_name } ` ) ;
41+ core . endGroup ( ) ;
42+ return undefined ;
43+ }
4044} ;
4145
4246const prepareParams = (
@@ -46,22 +50,20 @@ const prepareParams = (
4650 prerelease : boolean ,
4751 tag : string ,
4852 target : string ,
49- ) : ReposCreateReleaseParams => {
53+ ) => {
5054 return {
5155 body,
5256 draft,
5357 name,
5458 owner : context . repo . owner ,
5559 prerelease,
5660 repo : context . repo . repo ,
57- // eslint-disable-next-line @typescript-eslint/camelcase
5861 tag_name : tag ,
59- // eslint-disable-next-line @typescript-eslint/camelcase
6062 target_commitish : target ,
6163 } ;
6264} ;
6365
64- export const run = async ( ) => {
66+ export const run = async ( ) : Promise < void > => {
6567 const tag = core . getInput ( 'tag' , { required : true } ) ;
6668 const name = core . getInput ( 'name' , { required : false } ) || `${ tag } Release` ;
6769 const body = core . getInput ( 'body' , { required : false } ) || name ;
@@ -74,17 +76,24 @@ export const run = async () => {
7476 throw Error ( 'Missing GITHUB_TOKEN' ) ;
7577 }
7678
77- const github = new GitHub ( process . env . GITHUB_TOKEN ) ;
79+ const octokit = getOctokit ( process . env . GITHUB_TOKEN ) ;
7880
79- let release = await findRelease ( github , context , tag ) ;
81+ const release = await findRelease ( octokit , context , tag ) ;
8082
81- if ( ! release ) {
82- release = await createRelease ( github , prepareParams ( body , draft , name , prerelease , tag , target ) ) ;
83+ if ( release ) {
84+ core . setOutput ( 'id' , release . id . toString ( ) ) ;
85+ core . setOutput ( 'url' , release . url ) ;
86+ core . setOutput ( 'upload_url' , release . upload_url ) ;
87+ } else {
88+ const newRelease = await createRelease ( octokit , prepareParams ( body , draft , name , prerelease , tag , target ) ) ;
89+ if ( newRelease ) {
90+ core . setOutput ( 'id' , newRelease . id . toString ( ) ) ;
91+ core . setOutput ( 'url' , newRelease . url ) ;
92+ core . setOutput ( 'upload_url' , newRelease . upload_url ) ;
93+ } else {
94+ throw Error ( 'Unable to create release' ) ;
95+ }
8396 }
84-
85- core . setOutput ( 'id' , release . id . toString ( ) ) ;
86- core . setOutput ( 'url' , release . url ) ;
87- core . setOutput ( 'upload_url' , release . upload_url ) ;
8897 } catch ( error ) {
8998 core . setFailed ( error ) ;
9099 }
0 commit comments