diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c934fb0..82d7804 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] steps: - uses: actions/checkout@v2 - - name: Make test release + - name: Make test pre-release uses: ./ with: repo_token: ${{ secrets.GITHUB_TOKEN }} @@ -46,7 +46,6 @@ jobs: ...context.repo, tag: "ci-test-${{ matrix.os }}", }) - assert.deepStrictEqual(release.data.name, "ci-test-${{ matrix.os }}") assert.deepStrictEqual(release.data.prerelease, true) assert.deepStrictEqual(release.data.body, "rofl lol test") const actual = child_process.execSync(`curl -Ls ${release.data.assets[0].browser_download_url}`) @@ -69,3 +68,49 @@ jobs: ...context.repo, ref: "tags/ci-test-${{ matrix.os }}", }) + - name: Make test draft release + uses: ./ + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: README.md + asset_name: TEST.md + tag: ci-test-${{ matrix.os }} + overwrite: true + draft: true + prerelease: false + release_name: "ci-test-${{ matrix.os }} release name" + body: "some other text" + - name: Check that the uploaded asset is readable + uses: actions/github-script@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fs = require('fs') + const child_process = require('child_process'); + const assert = require('assert').strict; + + const expected = fs.readFileSync("README.md") + const release = await github.repos.getReleaseByTag({ + ...context.repo, + tag: "ci-test-${{ matrix.os }}", + }) + assert.deepStrictEqual(release.data.name, "ci-test-${{ matrix.os }} release name") + assert.deepStrictEqual(release.data.draft, true) + assert.deepStrictEqual(release.data.prerelease, false) + assert.deepStrictEqual(release.data.body, "rofl lol test") + const actual = child_process.execSync(`curl -Ls ${release.data.assets[0].browser_download_url}`) + assert.deepStrictEqual(expected, actual) + - name: Clean up + if: ${{ always() }} + uses: actions/github-script@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const release = await github.repos.getReleaseByTag({ + ...context.repo, + tag: "ci-test-${{ matrix.os }}", + }) + await github.repos.deleteRelease({ + ...context.repo, + release_id: release.data.id, + }) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68959e6..8cd02ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [2.0.0] - 2020-07-03 +- Add `draft` input parameter. Setting this marks the created release as a draft. - Add `prerelease` input parameter. Setting this marks the created release as a pre-release. - Add `release_name` input parameter. Setting this explicitly sets the title of the release. - Add `body` input parameter. Setting this sets the text content of the created release. diff --git a/README.md b/README.md index 342fc42..0a45d0f 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,10 @@ Optional Arguments 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`) - `overwrite`: If an asset with the same name already exists, overwrite it (Default: `false`). +- `draft`: Mark the release as a draft (Default: `false`). If this is set to `true` then the release won't receive automatically receice a name as the + Github API only matches the tag upon final release. - `prerelease`: Mark the release as a pre-release (Default: `false`). -- `release_name`: Explicitly set a release name. (Defaults: same as `tag`). +- `release_name`: Explicitly set a release name. (Defaults: implicitly same as `tag` via GitHub API). - `body`: Content of the release text (Defaut: `""`). ## Output variables diff --git a/dist/index.js b/dist/index.js index 0980dd4..d919572 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2201,7 +2201,7 @@ const core = __importStar(__webpack_require__(470)); const github = __importStar(__webpack_require__(469)); const path = __importStar(__webpack_require__(622)); const glob = __importStar(__webpack_require__(402)); -function get_release_by_tag(tag, prerelease, release_name, body, octokit) { +function get_release_by_tag(tag, draft, prerelease, release_name, body, octokit) { return __awaiter(this, void 0, void 0, function* () { try { core.debug(`Getting release by tag ${tag}.`); @@ -2211,7 +2211,7 @@ function get_release_by_tag(tag, prerelease, release_name, body, octokit) { // If this returns 404, we need to create the release first. if (error.status === 404) { core.debug(`Release for tag ${tag} doesn't exist yet so we'll create it now.`); - return yield octokit.repos.createRelease(Object.assign(Object.assign({}, github.context.repo), { tag_name: tag, prerelease: prerelease, release_name: release_name, body: body })); + return yield octokit.repos.createRelease(Object.assign(Object.assign({}, github.context.repo), { tag_name: tag, draft: draft, prerelease: prerelease, release_name: release_name, body: body })); } else { throw error; @@ -2266,11 +2266,12 @@ function run() { const tag = core.getInput('tag', { required: true }).replace('refs/tags/', ''); const file_glob = core.getInput('file_glob') == 'true' ? true : false; const overwrite = core.getInput('overwrite') == 'true' ? true : false; + const draft = core.getInput('draft') == 'true' ? true : false; const prerelease = core.getInput('prerelease') == 'true' ? true : false; const release_name = core.getInput('release_name'); const body = core.getInput('body'); const octokit = github.getOctokit(token); - const release = yield get_release_by_tag(tag, prerelease, release_name, body, octokit); + const release = yield get_release_by_tag(tag, draft, prerelease, release_name, body, octokit); if (file_glob) { const files = glob.sync(file); if (files.length > 0) { diff --git a/src/main.ts b/src/main.ts index 0ec155e..abc1e27 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,6 +13,7 @@ type UploadAssetResp = Endpoints['POST /repos/:owner/:repo/releases/:release_id/ async function get_release_by_tag( tag: string, + draft: boolean, prerelease: boolean, release_name: string, body: string, @@ -33,6 +34,7 @@ async function get_release_by_tag( return await octokit.repos.createRelease({ ...github.context.repo, tag_name: tag, + draft: draft, prerelease: prerelease, release_name: release_name, body: body @@ -108,6 +110,7 @@ async function run(): Promise { const file_glob = core.getInput('file_glob') == 'true' ? true : false const overwrite = core.getInput('overwrite') == 'true' ? true : false + const draft = core.getInput('draft') == 'true' ? true : false const prerelease = core.getInput('prerelease') == 'true' ? true : false const release_name = core.getInput('release_name') const body = core.getInput('body') @@ -115,6 +118,7 @@ async function run(): Promise { const octokit: Octokit = github.getOctokit(token) const release = await get_release_by_tag( tag, + draft, prerelease, release_name, body,