diff --git a/README.md b/README.md index 6ebbdf2..cf71ef6 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,11 @@ You must provide: - `tag`: The tag to uploaded into. If you want the current event's tag, use `${{ github.ref }}` - `overwrite`: If an asset with the same name already exists, overwrite it. + +Optional Arguments + + - `draft`: The release will be marked as a draft if this is set + - `file_glob`: If set to true, the file argument can be a glob pattern (asset_name is ignored in this case) ## Usage This usage assumes you want to build on tag creations only. @@ -92,3 +97,36 @@ jobs: asset_name: ${{ matrix.asset_name }} tag: ${{ github.ref }} ``` + +Example with file_glob and draft + +```yaml +name: Publish + +on: + push: + tags: + - '*' + +jobs: + build: + name: Publish binaries + runs-on: ubuntu-latest + + steps: + - uses: hecrj/setup-rust-action@v1-release + with: + rust-version: stable + - uses: actions/checkout@v1 + - name: Build + run: cargo build --release + - name: Upload binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: target/release/my* + tag: ${{ github.ref }} + overwrite: true + draft: true + file_glob: true +``` diff --git a/lib/main.js b/lib/main.js index 57ceeb4..84ee3e4 100644 --- a/lib/main.js +++ b/lib/main.js @@ -29,6 +29,19 @@ function get_release_by_tag(tag, octokit, context, draft) { catch (error) { // If this returns 404, we need to create the release first. if (error.status === 404) { + // if there is a draft release already, use that + if (draft) { + const releases = yield octokit.repos.listReleases(Object.assign({}, context.repo)); + core.debug(`Found ${releases.length} releases, looking for draft release to piggyback..`); + for (let i = 0; i < releases.length; i += 1) { + const release = releases[i]; + if (release.data.draft) { + core.debug(`Found draft release in repo, name: ${release.data.name}`); + return release; + } + } + } + // otherwise create a release (draft if necessary) core.debug(`Release for tag ${tag} doesn't exist yet so we'll create it now.`); return yield octokit.repos.createRelease(Object.assign({}, context.repo, { tag_name: tag, draft })); } diff --git a/src/main.ts b/src/main.ts index 19b739f..858bea5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,6 +15,21 @@ async function get_release_by_tag(tag: string, octokit: any, context: any, draft } catch (error) { // If this returns 404, we need to create the release first. if (error.status === 404) { + // if there is a draft release already, use that + if (draft) { + const releases = await octokit.repos.listReleases({ + ...context.repo, + }); + core.debug(`Found ${releases.length} releases, looking for draft release to piggyback..`) + for (let i = 0; i < releases.length; i += 1) { + const release = releases[i]; + if (release.data.draft) { + core.debug(`Found draft release in repo, name: ${release.data.name}`) + return release; + } + } + } + // otherwise create a release (draft if necessary) core.debug(`Release for tag ${tag} doesn't exist yet so we'll create it now.`) return await octokit.repos.createRelease({ ...context.repo,