51 Commits

Author SHA1 Message Date
Mike Coutermarsh
25a1bf7b59 Fix tests, broken in merge, New inputs have been added since
Some checks failed
Code scanning - action / CodeQL-Build (push) Has been cancelled
2020-07-01 07:48:58 -07:00
Mike Coutermarsh
91b6c4e353 Fix merge conflicts 2020-07-01 07:29:54 -07:00
Mike Coutermarsh
d3311befb6 Merge pull request #50 from jbolda/master
create release with body text sourced from file
2020-07-01 07:27:47 -07:00
Mike Coutermarsh
8210505c40 Merge branch 'master' into master 2020-07-01 07:26:37 -07:00
Mike Coutermarsh
84b30a2ce1 Merge pull request #73 from jhutchings1/codeql
Add CodeQL security scanning
2020-06-16 12:53:01 -07:00
Mike Coutermarsh
e9dc4ac22d Merge pull request #32 from fleskesvor/feature/support-target-commitish
Tag and release on a specific commitish
2020-06-16 12:24:20 -07:00
Mike Coutermarsh
62b2b8381c Merge branch 'master' into feature/support-target-commitish 2020-06-16 12:21:59 -07:00
Mike Coutermarsh
d28992e4ca Merge pull request #75 from Bilge/patch-1
Changed release name to be optional field
2020-06-16 11:53:59 -07:00
Bilge
80985fc475 Changed release name to be optional field 2020-06-13 12:51:35 +01:00
Justin Hutchings
ec9ee66a82 Add CodeQL security scanning 2020-06-03 09:32:23 -07:00
Jacob Bolda
e9cf5d96f3 Merge pull request #2 from ssgglobal/master
body_path missing from action.yml
2020-05-27 07:09:33 -05:00
Jess Carlos
f37d718ae9 define body_path 2020-05-26 12:09:33 -07:00
PJ Quirk
c9ba6969f0 Merge pull request #70 from actions/users/paquirk/ghesfixes
Bump actions/github to 2.2.0
2020-05-15 15:20:08 -04:00
PJ Quirk
7bc451acb8 Bump actions/github to 2.2.0 2020-05-12 16:27:09 -04:00
Thomas Hughes
da6846bafe Merge pull request #62 from ericsciple/patch-1
Update readme example to pin to major version
2020-05-05 13:35:53 -05:00
eric sciple
6addae869b Update readme example to pin to major version 2020-04-23 20:45:39 -04:00
Thomas Hughes
164c698b8b Merge pull request #57 from actions/dependabot/npm_and_yarn/acorn-5.7.4
Bump acorn from 5.7.3 to 5.7.4
2020-04-17 08:15:48 -05:00
Thomas Hughes
c6361542cc Merge pull request #33 from actions/dependabot/npm_and_yarn/handlebars-4.5.3
Bump handlebars from 4.2.1 to 4.5.3
2020-04-17 08:15:00 -05:00
Jacob Bolda
9d21c8a3f2 update readme with body_path 2020-04-11 23:19:42 -05:00
Jacob Bolda
7424051c44 Merge branch 'master' of https://github.com/jbolda/create-release 2020-04-11 23:13:50 -05:00
Jacob Bolda
d16f41536b switch to snake case and body_path 2020-04-11 23:13:20 -05:00
Jacob Bolda
b77c216cf6 escape double quotes in eslint command 2020-04-11 23:00:32 -05:00
dependabot[bot]
e28d56d234 Bump acorn from 5.7.3 to 5.7.4
Bumps [acorn](https://github.com/acornjs/acorn) from 5.7.3 to 5.7.4.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/5.7.3...5.7.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-04-05 07:07:19 +00:00
Jacob Bolda
3cd5bbb314 Update README.md 2020-03-07 22:20:23 -06:00
Thomas Hughes
8f324cdc2e Merge pull request #45 from khitrenovich/patch-1
Update README to show usage of "latest" version
2020-02-28 08:23:48 +01:00
Anton Khitrenovich
0e420272a0 Update README to show usage of "latest" version
...otherwise `body` usage sample doesn't work, which results in a bunch of open issues on the topic.
2020-02-27 13:06:08 -05:00
Thomas Hughes
fca5fb59db Merge pull request #42 from actions/IAmHughes/automate-major-versioning
Add workflow to automate versioning
2020-02-10 09:04:46 +01:00
Thomas Hughes
716a1bccc7 Add versioning action to slide major versions w/ release 2020-02-10 09:04:07 +01:00
Jacob Bolda
e0754ec952 Merge pull request #1 from jbolda/body-markdown
release body based on file
2020-02-05 22:58:59 -06:00
Jacob Bolda
6d0973ee39 reorder test mock inputs 2020-02-05 22:47:13 -06:00
Jacob Bolda
c06331b12c only error on actual attempt at using bodyFromFile and reorder a bit for tests 2020-02-05 22:46:40 -06:00
Jacob Bolda
76860a04af fix encoding 2020-02-03 23:14:20 -06:00
Jacob Bolda
15708f2a34 add new input, error if file not found 2020-02-03 23:04:42 -06:00
Jacob Bolda
cf2e5a0ea5 add encoding property 2020-02-03 22:49:09 -06:00
Jacob Bolda
bfe866faf6 try body as file, use as string otherwise 2020-02-03 22:37:38 -06:00
dependabot[bot]
62bca7df51 Bump handlebars from 4.2.1 to 4.5.3
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.2.1 to 4.5.3.
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.2.1...v4.5.3)

Signed-off-by: dependabot[bot] <support@github.com>
2019-12-30 03:03:28 +00:00
fleskesvor
1a72e235c1 Add target_commitish to tests 2019-12-29 09:36:31 +01:00
fleskesvor
2b67105e25 Tag and release on a specific commitish 2019-12-29 09:06:12 +01:00
Thomas Hughes
4d1b6075ce Merge pull request #22 from sclaire-1/master
Edit README.md
2019-11-18 16:57:21 -06:00
sclaire-1
69b747352a Edit README.md
Removed a word in the "Prerequisites" section to improve flow.
2019-11-18 12:31:28 -08:00
Steve Winton
d9c9ca3972 Merge pull request #11 from csexton/add-body
Include body parameter for release
2019-11-15 14:57:28 -08:00
Mike Coutermarsh
77669bf751 Merge pull request #18 from actions/ethomson/name_update
Update action description
2019-11-12 08:13:12 -08:00
Edward Thomson
de86cc55c4 Update action name and description 2019-11-08 16:02:58 +00:00
Edward Thomson
2329f0d753 README: use v1 for semantic version goodness 2019-11-08 16:00:49 +00:00
Thomas Hughes
216650af00 Update README.md 2019-11-05 07:10:17 -06:00
Thomas Hughes
35e5c6da76 Add comment about GITHUB_TOKEN being provided by env 2019-11-04 16:17:19 -06:00
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
Thomas Hughes
038c480249 Merge pull request #8 from actions/IAmHughes/fix-link-to-license
Fix link to LICENSE
2019-10-20 17:48:29 -05:00
Thomas Hughes
2470c6ab61 Update CONTRIBUTING.md 2019-10-20 17:47:47 -05:00
Thomas Hughes
0cd8e92f5b Merge pull request #1 from francisfuzz/missing-backtick
Docs: update README to include a closing backtick
2019-10-11 09:12:54 -05:00
francisfuzz
05bdca6c98 docs: update README to include a closing backtick 2019-10-11 16:10:37 +02:00
10 changed files with 15633 additions and 1154 deletions

52
.github/workflows/codeql.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: "Code scanning - action"
on:
push:
pull_request:
schedule:
- cron: '0 19 * * 0'
jobs:
CodeQL-Build:
# CodeQL runs on ubuntu-latest and windows-latest
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

15
.github/workflows/versioning.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Keep the versions up-to-date
on:
release:
types: [published]
jobs:
actions-tagger:
runs-on: windows-latest
steps:
- uses: Actions-R-Us/actions-tagger@latest
with:
publish_latest: true
env:
GITHUB_TOKEN: '${{secrets.GITHUB_TOKEN}}'

View File

@@ -7,7 +7,7 @@
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great.
Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE.md). Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE).
Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms. Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms.

View File

@@ -5,22 +5,27 @@ This GitHub Action (written in JavaScript) wraps the [GitHub Release API](https:
## Usage ## Usage
### Pre-requisites ### Pre-requisites
Create a workflow `.yml` file in your repositories `.github/workflows` directory. An [example workflow](#example-workflow---create-a-release) is available below. For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file). Create a workflow `.yml` file in your `.github/workflows` directory. An [example workflow](#example-workflow---create-a-release) is available below. For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file).
### Inputs ### Inputs
For more information on these inputs, see the [API Documentation](https://developer.github.com/v3/repos/releases/#input) For more information on these inputs, see the [API Documentation](https://developer.github.com/v3/repos/releases/#input)
- `tag_name`: The name of the tag for this release - `tag_name`: The name of the tag for this release
- `release_name`: The name of the release - `release_name`: The name of the release
- `body`: Text describing the contents of the release. Optional, and not needed if using `body_path`.
- `body_path`: A file with contents describing the release. Optional, and not needed if using `body`.
- `draft`: `true` to create a draft (unpublished) release, `false` to create a published one. Default: `false` - `draft`: `true` to create a draft (unpublished) release, `false` to create a published one. Default: `false`
- `prerelease`: `true` to identify the release as a prerelease. `false` to identify the release as a full release. Default `false` - `prerelease`: `true` to identify the release as a prerelease. `false` to identify the release as a full release. Default `false`
#### `body_path`
The `body_path` is valuable for dynamically creating a `.md` within code commits and even within the Github Action steps leading up to the `create-release`.
### Outputs ### Outputs
For more information on these outputs, see the [API Documentation](https://developer.github.com/v3/repos/releases/#response-4) for an example of what these outputs look like For more information on these outputs, see the [API Documentation](https://developer.github.com/v3/repos/releases/#response-4) for an example of what these outputs look like
- `id`: The release ID - `id`: The release ID
- `html_url`: The URL users can navigate to in order to view the release. i.e. `https://github.com/octocat/Hello-World/releases/v1.0.0` - `html_url`: The URL users can navigate to in order to view the release. i.e. `https://github.com/octocat/Hello-World/releases/v1.0.0`
- `upload_url`: The URL for uploading assets to the release, which could be used by GitHub Actions for additional uses, for example the [`@actions/upload-release-asset](https://www.github.com/actions/upload-release-asset) GitHub Action - `upload_url`: The URL for uploading assets to the release, which could be used by GitHub Actions for additional uses, for example the [`@actions/upload-release-asset`](https://www.github.com/actions/upload-release-asset) GitHub Action
### Example workflow - create a release ### Example workflow - create a release
On every `push` to a tag matching the pattern `v*`, [create a release](https://developer.github.com/v3/repos/releases/#create-a-release): On every `push` to a tag matching the pattern `v*`, [create a release](https://developer.github.com/v3/repos/releases/#create-a-release):
@@ -40,20 +45,24 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@master uses: actions/checkout@v2
- name: Create Release - name: Create Release
id: create_release id: create_release
uses: actions/create-release@master uses: actions/create-release@v1
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with: with:
tag_name: ${{ github.ref }} tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }} release_name: Release ${{ github.ref }}
body: |
Changes in this Release
- First Change
- Second Change
draft: false draft: false
prerelease: false prerelease: false
``` ```
This will create a [Release](https://help.github.com/en/articles/creating-releases), as well as a [`release` event](https://developer.github.com/v3/activity/events/types/#releaseevent), which could be handled by a third party service, or by GitHub Actions for additional uses, for example the [`@actions/upload-release-asset](https://www.github.com/actions/upload-release-asset) GitHub Action. This will create a [Release](https://help.github.com/en/articles/creating-releases), as well as a [`release` event](https://developer.github.com/v3/activity/events/types/#releaseevent), which could be handled by a third party service, or by GitHub Actions for additional uses, for example the [`@actions/upload-release-asset`](https://www.github.com/actions/upload-release-asset) GitHub Action. This uses the `GITHUB_TOKEN` provided by the [virtual environment](https://help.github.com/en/github/automating-your-workflow-with-github-actions/virtual-environments-for-github-actions#github_token-secret), so no new token is needed.
## Contributing ## Contributing
We would love you to contribute to `@actions/create-release`, pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information. We would love you to contribute to `@actions/create-release`, pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information.

View File

@@ -1,5 +1,5 @@
name: 'Create a Release' name: 'Create a Release'
description: 'Create a release on your repository' description: 'Create a release for a tag in your repository'
author: 'GitHub' author: 'GitHub'
inputs: inputs:
tag_name: tag_name:
@@ -8,6 +8,12 @@ inputs:
release_name: release_name:
description: 'The name of the release. For example, `Release v1.0.1`' description: 'The name of the release. For example, `Release v1.0.1`'
required: true required: true
body:
description: 'Text describing the contents of the tag.'
required: false
body_path:
description: 'Path to file with information about the tag.'
required: false
draft: draft:
description: '`true` to create a draft (unpublished) release, `false` to create a published one. Default: `false`' description: '`true` to create a draft (unpublished) release, `false` to create a published one. Default: `false`'
required: false required: false
@@ -16,6 +22,9 @@ inputs:
description: '`true` to identify the release as a prerelease. `false` to identify the release as a full release. Default: `false`' description: '`true` to identify the release as a prerelease. `false` to identify the release as a full release. Default: `false`'
required: false required: false
default: false default: false
commitish:
description: 'Any branch or commit SHA the Git tag is created from, unused if the Git tag already exists. Default: SHA of current commit'
required: false
outputs: outputs:
id: id:
description: 'The ID of the created Release' description: 'The ID of the created Release'

16396
dist/index.js vendored

File diff suppressed because one or more lines are too long

195
package-lock.json generated
View File

@@ -15,12 +15,21 @@
"integrity": "sha512-nquH0+XKng+Ll7rZfCojN7NWSbnGh+ltwUJhzfbLkmOJgxocGX2/yXcZLMyT9fa7+tByEow/NSTrBExNlEj9fw==" "integrity": "sha512-nquH0+XKng+Ll7rZfCojN7NWSbnGh+ltwUJhzfbLkmOJgxocGX2/yXcZLMyT9fa7+tByEow/NSTrBExNlEj9fw=="
}, },
"@actions/github": { "@actions/github": {
"version": "1.0.1", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-1.0.1.tgz", "resolved": "https://registry.npmjs.org/@actions/github/-/github-2.2.0.tgz",
"integrity": "sha512-fmji0JB0E4vmtXVjnqCJouLP4AyM/B5nbLe9U9ooPerxXh9r+VBlx8Lh5c+Dlvux1GooUduQxy4XVA21Lfs/Wg==", "integrity": "sha512-9UAZqn8ywdR70n3GwVle4N8ALosQs4z50N7XMXrSTUVOmVpaBC5kE3TRTT7qQdi3OaQV24mjGuJZsHUmhD+ZXw==",
"requires": { "requires": {
"@octokit/graphql": "^2.0.1", "@actions/http-client": "^1.0.3",
"@octokit/rest": "^16.15.0" "@octokit/graphql": "^4.3.1",
"@octokit/rest": "^16.43.1"
}
},
"@actions/http-client": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.8.tgz",
"integrity": "sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==",
"requires": {
"tunnel": "0.0.6"
} }
}, },
"@babel/code-frame": { "@babel/code-frame": {
@@ -436,73 +445,91 @@
"@types/yargs": "^13.0.0" "@types/yargs": "^13.0.0"
} }
}, },
"@octokit/endpoint": { "@octokit/auth-token": {
"version": "5.3.4", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.3.4.tgz", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz",
"integrity": "sha512-DNkTvTUs1hobAjtHDkVwspKihZk9HnZI2zbfHqLOzTzZiAWP38QypTsyXXbg0FiuVDbx2A6cWyc+ooLFewNXSg==", "integrity": "sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==",
"requires": { "requires": {
"@octokit/types": "^2.0.0"
}
},
"@octokit/endpoint": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.1.tgz",
"integrity": "sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A==",
"requires": {
"@octokit/types": "^2.11.1",
"is-plain-object": "^3.0.0", "is-plain-object": "^3.0.0",
"universal-user-agent": "^3.0.0" "universal-user-agent": "^5.0.0"
},
"dependencies": {
"universal-user-agent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-3.0.0.tgz",
"integrity": "sha512-T3siHThqoj5X0benA5H0qcDnrKGXzU8TKoX15x/tQHw1hQBvIEBHjxQ2klizYsqBOO/Q+WuxoQUihadeeqDnoA==",
"requires": {
"os-name": "^3.0.0"
}
}
} }
}, },
"@octokit/graphql": { "@octokit/graphql": {
"version": "2.1.3", "version": "4.4.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.4.0.tgz",
"integrity": "sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==", "integrity": "sha512-Du3hAaSROQ8EatmYoSAJjzAz3t79t9Opj/WY1zUgxVUGfIKn0AEjg+hlOLscF6fv6i/4y/CeUvsWgIfwMkTccw==",
"requires": { "requires": {
"@octokit/request": "^5.0.0", "@octokit/request": "^5.3.0",
"universal-user-agent": "^2.0.3" "@octokit/types": "^2.0.0",
"universal-user-agent": "^5.0.0"
}
},
"@octokit/plugin-paginate-rest": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz",
"integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==",
"requires": {
"@octokit/types": "^2.0.1"
}
},
"@octokit/plugin-request-log": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz",
"integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw=="
},
"@octokit/plugin-rest-endpoint-methods": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz",
"integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==",
"requires": {
"@octokit/types": "^2.0.1",
"deprecation": "^2.3.1"
} }
}, },
"@octokit/request": { "@octokit/request": {
"version": "5.0.2", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.0.2.tgz", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.2.tgz",
"integrity": "sha512-z1BQr43g4kOL4ZrIVBMHwi68Yg9VbkRUyuAgqCp1rU3vbYa69+2gIld/+gHclw15bJWQnhqqyEb7h5a5EqgZ0A==", "integrity": "sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw==",
"requires": { "requires": {
"@octokit/endpoint": "^5.1.0", "@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^1.0.1", "@octokit/request-error": "^2.0.0",
"@octokit/types": "^2.11.1",
"deprecation": "^2.0.0", "deprecation": "^2.0.0",
"is-plain-object": "^3.0.0", "is-plain-object": "^3.0.0",
"node-fetch": "^2.3.0", "node-fetch": "^2.3.0",
"once": "^1.4.0", "once": "^1.4.0",
"universal-user-agent": "^3.0.0" "universal-user-agent": "^5.0.0"
},
"dependencies": {
"universal-user-agent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-3.0.0.tgz",
"integrity": "sha512-T3siHThqoj5X0benA5H0qcDnrKGXzU8TKoX15x/tQHw1hQBvIEBHjxQ2klizYsqBOO/Q+WuxoQUihadeeqDnoA==",
"requires": {
"os-name": "^3.0.0"
}
}
} }
}, },
"@octokit/request-error": { "@octokit/request-error": {
"version": "1.0.4", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.0.4.tgz", "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.0.tgz",
"integrity": "sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig==", "integrity": "sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw==",
"requires": { "requires": {
"@octokit/types": "^2.0.0",
"deprecation": "^2.0.0", "deprecation": "^2.0.0",
"once": "^1.4.0" "once": "^1.4.0"
} }
}, },
"@octokit/rest": { "@octokit/rest": {
"version": "16.28.8", "version": "16.43.1",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.28.8.tgz", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.1.tgz",
"integrity": "sha512-FouTTcLdT++gwgKVnBN8CEVeFvY/OKzeaoH/L9LBvZhbjUotLthFWAdKa8WeOMt5x7Rs7uvBpu7IdcrtRD3wBA==", "integrity": "sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw==",
"requires": { "requires": {
"@octokit/request": "^5.0.0", "@octokit/auth-token": "^2.4.0",
"@octokit/plugin-paginate-rest": "^1.1.1",
"@octokit/plugin-request-log": "^1.0.0",
"@octokit/plugin-rest-endpoint-methods": "2.4.0",
"@octokit/request": "^5.2.0",
"@octokit/request-error": "^1.0.2", "@octokit/request-error": "^1.0.2",
"atob-lite": "^2.0.0", "atob-lite": "^2.0.0",
"before-after-hook": "^2.0.0", "before-after-hook": "^2.0.0",
@@ -513,19 +540,37 @@
"lodash.uniq": "^4.5.0", "lodash.uniq": "^4.5.0",
"octokit-pagination-methods": "^1.1.0", "octokit-pagination-methods": "^1.1.0",
"once": "^1.4.0", "once": "^1.4.0",
"universal-user-agent": "^3.0.0" "universal-user-agent": "^4.0.0"
}, },
"dependencies": { "dependencies": {
"universal-user-agent": { "@octokit/request-error": {
"version": "3.0.0", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz",
"integrity": "sha512-T3siHThqoj5X0benA5H0qcDnrKGXzU8TKoX15x/tQHw1hQBvIEBHjxQ2klizYsqBOO/Q+WuxoQUihadeeqDnoA==", "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==",
"requires": { "requires": {
"os-name": "^3.0.0" "@octokit/types": "^2.0.0",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"universal-user-agent": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz",
"integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==",
"requires": {
"os-name": "^3.1.0"
} }
} }
} }
}, },
"@octokit/types": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.0.tgz",
"integrity": "sha512-hA06ZYqkAVxvwFVu7yqRNVBGfG9MZvLMbqfgfm6F79g5xWspxsbL/2/rHcFP/z1YBN3zbcNQYuUHiBml4b24MA==",
"requires": {
"@types/node": ">= 8"
}
},
"@types/babel__core": { "@types/babel__core": {
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz",
@@ -592,6 +637,11 @@
"@types/istanbul-lib-report": "*" "@types/istanbul-lib-report": "*"
} }
}, },
"@types/node": {
"version": "13.13.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz",
"integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g=="
},
"@types/normalize-package-data": { "@types/normalize-package-data": {
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@@ -632,9 +682,9 @@
"dev": true "dev": true
}, },
"acorn": { "acorn": {
"version": "6.3.0", "version": "6.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
"integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
"dev": true "dev": true
}, },
"acorn-globals": { "acorn-globals": {
@@ -2982,9 +3032,9 @@
"dev": true "dev": true
}, },
"handlebars": { "handlebars": {
"version": "4.2.1", "version": "4.5.3",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.1.tgz", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz",
"integrity": "sha512-bqPIlDk06UWbVEIFoYj+LVo42WhK96J+b25l7hbFDpxrOXMphFM3fNIm+cluwg4Pk2jiLjWU5nHQY7igGE75NQ==", "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==",
"dev": true, "dev": true,
"requires": { "requires": {
"neo-async": "^2.6.0", "neo-async": "^2.6.0",
@@ -4164,9 +4214,9 @@
}, },
"dependencies": { "dependencies": {
"acorn": { "acorn": {
"version": "5.7.3", "version": "5.7.4",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
"dev": true "dev": true
} }
} }
@@ -6105,6 +6155,11 @@
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
"dev": true "dev": true
}, },
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
},
"tunnel-agent": { "tunnel-agent": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -6159,11 +6214,11 @@
} }
}, },
"universal-user-agent": { "universal-user-agent": {
"version": "2.1.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.1.0.tgz", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz",
"integrity": "sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q==", "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==",
"requires": { "requires": {
"os-name": "^3.0.0" "os-name": "^3.1.0"
} }
}, },
"unset-value": { "unset-value": {
@@ -6335,9 +6390,9 @@
"dev": true "dev": true
}, },
"windows-release": { "windows-release": {
"version": "3.2.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz",
"integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==",
"requires": { "requires": {
"execa": "^1.0.0" "execa": "^1.0.0"
} }

View File

@@ -4,8 +4,8 @@
"description": "Create a release", "description": "Create a release",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
"lint": "eslint 'src/**.js' 'tests/**.js' --fix", "lint": "eslint \"src/**.js\" \"tests/**.js\" --fix",
"test": "eslint 'src/**.js' 'tests/**.js' && jest --coverage", "test": "eslint \"src/**.js\" \"tests/**.js\" && jest --coverage",
"build": "ncc build src/main.js", "build": "ncc build src/main.js",
"precommit": "npm run build && git add dist/" "precommit": "npm run build && git add dist/"
}, },
@@ -22,7 +22,7 @@
"dependencies": { "dependencies": {
"@actions/core": "^1.0.0", "@actions/core": "^1.0.0",
"@actions/exec": "^1.0.0", "@actions/exec": "^1.0.0",
"@actions/github": "^1.0.0" "@actions/github": "^2.2.0"
}, },
"devDependencies": { "devDependencies": {
"@zeit/ncc": "^0.20.4", "@zeit/ncc": "^0.20.4",

View File

@@ -1,5 +1,6 @@
const core = require('@actions/core'); const core = require('@actions/core');
const { GitHub, context } = require('@actions/github'); const { GitHub, context } = require('@actions/github');
const fs = require('fs');
async function run() { async function run() {
try { try {
@@ -14,9 +15,21 @@ async function run() {
// This removes the 'refs/tags' portion of the string, i.e. from 'refs/tags/v1.10.15' to 'v1.10.15' // 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 tag = tagName.replace('refs/tags/', '');
const releaseName = core.getInput('release_name', { required: true }).replace('refs/tags/', ''); const releaseName = core.getInput('release_name', { required: false }).replace('refs/tags/', '');
const body = core.getInput('body', { required: false });
const draft = core.getInput('draft', { required: false }) === 'true'; const draft = core.getInput('draft', { required: false }) === 'true';
const prerelease = core.getInput('prerelease', { required: false }) === 'true'; const prerelease = core.getInput('prerelease', { required: false }) === 'true';
const commitish = core.getInput('commitish', { required: false }) || context.sha;
const bodyPath = core.getInput('body_path', { required: false });
let bodyFileContent = null;
if (bodyPath !== '' && !!bodyPath) {
try {
bodyFileContent = fs.readFileSync(bodyPath, { encoding: 'utf8' });
} catch (error) {
core.setFailed(error.message);
}
}
// Create a release // Create a release
// API Documentation: https://developer.github.com/v3/repos/releases/#create-a-release // API Documentation: https://developer.github.com/v3/repos/releases/#create-a-release
@@ -26,8 +39,10 @@ async function run() {
repo, repo,
tag_name: tag, tag_name: tag,
name: releaseName, name: releaseName,
body: bodyFileContent || body,
draft, draft,
prerelease prerelease,
target_commitish: commitish
}); });
// Get the ID, html_url, and upload URL for the created Release from the response // Get the ID, html_url, and upload URL for the created Release from the response

View File

@@ -1,8 +1,10 @@
jest.mock('@actions/core'); jest.mock('@actions/core');
jest.mock('@actions/github'); jest.mock('@actions/github');
jest.mock('fs');
const core = require('@actions/core'); const core = require('@actions/core');
const { GitHub, context } = require('@actions/github'); const { GitHub, context } = require('@actions/github');
const fs = require('fs');
const run = require('../src/create-release.js'); const run = require('../src/create-release.js');
/* eslint-disable no-undef */ /* eslint-disable no-undef */
@@ -22,6 +24,7 @@ describe('Create Release', () => {
owner: 'owner', owner: 'owner',
repo: 'repo' repo: 'repo'
}; };
context.sha = 'sha';
const github = { const github = {
repos: { repos: {
@@ -37,6 +40,7 @@ describe('Create Release', () => {
.fn() .fn()
.mockReturnValueOnce('refs/tags/v1.0.0') .mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease') .mockReturnValueOnce('myRelease')
.mockReturnValueOnce('myBody')
.mockReturnValueOnce('false') .mockReturnValueOnce('false')
.mockReturnValueOnce('false'); .mockReturnValueOnce('false');
@@ -47,8 +51,10 @@ describe('Create Release', () => {
repo: 'repo', repo: 'repo',
tag_name: 'v1.0.0', tag_name: 'v1.0.0',
name: 'myRelease', name: 'myRelease',
body: 'myBody',
draft: false, draft: false,
prerelease: false prerelease: false,
target_commitish: 'sha'
}); });
}); });
@@ -57,6 +63,7 @@ describe('Create Release', () => {
.fn() .fn()
.mockReturnValueOnce('refs/tags/v1.0.0') .mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease') .mockReturnValueOnce('myRelease')
.mockReturnValueOnce('myBody')
.mockReturnValueOnce('true') .mockReturnValueOnce('true')
.mockReturnValueOnce('false'); .mockReturnValueOnce('false');
@@ -67,8 +74,10 @@ describe('Create Release', () => {
repo: 'repo', repo: 'repo',
tag_name: 'v1.0.0', tag_name: 'v1.0.0',
name: 'myRelease', name: 'myRelease',
body: 'myBody',
draft: true, draft: true,
prerelease: false prerelease: false,
target_commitish: 'sha'
}); });
}); });
@@ -77,6 +86,7 @@ describe('Create Release', () => {
.fn() .fn()
.mockReturnValueOnce('refs/tags/v1.0.0') .mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease') .mockReturnValueOnce('myRelease')
.mockReturnValueOnce('myBody')
.mockReturnValueOnce('false') .mockReturnValueOnce('false')
.mockReturnValueOnce('true'); .mockReturnValueOnce('true');
@@ -87,8 +97,60 @@ describe('Create Release', () => {
repo: 'repo', repo: 'repo',
tag_name: 'v1.0.0', tag_name: 'v1.0.0',
name: 'myRelease', name: 'myRelease',
body: 'myBody',
draft: false, draft: false,
prerelease: true prerelease: true,
target_commitish: 'sha'
});
});
test('Release with empty body is created', async () => {
core.getInput = jest
.fn()
.mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease')
.mockReturnValueOnce('') // <-- The default value for body in action.yml
.mockReturnValueOnce('false')
.mockReturnValueOnce('false');
await run();
expect(createRelease).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repo',
tag_name: 'v1.0.0',
name: 'myRelease',
body: '',
draft: false,
prerelease: false,
target_commitish: 'sha'
});
});
test('Release body based on file', async () => {
core.getInput = jest
.fn()
.mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease')
.mockReturnValueOnce('') // <-- The default value for body in action.yml
.mockReturnValueOnce('false')
.mockReturnValueOnce('false')
.mockReturnValueOnce(null)
.mockReturnValueOnce('notes.md');
fs.readFileSync = jest.fn().mockReturnValueOnce('# this is a release\nThe markdown is strong in this one.');
await run();
expect(createRelease).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repo',
tag_name: 'v1.0.0',
name: 'myRelease',
body: '# this is a release\nThe markdown is strong in this one.',
draft: false,
prerelease: false,
target_commitish: 'sha'
}); });
}); });
@@ -97,6 +159,7 @@ describe('Create Release', () => {
.fn() .fn()
.mockReturnValueOnce('refs/tags/v1.0.0') .mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease') .mockReturnValueOnce('myRelease')
.mockReturnValueOnce('myBody')
.mockReturnValueOnce('false') .mockReturnValueOnce('false')
.mockReturnValueOnce('false'); .mockReturnValueOnce('false');
@@ -114,6 +177,7 @@ describe('Create Release', () => {
.fn() .fn()
.mockReturnValueOnce('refs/tags/v1.0.0') .mockReturnValueOnce('refs/tags/v1.0.0')
.mockReturnValueOnce('myRelease') .mockReturnValueOnce('myRelease')
.mockReturnValueOnce('myBody')
.mockReturnValueOnce('false') .mockReturnValueOnce('false')
.mockReturnValueOnce('false'); .mockReturnValueOnce('false');