Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ This action finds or creates a release, so your workflow can access it.
...
- name: nodejs project information
id: projectinfo
uses: gregoranders/nodejs-project-info@v0.0.5
uses: gregoranders/nodejs-project-info@v0.0.6
- name: create release
id: createrelease
uses: gregoranders/nodejs-create-release@v0.0.5
uses: gregoranders/nodejs-create-release@v0.0.6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand Down
2 changes: 1 addition & 1 deletion dist/index.js

Large diffs are not rendered by default.

30 changes: 15 additions & 15 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "nodejs-create-release",
"version": "0.0.5",
"version": "0.0.6",
"description": "NodeJS Create Release",
"main": "./dist/index.js",
"scripts": {
Expand Down Expand Up @@ -62,24 +62,24 @@
},
"homepage": "https://gregoranders.github.io/nodejs-create-release/",
"dependencies": {
"@actions/core": "1.2.3",
"@actions/github": "2.1.1"
"@actions/core": "1.2.4",
"@actions/github": "3.0.0"
},
"devDependencies": {
"@octokit/rest": "17.4.0",
"@types/jest": "25.2.1",
"@zeit/ncc": "0.22.1",
"@typescript-eslint/eslint-plugin": "2.28.0",
"@typescript-eslint/parser": "2.28.0",
"eslint": "6.8.0",
"eslint-config-prettier": "6.10.1",
"@octokit/rest": "17.10.0",
"@types/jest": "25.2.3",
"@typescript-eslint/eslint-plugin": "3.1.0",
"@typescript-eslint/parser": "3.1.0",
"@zeit/ncc": "0.22.3",
"eslint": "7.2.0",
"eslint-config-prettier": "6.11.0",
"eslint-plugin-prettier": "3.1.3",
"husky": "4.2.5",
"jest": "25.4.0",
"prettier": "2.0.4",
"jest": "26.0.1",
"prettier": "2.0.5",
"rimraf": "3.0.2",
"ts-jest": "25.4.0",
"ts-node": "8.8.2",
"typescript": "3.8.3"
"ts-jest": "26.1.0",
"ts-node": "8.10.2",
"typescript": "3.9.5"
}
}
27 changes: 26 additions & 1 deletion src/action.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/camelcase */
import { clearTestEnvironment, createReleaseMock, listReleasesMock, setInput, setOutputMock } from './testUtils';

import { run as testSubject } from './action';
Expand Down Expand Up @@ -81,4 +80,30 @@ describe('nodejs-create-release', () => {
expect(setOutputMock).toHaveCoreOutput('upload_url', 'upload_url2');
});
});

it('valid tag and GITHUB_TOKEN - create failed', async () => {
setInput('tag', 'v0.0.1');
process.env.GITHUB_TOKEN = 'abcd';
listReleasesMock.mockReturnValue({ data: [] });
createReleaseMock.mockReturnValue(undefined);
return testSubject().then(() => {
expect(listReleasesMock).toHaveBeenNthCalledWith(1, {
owner: 'owner',
page: 0,
per_page: 10,
repo: 'repo',
});
expect(createReleaseMock).toHaveBeenNthCalledWith(1, {
body: 'v0.0.1 Release',
draft: false,
name: 'v0.0.1 Release',
owner: 'owner',
prerelease: false,
repo: 'repo',
tag_name: 'v0.0.1',
target_commitish: 'master',
});
expect(setOutputMock).toHaveBeenCalledTimes(0);
});
});
});
53 changes: 31 additions & 22 deletions src/action.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import * as core from '@actions/core';
import { context, GitHub } from '@actions/github';
import { context, getOctokit } from '@actions/github';
import { RestEndpointMethodTypes } from '@octokit/plugin-rest-endpoint-methods/dist-types/';

import { Context } from '@actions/github/lib/context';

import Octokit from '@actions/github/node_modules/@octokit/rest';

type ReposCreateReleaseParams = Octokit.Octokit.ReposCreateReleaseParams;
type Context = typeof context;
type GitHub = ReturnType<typeof getOctokit>;
type ReposCreateReleaseParams = RestEndpointMethodTypes['repos']['createRelease']['parameters'];

const listReleases = async (client: GitHub, ctx: Context) => {
const response = await client.repos.listReleases({
owner: ctx.repo.owner,
page: 0,
// eslint-disable-next-line @typescript-eslint/camelcase
per_page: 10,
repo: ctx.repo.repo,
});
Expand All @@ -34,9 +32,15 @@ const findRelease = async (client: GitHub, ctx: Context, tag: string) => {
const createRelease = async (client: GitHub, params: ReposCreateReleaseParams) => {
core.startGroup(`Creating ${params.tag_name} release`);
const response = await client.repos.createRelease(params);
core.info(`Release ${response.data.tag_name} created [id: ${response.data.id}]`);
core.endGroup();
return response.data;
if (response) {
core.info(`Release ${response.data.tag_name} created [id: ${response.data.id}]`);
core.endGroup();
return response.data;
} else {
core.info(`Unable to create release ${params.tag_name}`);
core.endGroup();
return undefined;
}
};

const prepareParams = (
Expand All @@ -46,22 +50,20 @@ const prepareParams = (
prerelease: boolean,
tag: string,
target: string,
): ReposCreateReleaseParams => {
) => {
return {
body,
draft,
name,
owner: context.repo.owner,
prerelease,
repo: context.repo.repo,
// eslint-disable-next-line @typescript-eslint/camelcase
tag_name: tag,
// eslint-disable-next-line @typescript-eslint/camelcase
target_commitish: target,
};
};

export const run = async () => {
export const run = async (): Promise<void> => {
const tag = core.getInput('tag', { required: true });
const name = core.getInput('name', { required: false }) || `${tag} Release`;
const body = core.getInput('body', { required: false }) || name;
Expand All @@ -74,17 +76,24 @@ export const run = async () => {
throw Error('Missing GITHUB_TOKEN');
}

const github = new GitHub(process.env.GITHUB_TOKEN);
const octokit = getOctokit(process.env.GITHUB_TOKEN);

let release = await findRelease(github, context, tag);
const release = await findRelease(octokit, context, tag);

if (!release) {
release = await createRelease(github, prepareParams(body, draft, name, prerelease, tag, target));
if (release) {
core.setOutput('id', release.id.toString());
core.setOutput('url', release.url);
core.setOutput('upload_url', release.upload_url);
} else {
const newRelease = await createRelease(octokit, prepareParams(body, draft, name, prerelease, tag, target));
if (newRelease) {
core.setOutput('id', newRelease.id.toString());
core.setOutput('url', newRelease.url);
core.setOutput('upload_url', newRelease.upload_url);
} else {
throw Error('Unable to create release');
}
}

core.setOutput('id', release.id.toString());
core.setOutput('url', release.url);
core.setOutput('upload_url', release.upload_url);
} catch (error) {
core.setFailed(error);
}
Expand Down
2 changes: 1 addition & 1 deletion src/testUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export const createReleaseMock = jest.fn();

const githubMock = jest.mock('@actions/github', () => {
return {
GitHub: jest.fn().mockImplementation(() => {
getOctokit: jest.fn().mockImplementation(() => {
return {
repos: {
createRelease: createReleaseMock,
Expand Down