diff --git a/action.yml b/action.yml index aebbff9..4de6742 100644 --- a/action.yml +++ b/action.yml @@ -2,6 +2,9 @@ name: 'Upload a Release Asset' description: 'Upload a release asset to an existing release on your repository' author: 'GitHub' inputs: + release_id: + description: 'The id of the release' + required: true upload_url: description: 'The URL for uploading assets to the release' required: true diff --git a/dist/index.js b/dist/index.js index 6f0342d..69fb2e9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1695,7 +1695,7 @@ module.exports = require("https"); /***/ 215: /***/ (function(module) { -module.exports = {"_from":"@octokit/rest@^16.15.0","_id":"@octokit/rest@16.28.8","_inBundle":false,"_integrity":"sha512-FouTTcLdT++gwgKVnBN8CEVeFvY/OKzeaoH/L9LBvZhbjUotLthFWAdKa8WeOMt5x7Rs7uvBpu7IdcrtRD3wBA==","_location":"/@octokit/rest","_phantomChildren":{"os-name":"3.1.0"},"_requested":{"type":"range","registry":true,"raw":"@octokit/rest@^16.15.0","name":"@octokit/rest","escapedName":"@octokit%2frest","scope":"@octokit","rawSpec":"^16.15.0","saveSpec":null,"fetchSpec":"^16.15.0"},"_requiredBy":["/@actions/github"],"_resolved":"https://registry.npmjs.org/@octokit/rest/-/rest-16.28.8.tgz","_shasum":"9b57829084892a67654eaac075e1860bdd4b9419","_spec":"@octokit/rest@^16.15.0","_where":"/Users/IAmHughes/github/repos/actions-release/.github/actions/actions-release/node_modules/@actions/github","author":{"name":"Gregor Martynus","url":"https://github.com/gr2m"},"bugs":{"url":"https://github.com/octokit/rest.js/issues"},"bundleDependencies":false,"bundlesize":[{"path":"./dist/octokit-rest.min.js.gz","maxSize":"33 kB"}],"contributors":[{"name":"Mike de Boer","email":"info@mikedeboer.nl"},{"name":"Fabian Jakobs","email":"fabian@c9.io"},{"name":"Joe Gallo","email":"joe@brassafrax.com"},{"name":"Gregor Martynus","url":"https://github.com/gr2m"}],"dependencies":{"@octokit/request":"^5.0.0","@octokit/request-error":"^1.0.2","atob-lite":"^2.0.0","before-after-hook":"^2.0.0","btoa-lite":"^1.0.0","deprecation":"^2.0.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.uniq":"^4.5.0","octokit-pagination-methods":"^1.1.0","once":"^1.4.0","universal-user-agent":"^3.0.0"},"deprecated":false,"description":"GitHub REST API client for Node.js","devDependencies":{"@gimenete/type-writer":"^0.1.3","@octokit/fixtures-server":"^5.0.1","@octokit/routes":"20.9.2","@types/node":"^12.0.0","bundlesize":"^0.18.0","chai":"^4.1.2","compression-webpack-plugin":"^3.0.0","coveralls":"^3.0.0","glob":"^7.1.2","http-proxy-agent":"^2.1.0","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.1","lodash.upperfirst":"^4.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","mustache":"^3.0.0","nock":"^10.0.0","npm-run-all":"^4.1.2","nyc":"^14.0.0","prettier":"^1.14.2","proxy":"^0.2.4","semantic-release":"^15.0.0","sinon":"^7.2.4","sinon-chai":"^3.0.0","sort-keys":"^4.0.0","standard":"^14.0.2","string-to-arraybuffer":"^1.0.0","string-to-jsdoc-comment":"^1.0.0","typescript":"^3.3.1","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.0.0","webpack-cli":"^3.0.0"},"files":["index.js","index.d.ts","lib","plugins"],"homepage":"https://github.com/octokit/rest.js#readme","keywords":["octokit","github","rest","api-client"],"license":"MIT","name":"@octokit/rest","nyc":{"ignore":["test"]},"publishConfig":{"access":"public"},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"repository":{"type":"git","url":"git+https://github.com/octokit/rest.js.git"},"scripts":{"build":"npm-run-all build:*","build:browser":"npm-run-all build:browser:*","build:browser:development":"webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json","build:browser:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map","build:ts":"node scripts/generate-types","coverage":"nyc report --reporter=html && open coverage/index.html","generate-bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","generate-routes":"node scripts/generate-routes","postvalidate:ts":"tsc --noEmit --target es6 test/typescript-validate.ts","prebuild:browser":"mkdirp dist/","pretest":"standard","prevalidate:ts":"npm run -s build:ts","start-fixtures-server":"octokit-fixtures-server","test":"nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"","test:browser":"cypress run --browser chrome","test:memory":"mocha test/memory-test","validate:ts":"tsc --target es6 --noImplicitAny index.d.ts"},"standard":{"globals":["describe","before","beforeEach","afterEach","after","it","expect","cy"],"ignore":["/docs"]},"types":"index.d.ts","version":"16.28.8"}; +module.exports = {"_args":[["@octokit/rest@16.28.8","/Users/feichao/Develop/upload-release-asset"]],"_from":"@octokit/rest@16.28.8","_id":"@octokit/rest@16.28.8","_inBundle":false,"_integrity":"sha512-FouTTcLdT++gwgKVnBN8CEVeFvY/OKzeaoH/L9LBvZhbjUotLthFWAdKa8WeOMt5x7Rs7uvBpu7IdcrtRD3wBA==","_location":"/@octokit/rest","_phantomChildren":{"os-name":"3.1.0"},"_requested":{"type":"version","registry":true,"raw":"@octokit/rest@16.28.8","name":"@octokit/rest","escapedName":"@octokit%2frest","scope":"@octokit","rawSpec":"16.28.8","saveSpec":null,"fetchSpec":"16.28.8"},"_requiredBy":["/@actions/github"],"_resolved":"https://registry.npmjs.org/@octokit/rest/-/rest-16.28.8.tgz","_spec":"16.28.8","_where":"/Users/feichao/Develop/upload-release-asset","author":{"name":"Gregor Martynus","url":"https://github.com/gr2m"},"bugs":{"url":"https://github.com/octokit/rest.js/issues"},"bundlesize":[{"path":"./dist/octokit-rest.min.js.gz","maxSize":"33 kB"}],"contributors":[{"name":"Mike de Boer","email":"info@mikedeboer.nl"},{"name":"Fabian Jakobs","email":"fabian@c9.io"},{"name":"Joe Gallo","email":"joe@brassafrax.com"},{"name":"Gregor Martynus","url":"https://github.com/gr2m"}],"dependencies":{"@octokit/request":"^5.0.0","@octokit/request-error":"^1.0.2","atob-lite":"^2.0.0","before-after-hook":"^2.0.0","btoa-lite":"^1.0.0","deprecation":"^2.0.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.uniq":"^4.5.0","octokit-pagination-methods":"^1.1.0","once":"^1.4.0","universal-user-agent":"^3.0.0"},"description":"GitHub REST API client for Node.js","devDependencies":{"@gimenete/type-writer":"^0.1.3","@octokit/fixtures-server":"^5.0.1","@octokit/routes":"20.9.2","@types/node":"^12.0.0","bundlesize":"^0.18.0","chai":"^4.1.2","compression-webpack-plugin":"^3.0.0","coveralls":"^3.0.0","glob":"^7.1.2","http-proxy-agent":"^2.1.0","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.1","lodash.upperfirst":"^4.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","mustache":"^3.0.0","nock":"^10.0.0","npm-run-all":"^4.1.2","nyc":"^14.0.0","prettier":"^1.14.2","proxy":"^0.2.4","semantic-release":"^15.0.0","sinon":"^7.2.4","sinon-chai":"^3.0.0","sort-keys":"^4.0.0","standard":"^14.0.2","string-to-arraybuffer":"^1.0.0","string-to-jsdoc-comment":"^1.0.0","typescript":"^3.3.1","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.0.0","webpack-cli":"^3.0.0"},"files":["index.js","index.d.ts","lib","plugins"],"homepage":"https://github.com/octokit/rest.js#readme","keywords":["octokit","github","rest","api-client"],"license":"MIT","name":"@octokit/rest","nyc":{"ignore":["test"]},"publishConfig":{"access":"public"},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"repository":{"type":"git","url":"git+https://github.com/octokit/rest.js.git"},"scripts":{"build":"npm-run-all build:*","build:browser":"npm-run-all build:browser:*","build:browser:development":"webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json","build:browser:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map","build:ts":"node scripts/generate-types","coverage":"nyc report --reporter=html && open coverage/index.html","generate-bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","generate-routes":"node scripts/generate-routes","postvalidate:ts":"tsc --noEmit --target es6 test/typescript-validate.ts","prebuild:browser":"mkdirp dist/","pretest":"standard","prevalidate:ts":"npm run -s build:ts","start-fixtures-server":"octokit-fixtures-server","test":"nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"","test:browser":"cypress run --browser chrome","test:memory":"mocha test/memory-test","validate:ts":"tsc --target es6 --noImplicitAny index.d.ts"},"standard":{"globals":["describe","before","beforeEach","afterEach","after","it","expect","cy"],"ignore":["/docs"]},"types":"index.d.ts","version":"16.28.8"}; /***/ }), @@ -3794,7 +3794,7 @@ function octokitRestNormalizeGitReferenceResponses (octokit) { /***/ 314: /***/ (function(module) { -module.exports = {"_from":"@octokit/graphql@^2.0.1","_id":"@octokit/graphql@2.1.3","_inBundle":false,"_integrity":"sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==","_location":"/@octokit/graphql","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"@octokit/graphql@^2.0.1","name":"@octokit/graphql","escapedName":"@octokit%2fgraphql","scope":"@octokit","rawSpec":"^2.0.1","saveSpec":null,"fetchSpec":"^2.0.1"},"_requiredBy":["/@actions/github"],"_resolved":"https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz","_shasum":"60c058a0ed5fa242eca6f938908d95fd1a2f4b92","_spec":"@octokit/graphql@^2.0.1","_where":"/Users/IAmHughes/github/repos/actions-release/.github/actions/actions-release/node_modules/@actions/github","author":{"name":"Gregor Martynus","url":"https://github.com/gr2m"},"bugs":{"url":"https://github.com/octokit/graphql.js/issues"},"bundleDependencies":false,"bundlesize":[{"path":"./dist/octokit-graphql.min.js.gz","maxSize":"5KB"}],"dependencies":{"@octokit/request":"^5.0.0","universal-user-agent":"^2.0.3"},"deprecated":false,"description":"GitHub GraphQL API client for browsers and Node","devDependencies":{"chai":"^4.2.0","compression-webpack-plugin":"^2.0.0","coveralls":"^3.0.3","cypress":"^3.1.5","fetch-mock":"^7.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","npm-run-all":"^4.1.3","nyc":"^14.0.0","semantic-release":"^15.13.3","simple-mock":"^0.8.0","standard":"^12.0.1","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0","webpack-cli":"^3.2.3"},"files":["lib"],"homepage":"https://github.com/octokit/graphql.js#readme","keywords":["octokit","github","api","graphql"],"license":"MIT","main":"index.js","name":"@octokit/graphql","publishConfig":{"access":"public"},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"repository":{"type":"git","url":"git+https://github.com/octokit/graphql.js.git"},"scripts":{"build":"npm-run-all build:*","build:development":"webpack --mode development --entry . --output-library=octokitGraphql --output=./dist/octokit-graphql.js --profile --json > dist/bundle-stats.json","build:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=octokitGraphql --output-path=./dist --output-filename=octokit-graphql.min.js --devtool source-map","bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","coverage":"nyc report --reporter=html && open coverage/index.html","coverage:upload":"nyc report --reporter=text-lcov | coveralls","prebuild":"mkdirp dist/","pretest":"standard","test":"nyc mocha test/*-test.js","test:browser":"cypress run --browser chrome"},"standard":{"globals":["describe","before","beforeEach","afterEach","after","it","expect"]},"version":"2.1.3"}; +module.exports = {"_args":[["@octokit/graphql@2.1.3","/Users/feichao/Develop/upload-release-asset"]],"_from":"@octokit/graphql@2.1.3","_id":"@octokit/graphql@2.1.3","_inBundle":false,"_integrity":"sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==","_location":"/@octokit/graphql","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"@octokit/graphql@2.1.3","name":"@octokit/graphql","escapedName":"@octokit%2fgraphql","scope":"@octokit","rawSpec":"2.1.3","saveSpec":null,"fetchSpec":"2.1.3"},"_requiredBy":["/@actions/github"],"_resolved":"https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz","_spec":"2.1.3","_where":"/Users/feichao/Develop/upload-release-asset","author":{"name":"Gregor Martynus","url":"https://github.com/gr2m"},"bugs":{"url":"https://github.com/octokit/graphql.js/issues"},"bundlesize":[{"path":"./dist/octokit-graphql.min.js.gz","maxSize":"5KB"}],"dependencies":{"@octokit/request":"^5.0.0","universal-user-agent":"^2.0.3"},"description":"GitHub GraphQL API client for browsers and Node","devDependencies":{"chai":"^4.2.0","compression-webpack-plugin":"^2.0.0","coveralls":"^3.0.3","cypress":"^3.1.5","fetch-mock":"^7.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","npm-run-all":"^4.1.3","nyc":"^14.0.0","semantic-release":"^15.13.3","simple-mock":"^0.8.0","standard":"^12.0.1","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0","webpack-cli":"^3.2.3"},"files":["lib"],"homepage":"https://github.com/octokit/graphql.js#readme","keywords":["octokit","github","api","graphql"],"license":"MIT","main":"index.js","name":"@octokit/graphql","publishConfig":{"access":"public"},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"repository":{"type":"git","url":"git+https://github.com/octokit/graphql.js.git"},"scripts":{"build":"npm-run-all build:*","build:development":"webpack --mode development --entry . --output-library=octokitGraphql --output=./dist/octokit-graphql.js --profile --json > dist/bundle-stats.json","build:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=octokitGraphql --output-path=./dist --output-filename=octokit-graphql.min.js --devtool source-map","bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","coverage":"nyc report --reporter=html && open coverage/index.html","coverage:upload":"nyc report --reporter=text-lcov | coveralls","prebuild":"mkdirp dist/","pretest":"standard","test":"nyc mocha test/*-test.js","test:browser":"cypress run --browser chrome"},"standard":{"globals":["describe","before","beforeEach","afterEach","after","it","expect"]},"version":"2.1.3"}; /***/ }), @@ -4114,7 +4114,7 @@ function octokitDebug (octokit) { /***/ (function(module, __unusedexports, __webpack_require__) { const core = __webpack_require__(470); -const { GitHub } = __webpack_require__(469); +const { GitHub, context } = __webpack_require__(469); const fs = __webpack_require__(747); async function run() { @@ -4122,12 +4122,33 @@ async function run() { // Get authenticated GitHub client (Ocktokit): https://github.com/actions/toolkit/tree/master/packages/github#usage const github = new GitHub(process.env.GITHUB_TOKEN); + // Get owner and repo from context of payload that triggered the action + const { owner, repo } = context.repo; + // Get the inputs from the workflow file: https://github.com/actions/toolkit/tree/master/packages/core#inputsoutputs + const releaseId = core.getInput('release_id', { required: true }); const uploadUrl = core.getInput('upload_url', { required: true }); const assetPath = core.getInput('asset_path', { required: true }); const assetName = core.getInput('asset_name', { required: true }); const assetContentType = core.getInput('asset_content_type', { required: true }); + const listAssetsResponse = await github.repos.listAssetsForRelease({ + owner, + repo, + release_id: releaseId + }); + const { data: assets } = listAssetsResponse; + + assets.forEach(async asset => { + if (asset.name === assetName) { + await github.repos.deleteReleaseAsset({ + owner, + repo, + asset_id: asset.id + }); + } + }); + // Determine content-length for header to upload asset const contentLength = filePath => fs.statSync(filePath).size; diff --git a/package.json b/package.json index 4ca8d42..f4d8070 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "upload-release-asset", - "version": "1.0.0", + "version": "1.0.2", "private": true, "description": "Upload a release asset to an existing GitHub Release", "main": "dist/index.js", diff --git a/src/upload-release-asset.js b/src/upload-release-asset.js index 411bdcf..e0938ab 100644 --- a/src/upload-release-asset.js +++ b/src/upload-release-asset.js @@ -1,5 +1,5 @@ const core = require('@actions/core'); -const { GitHub } = require('@actions/github'); +const { GitHub, context } = require('@actions/github'); const fs = require('fs'); async function run() { @@ -7,12 +7,33 @@ async function run() { // Get authenticated GitHub client (Ocktokit): https://github.com/actions/toolkit/tree/master/packages/github#usage const github = new GitHub(process.env.GITHUB_TOKEN); + // Get owner and repo from context of payload that triggered the action + const { owner, repo } = context.repo; + // Get the inputs from the workflow file: https://github.com/actions/toolkit/tree/master/packages/core#inputsoutputs + const releaseId = core.getInput('release_id', { required: true }); const uploadUrl = core.getInput('upload_url', { required: true }); const assetPath = core.getInput('asset_path', { required: true }); const assetName = core.getInput('asset_name', { required: true }); const assetContentType = core.getInput('asset_content_type', { required: true }); + const listAssetsResponse = await github.repos.listAssetsForRelease({ + owner, + repo, + release_id: releaseId + }); + const { data: assets } = listAssetsResponse; + + assets.forEach(async asset => { + if (asset.name === assetName) { + await github.repos.deleteReleaseAsset({ + owner, + repo, + asset_id: asset.id + }); + } + }); + // Determine content-length for header to upload asset const contentLength = filePath => fs.statSync(filePath).size; diff --git a/tests/upload-release-asset.test.js b/tests/upload-release-asset.test.js index cf95ec8..87b5b00 100644 --- a/tests/upload-release-asset.test.js +++ b/tests/upload-release-asset.test.js @@ -10,6 +10,7 @@ const run = require('../src/upload-release-asset'); /* eslint-disable no-undef */ describe('Upload Release Asset', () => { let uploadReleaseAsset; + let listAssetsForRelease; let content; beforeEach(() => { @@ -19,6 +20,9 @@ describe('Upload Release Asset', () => { } }); + listAssetsForRelease = jest.fn().mockReturnValueOnce({ + data: [] + }); fs.statSync = jest.fn().mockReturnValueOnce({ size: 527 }); @@ -33,7 +37,8 @@ describe('Upload Release Asset', () => { const github = { repos: { - uploadReleaseAsset + uploadReleaseAsset, + listAssetsForRelease } }; @@ -43,6 +48,7 @@ describe('Upload Release Asset', () => { test('Upload release asset endpoint is called', async () => { core.getInput = jest .fn() + .mockReturnValueOnce('release_id') .mockReturnValueOnce('upload_url') .mockReturnValueOnce('asset_path') .mockReturnValueOnce('asset_name') @@ -61,6 +67,123 @@ describe('Upload Release Asset', () => { test('Output is set', async () => { core.getInput = jest .fn() + .mockReturnValueOnce('release_id') + .mockReturnValueOnce('upload_url') + .mockReturnValueOnce('asset_path') + .mockReturnValueOnce('asset_name') + .mockReturnValueOnce('asset_content_type'); + + core.setOutput = jest.fn(); + + await run(); + + expect(core.setOutput).toHaveBeenNthCalledWith(1, 'browser_download_url', 'browserDownloadUrl'); + }); + + test('Action fails elegantly', async () => { + core.getInput = jest + .fn() + .mockReturnValueOnce('release_id') + .mockReturnValueOnce('upload_url') + .mockReturnValueOnce('asset_path') + .mockReturnValueOnce('asset_name') + .mockReturnValueOnce('asset_content_type'); + + uploadReleaseAsset.mockRestore(); + uploadReleaseAsset.mockImplementation(() => { + throw new Error('Error uploading release asset'); + }); + + core.setOutput = jest.fn(); + + core.setFailed = jest.fn(); + + await run(); + + expect(uploadReleaseAsset).toHaveBeenCalled(); + expect(core.setFailed).toHaveBeenCalledWith('Error uploading release asset'); + expect(core.setOutput).toHaveBeenCalledTimes(0); + }); +}); + +/* eslint-disable no-undef */ +describe('Upload Release Asset', () => { + let uploadReleaseAsset; + let listAssetsForRelease; + let deleteReleaseAsset; + let content; + + beforeEach(() => { + uploadReleaseAsset = jest.fn().mockReturnValueOnce({ + data: { + browser_download_url: 'browserDownloadUrl' + } + }); + + listAssetsForRelease = jest.fn().mockReturnValueOnce({ + data: [ + { + id: 'asset_id', + name: 'asset_name', + browser_download_url: 'browserDownloadUrl' + }, + { + id: 'asset_id2', + name: 'asset_name2', + browser_download_url: 'browserDownloadUrl' + } + ] + }); + + deleteReleaseAsset = jest.fn().mockReturnValueOnce({ + data: {} + }); + + fs.statSync = jest.fn().mockReturnValueOnce({ + size: 527 + }); + + content = Buffer.from('test content'); + fs.readFileSync = jest.fn().mockReturnValueOnce(content); + + context.repo = { + owner: 'owner', + repo: 'repo' + }; + + const github = { + repos: { + uploadReleaseAsset, + listAssetsForRelease, + deleteReleaseAsset + } + }; + + GitHub.mockImplementation(() => github); + }); + + test('Delete release asset endpoint is called', async () => { + core.getInput = jest + .fn() + .mockReturnValueOnce('release_id') + .mockReturnValueOnce('upload_url') + .mockReturnValueOnce('asset_path') + .mockReturnValueOnce('asset_name') + .mockReturnValueOnce('asset_content_type'); + + await run(); + + expect(deleteReleaseAsset).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repo', + asset_id: 'asset_id' + }); + }); + + test('Output is set', async () => { + core.getInput = jest + .fn() + .mockReturnValueOnce('release_id') .mockReturnValueOnce('upload_url') .mockReturnValueOnce('asset_path') .mockReturnValueOnce('asset_name') @@ -76,6 +199,7 @@ describe('Upload Release Asset', () => { test('Action fails elegantly', async () => { core.getInput = jest .fn() + .mockReturnValueOnce('release_id') .mockReturnValueOnce('upload_url') .mockReturnValueOnce('asset_path') .mockReturnValueOnce('asset_name')