diff --git a/README.md b/README.md index 1a173ff..b7c0bff 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,7 @@ So the command `taoRelease` will use the sources. Useful commands : - `npm test` runs the test suite +- `npx jest -- my-test.spec.js` runs a single test - `npm run test:cov` runs the test suite with code coverage - `npm run test:dev` runs the test suite in watch mode - `npm run lint` verifies the sources complies with the code style guide diff --git a/src/release.js b/src/release.js index 7558405..24a8b84 100644 --- a/src/release.js +++ b/src/release.js @@ -613,7 +613,15 @@ export default function taoExtensionReleaseFactory(params = {}) { async removeReleasingBranch() { log.doing('Clean up the place'); - await gitClient.deleteBranch(data.releasingBranch); + try { + await gitClient.deleteBranch(data.releasingBranch); + } catch (error) { + if (error.message.includes('remote ref does not exist')) { + log.warn(`Cannot delete branch ${data.releasingBranch}: ${error} - ${error.stack}`); + } else { + throw error; + } + } log.done(); }, diff --git a/tests/unit/release/removeReleasingBranch/release.spec.js b/tests/unit/release/removeReleasingBranch/release.spec.js index 875ac71..62ae889 100644 --- a/tests/unit/release/removeReleasingBranch/release.spec.js +++ b/tests/unit/release/removeReleasingBranch/release.spec.js @@ -98,4 +98,49 @@ describe('src/release.js removeReleasingBranch', () => { expect(deleteBranch).toBeCalledTimes(1); expect(deleteBranch).toBeCalledWith(`${branchPrefix}-${version}`); }); + test('should bypass error deleting release branch when it does not exist', async () => { + expect.assertions(2); + + const deleteBranch = jest.fn(); + + deleteBranch.mockImplementationOnce(() => { + throw new Error('remote ref does not exist'); + }); + + git.mockImplementationOnce(() => { + return { + deleteBranch + }; + }); + + const release = releaseFactory(branchPrefix); + release.setData({ releasingBranch, token, extension: {} }); + await release.initialiseGitClient(); + await release.removeReleasingBranch(); + + expect(deleteBranch).toBeCalledTimes(1); + expect(deleteBranch).toBeCalledWith(`${branchPrefix}-${version}`); + }); + test('should not bypass error deleting release branch when another error', async () => { + expect.assertions(3); + + const deleteBranch = jest.fn(); + + deleteBranch.mockImplementationOnce(() => { + throw new Error('Some other error'); + }); + + git.mockImplementationOnce(() => { + return { + deleteBranch + }; + }); + + const release = releaseFactory(branchPrefix); + release.setData({ releasingBranch, token, extension: {} }); + await release.initialiseGitClient(); + await expect(() => release.removeReleasingBranch()).rejects.toThrowError('Some other error'); + expect(deleteBranch).toBeCalledTimes(1); + expect(deleteBranch).toBeCalledWith(`${branchPrefix}-${version}`); + }); });