commit
						24bced81d9
					
				
							
								
								
									
										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")
 | 
			
		||||
          const actual = await github.request(release.data.assets[0].browser_download_url)
 | 
			
		||||
          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
 | 
			
		||||
      if: ${{ always() }}
 | 
			
		||||
      uses: actions/github-script@v2
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@ 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`).
 | 
			
		||||
- `promote`: If a prerelease already exists, promote it to a 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).
 | 
			
		||||
 | 
			
		||||
@ -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".'
 | 
			
		||||
  overwrite:
 | 
			
		||||
    description: 'Overwrite the release in case it already exists.'
 | 
			
		||||
  promote:
 | 
			
		||||
    description: 'Promote a prerelease to release. Defaults to "false".'
 | 
			
		||||
  file_glob:
 | 
			
		||||
    description: 'If true the file can be a glob pattern, asset_name is ignored if this is true.'
 | 
			
		||||
  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 uploadAssets = 'POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}';
 | 
			
		||||
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* () {
 | 
			
		||||
        let release;
 | 
			
		||||
        try {
 | 
			
		||||
@ -69,6 +69,11 @@ function get_release_by_tag(tag, prerelease, make_latest, release_name, body, oc
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        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 (release.data.name !== release_name) {
 | 
			
		||||
                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/', '');
 | 
			
		||||
            const file_glob = core.getInput('file_glob') == '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 make_latest = core.getInput('make_latest') != 'false' ? true : false;
 | 
			
		||||
            const release_name = core.getInput('release_name');
 | 
			
		||||
@ -167,7 +173,7 @@ function run() {
 | 
			
		||||
                .replace(/%0D/gi, '\r')
 | 
			
		||||
                .replace(/%25/g, '%');
 | 
			
		||||
            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) {
 | 
			
		||||
                const files = glob.sync(file);
 | 
			
		||||
                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,
 | 
			
		||||
  body: string,
 | 
			
		||||
  octokit: Octokit,
 | 
			
		||||
  overwrite: boolean
 | 
			
		||||
  overwrite: boolean,
 | 
			
		||||
  promote: boolean
 | 
			
		||||
): Promise<ReleaseByTagResp | CreateReleaseResp | UpdateReleaseResp> {
 | 
			
		||||
  let release: ReleaseByTagResp
 | 
			
		||||
  try {
 | 
			
		||||
@ -60,6 +61,11 @@ async function get_release_by_tag(
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  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.data.name !== release_name) {
 | 
			
		||||
      core.debug(
 | 
			
		||||
@ -184,6 +190,7 @@ async function run(): Promise<void> {
 | 
			
		||||
 | 
			
		||||
    const file_glob = core.getInput('file_glob') == '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 make_latest = core.getInput('make_latest') != 'false' ? true : false
 | 
			
		||||
    const release_name = core.getInput('release_name')
 | 
			
		||||
@ -201,7 +208,8 @@ async function run(): Promise<void> {
 | 
			
		||||
      release_name,
 | 
			
		||||
      body,
 | 
			
		||||
      octokit,
 | 
			
		||||
      overwrite
 | 
			
		||||
      overwrite,
 | 
			
		||||
      promote
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if (file_glob) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user