Compare commits
59 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84f3aed823 | ||
|
|
f9770cdf31 | ||
|
|
1b2bf5c959 | ||
|
|
265508bc9f | ||
|
|
04733e069f | ||
|
|
7b5b755e5b | ||
|
|
17449a21ea | ||
|
|
ec2ff03a5a | ||
|
|
ff23fb2574 | ||
|
|
8e438350b0 | ||
|
|
fe68892921 | ||
|
|
a13e7b5d40 | ||
|
|
a4bae284e7 | ||
|
|
c19ddf4c20 | ||
|
|
2d9c0f4337 | ||
|
|
615015f76e | ||
|
|
e3374ce5b6 | ||
|
|
1beeb572c1 | ||
|
|
5206d34958 | ||
|
|
80d7a7e41c | ||
|
|
5eb2ffd70b | ||
|
|
07af2f374a | ||
|
|
5164410c7d | ||
|
|
f47fb36ff1 | ||
|
|
212d4babf8 | ||
|
|
7670b98fa0 | ||
|
|
ac438791c4 | ||
|
|
545e4c402b | ||
|
|
7d304ee154 | ||
|
|
3cff01dd32 | ||
|
|
a724093295 | ||
|
|
2b9d2847a9 | ||
|
|
f9beb0ad08 | ||
|
|
1662cfa449 | ||
|
|
a5002416a0 | ||
|
|
58d5258088 | ||
|
|
ffc1afa9c0 | ||
|
|
24bced81d9 | ||
|
|
794b3152e1 | ||
|
|
b00963776a | ||
|
|
210500d479 | ||
|
|
f0dfba8919 | ||
|
|
42c63808d6 | ||
|
|
febd7d0808 | ||
|
|
d8e2a64134 | ||
|
|
a4af572b12 | ||
|
|
7d4e20c14b | ||
|
|
7e467024cd | ||
|
|
e225e77501 | ||
|
|
6295ff030e | ||
|
|
37a32b0167 | ||
|
|
0c6fec2cea | ||
|
|
37f4f3a9cd | ||
|
|
dfae8c036c | ||
|
|
99e2100a1f | ||
|
|
664a7c20c1 | ||
|
|
760a5584dc | ||
|
|
580065490f | ||
|
|
eed453b613 |
@ -24,6 +24,7 @@
|
|||||||
"@typescript-eslint/func-call-spacing": ["error", "never"],
|
"@typescript-eslint/func-call-spacing": ["error", "never"],
|
||||||
"@typescript-eslint/no-array-constructor": "error",
|
"@typescript-eslint/no-array-constructor": "error",
|
||||||
"@typescript-eslint/no-empty-interface": "error",
|
"@typescript-eslint/no-empty-interface": "error",
|
||||||
|
"@typescript-eslint/no-explicit-any": "off",
|
||||||
"@typescript-eslint/no-extraneous-class": "error",
|
"@typescript-eslint/no-extraneous-class": "error",
|
||||||
"@typescript-eslint/no-for-in-array": "error",
|
"@typescript-eslint/no-for-in-array": "error",
|
||||||
"@typescript-eslint/no-inferrable-types": "error",
|
"@typescript-eslint/no-inferrable-types": "error",
|
||||||
|
|||||||
39
.github/workflows/ci.yml
vendored
39
.github/workflows/ci.yml
vendored
@ -31,6 +31,7 @@ jobs:
|
|||||||
tag: ci-test-${{ matrix.os }}-${{ github.run_id }}
|
tag: ci-test-${{ matrix.os }}-${{ github.run_id }}
|
||||||
overwrite: true
|
overwrite: true
|
||||||
prerelease: true
|
prerelease: true
|
||||||
|
make_latest: true
|
||||||
body: "rofl lol test%0Aianal %25 fubar"
|
body: "rofl lol test%0Aianal %25 fubar"
|
||||||
- name: Check that the uploaded asset is readable
|
- name: Check that the uploaded asset is readable
|
||||||
uses: actions/github-script@v2
|
uses: actions/github-script@v2
|
||||||
@ -38,10 +39,9 @@ jobs:
|
|||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const child_process = require('child_process');
|
|
||||||
const assert = require('assert').strict;
|
const assert = require('assert').strict;
|
||||||
|
|
||||||
const expected = fs.readFileSync("README.md")
|
const expected = fs.readFileSync("README.md", "utf-8")
|
||||||
const release = await github.repos.getReleaseByTag({
|
const release = await github.repos.getReleaseByTag({
|
||||||
...context.repo,
|
...context.repo,
|
||||||
tag: "ci-test-${{ matrix.os }}-${{ github.run_id }}",
|
tag: "ci-test-${{ matrix.os }}-${{ github.run_id }}",
|
||||||
@ -49,8 +49,39 @@ jobs:
|
|||||||
assert.deepStrictEqual(release.data.prerelease, true)
|
assert.deepStrictEqual(release.data.prerelease, true)
|
||||||
assert.deepStrictEqual(release.data.body, "rofl lol test\nianal % fubar")
|
assert.deepStrictEqual(release.data.body, "rofl lol test\nianal % fubar")
|
||||||
assert.deepStrictEqual(release.data.assets[0].name, "TEST.md")
|
assert.deepStrictEqual(release.data.assets[0].name, "TEST.md")
|
||||||
const actual = child_process.execSync(`curl -Ls ${release.data.assets[0].browser_download_url}`)
|
const actual = await github.request(release.data.assets[0].browser_download_url)
|
||||||
assert.deepStrictEqual(expected, actual)
|
assert.deepStrictEqual(expected, actual.data)
|
||||||
|
- name: Make test promote
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
file: README.md
|
||||||
|
asset_name: TEST.md
|
||||||
|
tag: ci-test-${{ matrix.os }}-${{ github.run_id }}
|
||||||
|
overwrite: true
|
||||||
|
promote: true
|
||||||
|
prerelease: false
|
||||||
|
make_latest: true
|
||||||
|
body: "new body"
|
||||||
|
- name: Check that the release is promoted
|
||||||
|
uses: actions/github-script@v2
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
retries: 15
|
||||||
|
script: |
|
||||||
|
const fs = require('fs')
|
||||||
|
const assert = require('assert').strict;
|
||||||
|
|
||||||
|
const expected = fs.readFileSync("README.md", "utf-8")
|
||||||
|
const release = await github.repos.getReleaseByTag({
|
||||||
|
...context.repo,
|
||||||
|
tag: "ci-test-${{ matrix.os }}-${{ github.run_id }}",
|
||||||
|
})
|
||||||
|
assert.deepStrictEqual(release.data.prerelease, false)
|
||||||
|
assert.deepStrictEqual(release.data.body, "new body")
|
||||||
|
assert.deepStrictEqual(release.data.assets[0].name, "TEST.md")
|
||||||
|
const actual = await github.request(release.data.assets[0].browser_download_url)
|
||||||
|
assert.deepStrictEqual(expected, actual.data)
|
||||||
- name: Clean up
|
- name: Clean up
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
uses: actions/github-script@v2
|
uses: actions/github-script@v2
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ node_modules
|
|||||||
run.sh
|
run.sh
|
||||||
__tests__/runner/*
|
__tests__/runner/*
|
||||||
lib/**/*
|
lib/**/*
|
||||||
|
.idea
|
||||||
|
|||||||
20
CHANGELOG.md
20
CHANGELOG.md
@ -1,5 +1,25 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [2.9.0] - 2024-02-22
|
||||||
|
- Allow seeting a release as draft [#112](https://github.com/svenstaro/upload-release-action/pull/112) (thanks @ShonP40)
|
||||||
|
|
||||||
|
## [2.8.0] - 2024-02-21
|
||||||
|
- Bump all deps
|
||||||
|
- Update to node 20
|
||||||
|
|
||||||
|
## [2.7.0] - 2023-07-28
|
||||||
|
- Allow setting an explicit target_commitish [#46](https://github.com/svenstaro/upload-release-action/pull/46) (thanks @Spikatrix)
|
||||||
|
|
||||||
|
## [2.6.1] - 2023-05-31
|
||||||
|
- Do not overwrite body or name if empty [#108](https://github.com/svenstaro/upload-release-action/pull/108) (thanks @regevbr)
|
||||||
|
|
||||||
|
## [2.6.0] - 2023-05-23
|
||||||
|
- Add `make_latest` input parameter. Can be set to `false` to prevent the created release from being marked as the latest release for the repository [#100](https://github.com/svenstaro/upload-release-action/pull/100) (thanks @brandonkelly)
|
||||||
|
- Don't try to upload empty files [#102](https://github.com/svenstaro/upload-release-action/pull/102) (thanks @Loyalsoldier)
|
||||||
|
- Bump all deps [#105](https://github.com/svenstaro/upload-release-action/pull/105)
|
||||||
|
- `overwrite` option also overwrites name and body [#106](https://github.com/svenstaro/upload-release-action/pull/106) (thanks @regevbr)
|
||||||
|
- Add `promote` option to allow prereleases to be promoted [#74](https://github.com/svenstaro/upload-release-action/pull/74) (thanks @regevbr)
|
||||||
|
|
||||||
## [2.5.0] - 2023-02-21
|
## [2.5.0] - 2023-02-21
|
||||||
- Add retry to upload release [#96](https://github.com/svenstaro/upload-release-action/pull/96) (thanks @sonphantrung)
|
- Add retry to upload release [#96](https://github.com/svenstaro/upload-release-action/pull/96) (thanks @sonphantrung)
|
||||||
|
|
||||||
|
|||||||
16
README.md
16
README.md
@ -15,10 +15,14 @@ Optional Arguments
|
|||||||
- `tag`: The tag to upload into. If you want the current event's tag or branch name, use `${{ github.ref }}` (the `refs/tags/` and `refs/heads/` prefixes will be automatically stripped). Defaults to `github.ref`.
|
- `tag`: The tag to upload into. If you want the current event's tag or branch name, use `${{ github.ref }}` (the `refs/tags/` and `refs/heads/` prefixes will be automatically stripped). Defaults to `github.ref`.
|
||||||
- `asset_name`: The name the file gets as an asset on a release. Use `$tag` to include the tag name. When not provided it will default to the filename.
|
- `asset_name`: The name the file gets as an asset on a release. Use `$tag` to include the tag name. When not provided it will default to the filename.
|
||||||
This is not used if `file_glob` is set to `true`.
|
This is not used if `file_glob` is set to `true`.
|
||||||
- `file_glob`: If set to true, the file argument can be a glob pattern (`asset_name` is ignored in this case) (Default: `false`)
|
- `file_glob`: If set to true, the `file` argument can be a glob pattern (`asset_name` is ignored in this case) (Default: `false`)
|
||||||
- `overwrite`: If an asset with the same name already exists, overwrite it (Default: `false`).
|
- `overwrite`: If an asset with the same name already exists, overwrite it (Default: `false`).
|
||||||
|
- `promote`: If a prerelease already exists, promote it to a release (Default: `false`).
|
||||||
|
- `draft`: Sets the release as a draft instead of publishing it, allowing you to make any edits needed before releasing (Default: `false`).
|
||||||
- `prerelease`: Mark the release as a pre-release (Default: `false`).
|
- `prerelease`: Mark the release as a pre-release (Default: `false`).
|
||||||
|
- `make_latest`: Mark the release as the latest release for the repository (Default: `true`).
|
||||||
- `release_name`: Explicitly set a release name. (Defaults: implicitly same as `tag` via GitHub API).
|
- `release_name`: Explicitly set a release name. (Defaults: implicitly same as `tag` via GitHub API).
|
||||||
|
- `target_commit`: Sets the commit hash or branch for the tag to be based on (Default: the default branch, usually `main`).
|
||||||
- `body`: Content of the release text (Default: `""`).
|
- `body`: Content of the release text (Default: `""`).
|
||||||
- `repo_name`: Specify the name of the GitHub repository in which the GitHub release will be created, edited, and deleted. If the repository is other than the current, it is required to create a personal access token with `repo`, `user`, `admin:repo_hook` scopes to the foreign repository and add it as a secret. (Default: current repository).
|
- `repo_name`: Specify the name of the GitHub repository in which the GitHub release will be created, edited, and deleted. If the repository is other than the current, it is required to create a personal access token with `repo`, `user`, `admin:repo_hook` scopes to the foreign repository and add it as a secret. (Default: current repository).
|
||||||
|
|
||||||
@ -206,6 +210,15 @@ jobs:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Permissions
|
||||||
|
|
||||||
|
This actions requires writes access to the release. If you are using [granular permissions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions)
|
||||||
|
in your workflow, you will need to add the `contents: write` permission to the token:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
```
|
||||||
|
|
||||||
## Releasing
|
## Releasing
|
||||||
|
|
||||||
@ -213,6 +226,7 @@ To release this Action:
|
|||||||
|
|
||||||
- Bump version in `package.json`
|
- Bump version in `package.json`
|
||||||
- Create `CHANGELOG.md` entry
|
- Create `CHANGELOG.md` entry
|
||||||
|
- `npm update`
|
||||||
- `npm run all`
|
- `npm run all`
|
||||||
- `git commit -am <version>`
|
- `git commit -am <version>`
|
||||||
- `git tag -sm <version> <version>`
|
- `git tag -sm <version> <version>`
|
||||||
|
|||||||
10
action.yml
10
action.yml
@ -20,19 +20,27 @@ inputs:
|
|||||||
description: 'Name of the asset. When not provided will use the file name. Unused if file_glob is set to "true".'
|
description: 'Name of the asset. When not provided will use the file name. Unused if file_glob is set to "true".'
|
||||||
overwrite:
|
overwrite:
|
||||||
description: 'Overwrite the release in case it already exists.'
|
description: 'Overwrite the release in case it already exists.'
|
||||||
|
promote:
|
||||||
|
description: 'Promote a prerelease to release. Defaults to "false".'
|
||||||
file_glob:
|
file_glob:
|
||||||
description: 'If true the file can be a glob pattern, asset_name is ignored if this is true.'
|
description: 'If true the file can be a glob pattern, asset_name is ignored if this is true.'
|
||||||
|
draft:
|
||||||
|
description: 'Mark the release as a draft. Defaults to "false".'
|
||||||
prerelease:
|
prerelease:
|
||||||
description: 'Mark the release as a pre-release. Defaults to "false".'
|
description: 'Mark the release as a pre-release. Defaults to "false".'
|
||||||
|
make_latest:
|
||||||
|
description: 'Mark the release the latest release for the repository. Defaults to "true".'
|
||||||
release_name:
|
release_name:
|
||||||
description: 'Explicitly set a release name. Defaults to empty which will cause the release to take the tag as name on GitHub.'
|
description: 'Explicitly set a release name. Defaults to empty which will cause the release to take the tag as name on GitHub.'
|
||||||
body:
|
body:
|
||||||
description: 'Content of the release text. Empty by default.'
|
description: 'Content of the release text. Empty by default.'
|
||||||
|
target_commit:
|
||||||
|
description: 'Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository\"s default branch (usually `main`).'
|
||||||
repo_name:
|
repo_name:
|
||||||
description: 'Specify the name of the GitHub repository in which the GitHub release will be created, edited, and deleted. If the repository is other than the current, it is required to create a personal access token with `repo`, `user`, `admin:repo_hook` scopes to the foreign repository and add it as a secret. Defaults to the current repository'
|
description: 'Specify the name of the GitHub repository in which the GitHub release will be created, edited, and deleted. If the repository is other than the current, it is required to create a personal access token with `repo`, `user`, `admin:repo_hook` scopes to the foreign repository and add it as a secret. Defaults to the current repository'
|
||||||
outputs:
|
outputs:
|
||||||
browser_download_url:
|
browser_download_url:
|
||||||
description: 'The publicly available URL of the asset.'
|
description: 'The publicly available URL of the asset.'
|
||||||
runs:
|
runs:
|
||||||
using: 'node16'
|
using: 'node20'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|||||||
42592
dist/index.js
vendored
42592
dist/index.js
vendored
File diff suppressed because one or more lines are too long
4505
package-lock.json
generated
4505
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
24
package.json
24
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "upload-release-action",
|
"name": "upload-release-action",
|
||||||
"version": "2.5.0",
|
"version": "2.9.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Upload files to a GitHub release",
|
"description": "Upload files to a GitHub release",
|
||||||
"main": "lib/main.js",
|
"main": "lib/main.js",
|
||||||
@ -27,25 +27,27 @@
|
|||||||
"author": "Sven-Hendrik Haase",
|
"author": "Sven-Hendrik Haase",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.10.1",
|
||||||
"@actions/github": "^5",
|
"@actions/github": "^6.0.0",
|
||||||
"@lifeomic/attempt": "^3.0.3",
|
"@lifeomic/attempt": "^3.0.3",
|
||||||
"glob": "^7"
|
"@octokit/core": "^5.1.0",
|
||||||
|
"glob": "^10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/glob": "^7",
|
"@octokit/types": "^12.5.0",
|
||||||
"@types/jest": "^29",
|
"@types/jest": "^29",
|
||||||
"@types/node": "^16",
|
"@types/node": "^20",
|
||||||
"@typescript-eslint/parser": "^5",
|
"@typescript-eslint/eslint-plugin": "^7.0.2",
|
||||||
"@vercel/ncc": "^0.36.0",
|
"@typescript-eslint/parser": "^7",
|
||||||
|
"@vercel/ncc": "^0.38.1",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-plugin-github": "^4.6",
|
"eslint-plugin-github": "^4.10",
|
||||||
"eslint-plugin-jest": "^27",
|
"eslint-plugin-jest": "^27",
|
||||||
"jest": "^29",
|
"jest": "^29",
|
||||||
"jest-circus": "^29",
|
"jest-circus": "^29",
|
||||||
"js-yaml": "^4",
|
"js-yaml": "^4",
|
||||||
"prettier": "^2.8",
|
"prettier": "^3.2",
|
||||||
"ts-jest": "^29",
|
"ts-jest": "^29",
|
||||||
"typescript": "^4"
|
"typescript": "^5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
87
src/main.ts
87
src/main.ts
@ -7,8 +7,11 @@ import * as path from 'path'
|
|||||||
import * as glob from 'glob'
|
import * as glob from 'glob'
|
||||||
import {retry} from '@lifeomic/attempt'
|
import {retry} from '@lifeomic/attempt'
|
||||||
|
|
||||||
|
const getRef = 'GET /repos/{owner}/{repo}/git/ref/{ref}' as const
|
||||||
const releaseByTag = 'GET /repos/{owner}/{repo}/releases/tags/{tag}' as const
|
const releaseByTag = 'GET /repos/{owner}/{repo}/releases/tags/{tag}' as const
|
||||||
const createRelease = 'POST /repos/{owner}/{repo}/releases' as const
|
const createRelease = 'POST /repos/{owner}/{repo}/releases' as const
|
||||||
|
const updateRelease =
|
||||||
|
'PATCH /repos/{owner}/{repo}/releases/{release_id}' as const
|
||||||
const repoAssets =
|
const repoAssets =
|
||||||
'GET /repos/{owner}/{repo}/releases/{release_id}/assets' as const
|
'GET /repos/{owner}/{repo}/releases/{release_id}/assets' as const
|
||||||
const uploadAssets =
|
const uploadAssets =
|
||||||
@ -20,17 +23,25 @@ type ReleaseByTagResp = Endpoints[typeof releaseByTag]['response']
|
|||||||
type CreateReleaseResp = Endpoints[typeof createRelease]['response']
|
type CreateReleaseResp = Endpoints[typeof createRelease]['response']
|
||||||
type RepoAssetsResp = Endpoints[typeof repoAssets]['response']['data']
|
type RepoAssetsResp = Endpoints[typeof repoAssets]['response']['data']
|
||||||
type UploadAssetResp = Endpoints[typeof uploadAssets]['response']
|
type UploadAssetResp = Endpoints[typeof uploadAssets]['response']
|
||||||
|
type UpdateReleaseResp = Endpoints[typeof updateRelease]['response']
|
||||||
|
type UpdateReleaseParams = Endpoints[typeof updateRelease]['parameters']
|
||||||
|
|
||||||
async function get_release_by_tag(
|
async function get_release_by_tag(
|
||||||
tag: string,
|
tag: string,
|
||||||
|
draft: boolean,
|
||||||
prerelease: boolean,
|
prerelease: boolean,
|
||||||
|
make_latest: boolean,
|
||||||
release_name: string,
|
release_name: string,
|
||||||
body: string,
|
body: string,
|
||||||
octokit: Octokit
|
octokit: Octokit,
|
||||||
): Promise<ReleaseByTagResp | CreateReleaseResp> {
|
overwrite: boolean,
|
||||||
|
promote: boolean,
|
||||||
|
target_commit: string
|
||||||
|
): Promise<ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp> {
|
||||||
|
let release: ReleaseByTagResp
|
||||||
try {
|
try {
|
||||||
core.debug(`Getting release by tag ${tag}.`)
|
core.debug(`Getting release by tag ${tag}.`)
|
||||||
return await octokit.request(releaseByTag, {
|
release = await octokit.request(releaseByTag, {
|
||||||
...repo(),
|
...repo(),
|
||||||
tag: tag
|
tag: tag
|
||||||
})
|
})
|
||||||
@ -40,21 +51,69 @@ async function get_release_by_tag(
|
|||||||
core.debug(
|
core.debug(
|
||||||
`Release for tag ${tag} doesn't exist yet so we'll create it now.`
|
`Release for tag ${tag} doesn't exist yet so we'll create it now.`
|
||||||
)
|
)
|
||||||
|
if (target_commit) {
|
||||||
|
try {
|
||||||
|
await octokit.request(getRef, {
|
||||||
|
...repo(),
|
||||||
|
ref: `tags/${tag}`
|
||||||
|
})
|
||||||
|
core.warning(
|
||||||
|
`Ignoring target_commit as the tag ${tag} already exists`
|
||||||
|
)
|
||||||
|
} catch (tagError: any) {
|
||||||
|
if (tagError.status !== 404) {
|
||||||
|
throw tagError
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return await octokit.request(createRelease, {
|
return await octokit.request(createRelease, {
|
||||||
...repo(),
|
...repo(),
|
||||||
tag_name: tag,
|
tag_name: tag,
|
||||||
|
draft: draft,
|
||||||
prerelease: prerelease,
|
prerelease: prerelease,
|
||||||
|
make_latest: make_latest ? 'true' : 'false',
|
||||||
name: release_name,
|
name: release_name,
|
||||||
body: body
|
body: body,
|
||||||
|
target_commitish: target_commit
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let updateObject: Partial<UpdateReleaseParams> | undefined
|
||||||
|
if (promote && release.data.prerelease) {
|
||||||
|
core.debug(`The ${tag} is a prerelease, promoting it to a release.`)
|
||||||
|
updateObject = updateObject || {}
|
||||||
|
updateObject.prerelease = false
|
||||||
|
}
|
||||||
|
if (overwrite) {
|
||||||
|
if (release_name && release.data.name !== release_name) {
|
||||||
|
core.debug(
|
||||||
|
`The ${tag} release already exists with a different name ${release.data.name} so we'll overwrite it.`
|
||||||
|
)
|
||||||
|
updateObject = updateObject || {}
|
||||||
|
updateObject.name = release_name
|
||||||
|
}
|
||||||
|
if (body && release.data.body !== body) {
|
||||||
|
core.debug(
|
||||||
|
`The ${tag} release already exists with a different body ${release.data.body} so we'll overwrite it.`
|
||||||
|
)
|
||||||
|
updateObject = updateObject || {}
|
||||||
|
updateObject.body = body
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updateObject) {
|
||||||
|
return octokit.request(updateRelease, {
|
||||||
|
...repo(),
|
||||||
|
...updateObject,
|
||||||
|
release_id: release.data.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return release
|
||||||
}
|
}
|
||||||
|
|
||||||
async function upload_to_release(
|
async function upload_to_release(
|
||||||
release: ReleaseByTagResp | CreateReleaseResp,
|
release: ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp,
|
||||||
file: string,
|
file: string,
|
||||||
asset_name: string,
|
asset_name: string,
|
||||||
tag: string,
|
tag: string,
|
||||||
@ -67,7 +126,10 @@ async function upload_to_release(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
const file_size = stat.size
|
const file_size = stat.size
|
||||||
const file_bytes: any = fs.createReadStream(file)
|
if (file_size === 0) {
|
||||||
|
core.debug(`Skipping ${file}, since its size is 0`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Check for duplicates.
|
// Check for duplicates.
|
||||||
const assets: RepoAssetsResp = await octokit.paginate(repoAssets, {
|
const assets: RepoAssetsResp = await octokit.paginate(repoAssets, {
|
||||||
@ -102,7 +164,7 @@ async function upload_to_release(
|
|||||||
release_id: release.data.id,
|
release_id: release.data.id,
|
||||||
url: release.data.upload_url,
|
url: release.data.upload_url,
|
||||||
name: asset_name,
|
name: asset_name,
|
||||||
data: file_bytes,
|
data: fs.createReadStream(file) as any,
|
||||||
headers: {
|
headers: {
|
||||||
'content-type': 'binary/octet-stream',
|
'content-type': 'binary/octet-stream',
|
||||||
'content-length': file_size
|
'content-length': file_size
|
||||||
@ -148,8 +210,12 @@ async function run(): Promise<void> {
|
|||||||
|
|
||||||
const file_glob = core.getInput('file_glob') == 'true' ? true : false
|
const file_glob = core.getInput('file_glob') == 'true' ? true : false
|
||||||
const overwrite = core.getInput('overwrite') == 'true' ? true : false
|
const overwrite = core.getInput('overwrite') == 'true' ? true : false
|
||||||
|
const promote = core.getInput('promote') == 'true' ? true : false
|
||||||
|
const draft = core.getInput('draft') == 'true' ? true : false
|
||||||
const prerelease = core.getInput('prerelease') == 'true' ? true : false
|
const prerelease = core.getInput('prerelease') == 'true' ? true : false
|
||||||
|
const make_latest = core.getInput('make_latest') != 'false' ? true : false
|
||||||
const release_name = core.getInput('release_name')
|
const release_name = core.getInput('release_name')
|
||||||
|
const target_commit = core.getInput('target_commit')
|
||||||
const body = core
|
const body = core
|
||||||
.getInput('body')
|
.getInput('body')
|
||||||
.replace(/%0A/gi, '\n')
|
.replace(/%0A/gi, '\n')
|
||||||
@ -159,10 +225,15 @@ async function run(): Promise<void> {
|
|||||||
const octokit = github.getOctokit(token)
|
const octokit = github.getOctokit(token)
|
||||||
const release = await get_release_by_tag(
|
const release = await get_release_by_tag(
|
||||||
tag,
|
tag,
|
||||||
|
draft,
|
||||||
prerelease,
|
prerelease,
|
||||||
|
make_latest,
|
||||||
release_name,
|
release_name,
|
||||||
body,
|
body,
|
||||||
octokit
|
octokit,
|
||||||
|
overwrite,
|
||||||
|
promote,
|
||||||
|
target_commit
|
||||||
)
|
)
|
||||||
|
|
||||||
if (file_glob) {
|
if (file_glob) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user