- upgrade sorting logic to use semver to ensure we support all cases properly
This commit is contained in:
@@ -21,4 +21,31 @@ it('Should order tags correctly', async () => {
|
|||||||
}).join(",")
|
}).join(",")
|
||||||
|
|
||||||
expect(sorted).toStrictEqual(`2020.4.0,2020.4.0-rc02,2020.3.2,v2020.3.1,2020.3.1-rc03,2020.3.1-rc01,2020.3.1-b01,v2020.3.0`)
|
expect(sorted).toStrictEqual(`2020.4.0,2020.4.0-rc02,2020.3.2,v2020.3.1,2020.3.1-rc03,2020.3.1-rc01,2020.3.1-b01,v2020.3.0`)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
it('Should order tags correctly', async () => {
|
||||||
|
jest.setTimeout(180000)
|
||||||
|
|
||||||
|
const tags: TagInfo[] = [
|
||||||
|
{ name: "0.0.1", commit: "" },
|
||||||
|
{ name: "0.0.1-rc01", commit: "" },
|
||||||
|
{ name: "0.1.0", commit: "" },
|
||||||
|
{ name: "0.1.0-b01", commit: "" },
|
||||||
|
{ name: "1.0.0", commit: "" },
|
||||||
|
{ name: "1.0.0-a01", commit: "" },
|
||||||
|
{ name: "2.0.0", commit: "" },
|
||||||
|
{ name: "10.0.0", commit: "" },
|
||||||
|
{ name: "10.1.0", commit: "" },
|
||||||
|
{ name: "10.1.0-2", commit: "" },
|
||||||
|
{ name: "20.0.2", commit: "" },
|
||||||
|
{ name: "100.0.0", commit: "" },
|
||||||
|
{ name: "1000.0.0", commit: "" },
|
||||||
|
]
|
||||||
|
|
||||||
|
const sorted = sortTags(tags).map(function (tag) {
|
||||||
|
return tag.name
|
||||||
|
}).join(",")
|
||||||
|
|
||||||
|
expect(sorted).toStrictEqual(`1000.0.0,100.0.0,20.0.2,10.1.0,10.1.0-2,10.0.0,2.0.0,1.0.0,1.0.0-a01,0.1.0,0.1.0-b01,0.0.1,0.0.1-rc01`)
|
||||||
})
|
})
|
||||||
+2168
-38
File diff suppressed because it is too large
Load Diff
+1
-1
File diff suppressed because one or more lines are too long
+19
@@ -583,6 +583,25 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
semver
|
||||||
|
ISC
|
||||||
|
The ISC License
|
||||||
|
|
||||||
|
Copyright (c) Isaac Z. Schlueter and Contributors
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||||
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
tunnel
|
tunnel
|
||||||
MIT
|
MIT
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|||||||
Generated
+30
-4
@@ -1756,6 +1756,11 @@
|
|||||||
"integrity": "sha512-IiPhNnenzkqdSdQH3ifk9LoX7oQe61ZlDdDO4+MUv6FyWdPGDPr26gCPVs3oguZEMq//nFZZpwUZcVuNJsG+DQ==",
|
"integrity": "sha512-IiPhNnenzkqdSdQH3ifk9LoX7oQe61ZlDdDO4+MUv6FyWdPGDPr26gCPVs3oguZEMq//nFZZpwUZcVuNJsG+DQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/semver": {
|
||||||
|
"version": "7.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.4.tgz",
|
||||||
|
"integrity": "sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ=="
|
||||||
|
},
|
||||||
"@types/stack-utils": {
|
"@types/stack-utils": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
|
||||||
@@ -5168,6 +5173,14 @@
|
|||||||
"@babel/types": "^7.4.0",
|
"@babel/types": "^7.4.0",
|
||||||
"istanbul-lib-coverage": "^2.0.5",
|
"istanbul-lib-coverage": "^2.0.5",
|
||||||
"semver": "^6.0.0"
|
"semver": "^6.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"istanbul-lib-report": {
|
"istanbul-lib-report": {
|
||||||
@@ -6031,6 +6044,12 @@
|
|||||||
"lodash": "^4.17.19"
|
"lodash": "^4.17.19"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
@@ -7109,6 +7128,14 @@
|
|||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
"pretty-format": "^24.9.0",
|
"pretty-format": "^24.9.0",
|
||||||
"semver": "^6.2.0"
|
"semver": "^6.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jest-util": {
|
"jest-util": {
|
||||||
@@ -8457,10 +8484,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "6.3.0",
|
"version": "7.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"set-blocking": {
|
"set-blocking": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
|||||||
+3
-1
@@ -29,7 +29,9 @@
|
|||||||
"@actions/exec": "^1.0.4",
|
"@actions/exec": "^1.0.4",
|
||||||
"@actions/github": "^4.0.0",
|
"@actions/github": "^4.0.0",
|
||||||
"@octokit/rest": "^18.0.6",
|
"@octokit/rest": "^18.0.6",
|
||||||
"moment": "^2.29.1"
|
"@types/semver": "^7.3.4",
|
||||||
|
"moment": "^2.29.1",
|
||||||
|
"semver": "^7.3.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^26.0.14",
|
"@types/jest": "^26.0.14",
|
||||||
|
|||||||
+2
-14
@@ -1,5 +1,6 @@
|
|||||||
import {Octokit, RestEndpointMethodTypes} from '@octokit/rest'
|
import {Octokit, RestEndpointMethodTypes} from '@octokit/rest'
|
||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
|
import { SemVer } from 'semver'
|
||||||
|
|
||||||
export interface TagInfo {
|
export interface TagInfo {
|
||||||
name: string
|
name: string
|
||||||
@@ -94,20 +95,7 @@ export class Tags {
|
|||||||
*/
|
*/
|
||||||
export function sortTags(tags: TagInfo[]): TagInfo[] {
|
export function sortTags(tags: TagInfo[]): TagInfo[] {
|
||||||
tags.sort((b, a) => {
|
tags.sort((b, a) => {
|
||||||
const partsA = a.name.replace(/^v/, '').split('-')
|
return new SemVer(a.name).compare(b.name)
|
||||||
const partsB = b.name.replace(/^v/, '').split('-')
|
|
||||||
const versionCompare = partsA[0].localeCompare(partsB[0])
|
|
||||||
if (versionCompare !== 0) {
|
|
||||||
return versionCompare
|
|
||||||
} else {
|
|
||||||
if (partsA.length === 1) {
|
|
||||||
return 0
|
|
||||||
} else if (partsB.length === 1) {
|
|
||||||
return 1
|
|
||||||
} else {
|
|
||||||
return partsA[1].localeCompare(partsB[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
return tags
|
return tags
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user