create-release/src/create-release.js
Christopher Sexton becafb2f61 Include body parameter for release
Fixes #4

This adds the ability to include the body parameter when creating the
release.

    - name: Checkout code
      uses: actions/checkout@master
    - name: Create Release
      id: create_release
      uses: actions/create-release@master
      with:
        tag_name: ${{ github.ref }}
        release_name: Release ${{ github.ref }}
        body: Release body

This also supports a multiline body:

    - name: Create Release
      id: create_release
      uses: actions/create-release@master
      with:
        tag_name: ${{ github.ref }}
        release_name: Release ${{ github.ref }}
        body: |
          This is a multiline body
          with more than one
          line

Or if you want the contents of a file:

    - name: Read CHANGELOG
      id: changelog
      run: |
        echo "::set-output name=body::$(cat CHANGELOG.md)"
    - name: Create Release
      id: create_release
      uses: actions/create-release@master
      with:
        release_name: Release ${{ github.ref }}
        body: ${{ steps.changelog.outputs.body }}

One decision I made in favor of less code was to send an empty body when
there was non present. If it would be preferred to send nothing in the
request for the `body` attribute I could instead compose the parameters
with an optional body attribute:

    releaseParams = {
      owner,
      repo,
      tag_name: tag,
      name: releaseName,
      draft,
      prerelease
    };

    if (body) releaseParams.body = body;

    const createReleaseResponse = await github.repos.createRelease( releaseParams );
2019-10-22 12:24:23 -04:00

50 lines
2.0 KiB
JavaScript

const core = require('@actions/core');
const { GitHub, context } = require('@actions/github');
async function run() {
try {
// 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 tagName = core.getInput('tag_name', { required: true });
// This removes the 'refs/tags' portion of the string, i.e. from 'refs/tags/v1.10.15' to 'v1.10.15'
const tag = tagName.replace('refs/tags/', '');
const releaseName = core.getInput('release_name', { required: true }).replace('refs/tags/', '');
const body = core.getInput('body', { required: false });
const draft = core.getInput('draft', { required: false }) === 'true';
const prerelease = core.getInput('prerelease', { required: false }) === 'true';
// Create a release
// API Documentation: https://developer.github.com/v3/repos/releases/#create-a-release
// Octokit Documentation: https://octokit.github.io/rest.js/#octokit-routes-repos-create-release
const createReleaseResponse = await github.repos.createRelease({
owner,
repo,
tag_name: tag,
name: releaseName,
body,
draft,
prerelease
});
// Get the ID, html_url, and upload URL for the created Release from the response
const {
data: { id: releaseId, html_url: htmlUrl, upload_url: uploadUrl }
} = createReleaseResponse;
// Set the output variables for use by other actions: https://github.com/actions/toolkit/tree/master/packages/core#inputsoutputs
core.setOutput('id', releaseId);
core.setOutput('html_url', htmlUrl);
core.setOutput('upload_url', uploadUrl);
} catch (error) {
core.setFailed(error.message);
}
}
module.exports = run;