Skip to content

Commit 968c47e

Browse files
committed
refactor: add new variable to match all
1 parent ed94782 commit 968c47e

10 files changed

+59
-13
lines changed

README.md

+12-11
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,18 @@ table below) on them and then deleting the matching versions.
1212
1313
### Inputs
1414

15-
| Name | Description | Required | Default |
16-
| ----------------- | ---------------------------------------------------------- | ---------------------- | ------------- |
17-
| `user` | User containing the package(s) | | |
18-
| `organization` | Organization containing the package(s) | | |
19-
| `names` | Names of the package(s) | :heavy_check_mark: | |
20-
| `type` | The type of package (e.g. npm) | :heavy_check_mark: | |
21-
| `semver-pattern` | [Semver](https://semver.org) range of the versions | | |
22-
| `version-pattern` | Regex pattern of the versions | | `^.+$` |
23-
| `keep` | Number of versions to exclude from deletions | | 2 |
24-
| `token` | Token with the necessary scopes to delete package versions | Depends on the package | Set by GitHub |
25-
| `dry-run` | If the action should only print what it would do | | `false` |
15+
| Name | Description | Required | Default |
16+
| ----------------------| -----------------------------------------------------------------| ---------------------- | ------------- |
17+
| `user` | User containing the package(s) | | |
18+
| `organization` | Organization containing the package(s) | | |
19+
| `names` | Names of the package(s) | :heavy_check_mark: | |
20+
| `type` | The type of package (e.g. npm) | :heavy_check_mark: | |
21+
| `semver-pattern` | [Semver](https://semver.org) range of the versions | | |
22+
| `version-pattern` | Regex pattern of the versions | | `^.+$` |
23+
| `version-pattern-all` | Whether to require all versions to match version pattern or some | | false |
24+
| `keep` | Number of versions to exclude from deletions | | 2 |
25+
| `token` | Token with the necessary scopes to delete package versions | Depends on the package | Set by GitHub |
26+
| `dry-run` | If the action should only print what it would do | | `false` |
2627

2728
> :warning: Certain options can not be combined with each other and will lead to errors. These are:
2829
>

action.yml

+6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ inputs:
2828
Regex pattern of the versions.
2929
Defaults to true for all versions.
3030
required: false
31+
32+
version-pattern-all:
33+
description: >-
34+
Whether to require all versions to match version pattern or some.
35+
required: false
36+
default: "false"
3137

3238
keep:
3339
description: >-

src/input.ts

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export function getActionInput(): Input {
5959
dryRun: getBooleanInput("dry-run"),
6060
user: getInput("user"),
6161
organization: getInput("organization"),
62+
versionPatternAll: getBooleanInput("version-pattern-all"),
6263
}
6364
}
6465

src/process/process.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ export function findVersionsToDelete(input: Input, versions: PackageVersion[]):
2828
})
2929
} else if (input.versionPattern) {
3030
return versions.filter((version) => {
31-
return version.names.every((name) => input.versionPattern?.test(name));
31+
return (input.versionPatternAll
32+
? version.names.every((name) => input.versionPattern?.test(name))
33+
: version.names.some((name) => input.versionPattern?.test(name))
34+
)
3235
})
3336
} else {
3437
return versions

src/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export type Input = {
1919
dryRun: boolean
2020
user: string
2121
organization: string
22+
versionPatternAll: boolean
2223
}
2324

2425
export type Package = {

test/action.spec.ts

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ test("queries and deletes packages", async () => {
3232
user: "user",
3333
organization: "",
3434
type: PackageType.Npm,
35+
versionPatternAll: false,
3536
}
3637

3738
const queryStrategy = mock<QueryStrategy>({ queryPackages: () => Promise.resolve(packages) })
@@ -54,6 +55,7 @@ test("filters by semver-pattern", async () => {
5455
user: "user",
5556
organization: "",
5657
type: PackageType.Npm,
58+
versionPatternAll: false,
5759
}
5860

5961
const queryStrategy = mock<QueryStrategy>({ queryPackages: () => Promise.resolve(packages) })
@@ -96,6 +98,7 @@ test("deletes whole package if last version", async () => {
9698
user: "user",
9799
organization: "",
98100
type: PackageType.Npm,
101+
versionPatternAll: false,
99102
}
100103

101104
const queryStrategy = mock<QueryStrategy>({ queryPackages: () => Promise.resolve(packages_single) })
@@ -117,6 +120,7 @@ test("Does nothing when empty packages are returned", async () => {
117120
user: "user",
118121
organization: "",
119122
type: PackageType.Npm,
123+
versionPatternAll: false,
120124
}
121125

122126
const queryStrategy = mock<QueryStrategy>({ queryPackages: () => Promise.resolve([]) })

test/delete/delete.strategy.factory.spec.ts

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ test("decide default delete strategy", () => {
1414
user: "",
1515
organization: "",
1616
type: PackageType.Npm,
17+
versionPatternAll: false,
1718
}
1819

1920
expect(decideDeleteStrategy(input)).toBeInstanceOf(UserDeleteStrategy)
@@ -29,6 +30,7 @@ test("decide rest user delete strategy", () => {
2930
dryRun: false,
3031
user: "user",
3132
organization: "",
33+
versionPatternAll: false,
3234
}
3335

3436
expect(decideDeleteStrategy(input)).toBeInstanceOf(UserDeleteStrategy)
@@ -44,6 +46,7 @@ test("decide rest organization delete strategy", () => {
4446
dryRun: false,
4547
user: "",
4648
organization: "org",
49+
versionPatternAll: false,
4750
}
4851

4952
expect(decideDeleteStrategy(input)).toBeInstanceOf(OrganizationDeleteStrategy)

test/input.spec.ts

+14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ describe("getActionInput", () => {
2222
INPUT_TOKEN: "token",
2323
INPUT_USER: "user",
2424
"INPUT_VERSION-PATTERN": "\\d+\\.\\d+\\.\\d+-RC\\d+",
25+
"INPUT_VERSION-PATTERN-ALL": "false",
2526
"INPUT_DRY-RUN": "true",
2627
INPUT_TYPE: "npm",
2728
}
@@ -36,6 +37,7 @@ describe("getActionInput", () => {
3637
user: "user",
3738
organization: "",
3839
type: PackageType.Npm,
40+
versionPatternAll: false,
3941
}
4042

4143
expect(result).toEqual(expected)
@@ -49,6 +51,7 @@ describe("getActionInput", () => {
4951
INPUT_TOKEN: "token",
5052
INPUT_USER: "user",
5153
"INPUT_SEMVER-PATTERN": "^1.0.0",
54+
"INPUT_VERSION-PATTERN-ALL": "false",
5255
"INPUT_DRY-RUN": "true",
5356
INPUT_TYPE: "npm",
5457
}
@@ -63,6 +66,7 @@ describe("getActionInput", () => {
6366
user: "user",
6467
organization: "",
6568
type: PackageType.Npm,
69+
versionPatternAll: false,
6670
}
6771

6872
expect(result).toEqual(expected)
@@ -77,6 +81,7 @@ describe("getActionInput", () => {
7781
INPUT_USER: "user",
7882
INPUT_TYPE: "npm",
7983
"INPUT_DRY-RUN": "true",
84+
"INPUT_VERSION-PATTERN-ALL": "false",
8085
}
8186

8287
const result = getActionInput()
@@ -88,6 +93,7 @@ describe("getActionInput", () => {
8893
dryRun: true,
8994
user: "user",
9095
organization: "",
96+
versionPatternAll: false,
9197
}
9298

9399
expect(result).toEqual(expected)
@@ -169,6 +175,7 @@ describe("validateInput", () => {
169175
dryRun: true,
170176
user: "user",
171177
organization: "",
178+
versionPatternAll: false,
172179
}
173180

174181
expect(() => {
@@ -185,6 +192,7 @@ describe("validateInput", () => {
185192
user: "user",
186193
organization: "",
187194
type: PackageType.Npm,
195+
versionPatternAll: false,
188196
}
189197

190198
expect(() => {
@@ -203,6 +211,7 @@ describe("validateInput", () => {
203211
user: "user",
204212
organization: "",
205213
type: PackageType.Npm,
214+
versionPatternAll: false,
206215
}
207216

208217
expect(() => {
@@ -219,6 +228,7 @@ describe("validateInput", () => {
219228
dryRun: true,
220229
user: "user",
221230
organization: "org",
231+
versionPatternAll: false,
222232
}
223233

224234
expect(() => {
@@ -235,6 +245,7 @@ describe("validateInput", () => {
235245
user: "user",
236246
organization: "",
237247
type: PackageType.Npm,
248+
versionPatternAll: false,
238249
}
239250

240251
expect(() => {
@@ -251,6 +262,7 @@ describe("validateInput", () => {
251262
user: "user",
252263
organization: "",
253264
type: PackageType.Npm,
265+
versionPatternAll: false,
254266
}
255267

256268
expect(() => {
@@ -267,6 +279,7 @@ describe("validateInput", () => {
267279
user: "user",
268280
organization: "",
269281
type: PackageType.Npm,
282+
versionPatternAll: false,
270283
}
271284

272285
expect(() => {
@@ -283,6 +296,7 @@ describe("validateInput", () => {
283296
user: "user",
284297
organization: "",
285298
type: PackageType.Npm,
299+
versionPatternAll: false,
286300
}
287301

288302
expect(() => {

test/process/process.spec.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ test("filters correctly", () => {
1515
user: "user",
1616
organization: "",
1717
type: PackageType.Npm,
18+
versionPatternAll: false,
1819
},
1920
[
2021
{
@@ -55,6 +56,7 @@ test("filters based on semver", () => {
5556
user: "user",
5657
organization: "",
5758
type: PackageType.Npm,
59+
versionPatternAll: false,
5860
},
5961
[
6062
{
@@ -86,6 +88,7 @@ test("filters based on regex", () => {
8688
user: "user",
8789
organization: "",
8890
type: PackageType.Npm,
91+
versionPatternAll: false,
8992
},
9093
[
9194
{
@@ -127,6 +130,7 @@ test("filters based on regex release", () => {
127130
user: "user",
128131
organization: "",
129132
type: PackageType.Container,
133+
versionPatternAll: true,
130134
},
131135
[
132136
{
@@ -168,6 +172,7 @@ test("respects keep", () => {
168172
user: "user",
169173
organization: "",
170174
type: PackageType.Npm,
175+
versionPatternAll: false,
171176
},
172177
[
173178
{
@@ -207,6 +212,7 @@ test("filters with multiple names", () => {
207212
user: "user",
208213
organization: "",
209214
type: PackageType.Npm,
215+
versionPatternAll: false,
210216
},
211217
[
212218
{
@@ -227,7 +233,10 @@ test("filters with multiple names", () => {
227233
},
228234
],
229235
)
230-
expect(result).toHaveLength(0)
236+
expect(result).toHaveLength(1)
237+
expect(result[0].name).toEqual("test")
238+
expect(result[0].versions.map((it) => it.id)).toEqual(["b"])
239+
expect(result[0].totalVersions).toEqual(2)
231240
})
232241

233242
const containerTestResponse: Endpoints["GET /users/{username}/packages/{package_type}/{package_name}/versions"]["response"] =

test/query/query.strategy.factory.spec.ts

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ test("decide user query strategy", () => {
1414
user: "user",
1515
organization: "",
1616
type: PackageType.Npm,
17+
versionPatternAll: false,
1718
}
1819

1920
expect(decideQueryStrategy(input)).toBeInstanceOf(UserQueryStrategy)
@@ -29,6 +30,7 @@ test("decide organization query strategy", () => {
2930
user: "",
3031
organization: "org",
3132
type: PackageType.Npm,
33+
versionPatternAll: false,
3234
}
3335

3436
expect(decideQueryStrategy(input)).toBeInstanceOf(OrganizationQueryStrategy)
@@ -44,6 +46,7 @@ test("decide default query strategy", () => {
4446
dryRun: false,
4547
user: "",
4648
organization: "",
49+
versionPatternAll: false,
4750
}
4851

4952
expect(decideQueryStrategy(input)).toBeInstanceOf(UserQueryStrategy)
@@ -59,6 +62,7 @@ test("decide rest user strategy", () => {
5962
dryRun: false,
6063
user: "user",
6164
organization: "",
65+
versionPatternAll: false,
6266
}
6367

6468
expect(decideQueryStrategy(input)).toBeInstanceOf(UserQueryStrategy)

0 commit comments

Comments
 (0)