fix #42 - overwrite body and name as well
This commit is contained in:
		
							parent
							
								
									f0dfba8919
								
							
						
					
					
						commit
						210500d479
					
				
							
								
								
									
										31
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							@ -51,6 +51,37 @@ jobs:
 | 
				
			|||||||
            assert.deepStrictEqual(release.data.assets[0].name, "TEST.md")
 | 
					            assert.deepStrictEqual(release.data.assets[0].name, "TEST.md")
 | 
				
			||||||
            const actual = await github.request(release.data.assets[0].browser_download_url)
 | 
					            const actual = await github.request(release.data.assets[0].browser_download_url)
 | 
				
			||||||
            assert.deepStrictEqual(expected, actual.data)
 | 
					            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
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ Optional Arguments
 | 
				
			|||||||
                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`).
 | 
				
			||||||
- `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`).
 | 
					- `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).
 | 
				
			||||||
@ -59,6 +60,7 @@ jobs:
 | 
				
			|||||||
        asset_name: mything
 | 
					        asset_name: mything
 | 
				
			||||||
        tag: ${{ github.ref }}
 | 
					        tag: ${{ github.ref }}
 | 
				
			||||||
        overwrite: true
 | 
					        overwrite: true
 | 
				
			||||||
 | 
					        promote: true
 | 
				
			||||||
        body: "This is my release text"
 | 
					        body: "This is my release text"
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -126,6 +128,7 @@ jobs:
 | 
				
			|||||||
        file: target/release/my*
 | 
					        file: target/release/my*
 | 
				
			||||||
        tag: ${{ github.ref }}
 | 
					        tag: ${{ github.ref }}
 | 
				
			||||||
        overwrite: true
 | 
					        overwrite: true
 | 
				
			||||||
 | 
					        promote: true
 | 
				
			||||||
        file_glob: true
 | 
					        file_glob: true
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -159,6 +162,7 @@ jobs:
 | 
				
			|||||||
        asset_name: mything
 | 
					        asset_name: mything
 | 
				
			||||||
        tag: ${{ github.ref }}
 | 
					        tag: ${{ github.ref }}
 | 
				
			||||||
        overwrite: true
 | 
					        overwrite: true
 | 
				
			||||||
 | 
					        promote: true
 | 
				
			||||||
        body: "This is my release text"
 | 
					        body: "This is my release text"
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,8 @@ 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.'
 | 
				
			||||||
  prerelease:
 | 
					  prerelease:
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							@ -51,7 +51,7 @@ const updateRelease = 'PATCH /repos/{owner}/{repo}/releases/{release_id}';
 | 
				
			|||||||
const repoAssets = 'GET /repos/{owner}/{repo}/releases/{release_id}/assets';
 | 
					const repoAssets = 'GET /repos/{owner}/{repo}/releases/{release_id}/assets';
 | 
				
			||||||
const uploadAssets = 'POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}';
 | 
					const uploadAssets = 'POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}';
 | 
				
			||||||
const deleteAssets = 'DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}';
 | 
					const deleteAssets = 'DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}';
 | 
				
			||||||
function get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit, overwrite) {
 | 
					function get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit, overwrite, promote) {
 | 
				
			||||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
					    return __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
        let release;
 | 
					        let release;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
@ -69,6 +69,11 @@ function get_release_by_tag(tag, prerelease, make_latest, release_name, body, oc
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        let updateObject;
 | 
					        let updateObject;
 | 
				
			||||||
 | 
					        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 (overwrite) {
 | 
				
			||||||
            if (release.data.name !== release_name) {
 | 
					            if (release.data.name !== release_name) {
 | 
				
			||||||
                core.debug(`The ${tag} release already exists with a different name ${release.data.name} so we'll overwrite it.`);
 | 
					                core.debug(`The ${tag} release already exists with a different name ${release.data.name} so we'll overwrite it.`);
 | 
				
			||||||
@ -158,6 +163,7 @@ function run() {
 | 
				
			|||||||
                .replace('refs/heads/', '');
 | 
					                .replace('refs/heads/', '');
 | 
				
			||||||
            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 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 make_latest = core.getInput('make_latest') != 'false' ? true : false;
 | 
				
			||||||
            const release_name = core.getInput('release_name');
 | 
					            const release_name = core.getInput('release_name');
 | 
				
			||||||
@ -167,7 +173,7 @@ function run() {
 | 
				
			|||||||
                .replace(/%0D/gi, '\r')
 | 
					                .replace(/%0D/gi, '\r')
 | 
				
			||||||
                .replace(/%25/g, '%');
 | 
					                .replace(/%25/g, '%');
 | 
				
			||||||
            const octokit = github.getOctokit(token);
 | 
					            const octokit = github.getOctokit(token);
 | 
				
			||||||
            const release = yield get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit, overwrite);
 | 
					            const release = yield get_release_by_tag(tag, prerelease, make_latest, release_name, body, octokit, overwrite, promote);
 | 
				
			||||||
            if (file_glob) {
 | 
					            if (file_glob) {
 | 
				
			||||||
                const files = glob.sync(file);
 | 
					                const files = glob.sync(file);
 | 
				
			||||||
                if (files.length > 0) {
 | 
					                if (files.length > 0) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/main.ts
									
									
									
									
									
								
							@ -32,7 +32,8 @@ async function get_release_by_tag(
 | 
				
			|||||||
  release_name: string,
 | 
					  release_name: string,
 | 
				
			||||||
  body: string,
 | 
					  body: string,
 | 
				
			||||||
  octokit: Octokit,
 | 
					  octokit: Octokit,
 | 
				
			||||||
  overwrite: boolean
 | 
					  overwrite: boolean,
 | 
				
			||||||
 | 
					  promote: boolean
 | 
				
			||||||
): Promise<ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp> {
 | 
					): Promise<ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp> {
 | 
				
			||||||
  let release: ReleaseByTagResp
 | 
					  let release: ReleaseByTagResp
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
@ -60,6 +61,11 @@ async function get_release_by_tag(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  let updateObject: Partial<UpdateReleaseParams> | undefined
 | 
					  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 (overwrite) {
 | 
				
			||||||
    if (release.data.name !== release_name) {
 | 
					    if (release.data.name !== release_name) {
 | 
				
			||||||
      core.debug(
 | 
					      core.debug(
 | 
				
			||||||
@ -184,6 +190,7 @@ 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 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 make_latest = core.getInput('make_latest') != 'false' ? true : false
 | 
				
			||||||
    const release_name = core.getInput('release_name')
 | 
					    const release_name = core.getInput('release_name')
 | 
				
			||||||
@ -201,7 +208,8 @@ async function run(): Promise<void> {
 | 
				
			|||||||
      release_name,
 | 
					      release_name,
 | 
				
			||||||
      body,
 | 
					      body,
 | 
				
			||||||
      octokit,
 | 
					      octokit,
 | 
				
			||||||
      overwrite
 | 
					      overwrite,
 | 
				
			||||||
 | 
					      promote
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (file_glob) {
 | 
					    if (file_glob) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user