@actions/workflow-parser 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +87 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/model/convert.d.ts +31 -0
- package/dist/model/convert.d.ts.map +1 -0
- package/dist/model/convert.js +105 -0
- package/dist/model/convert.js.map +1 -0
- package/dist/model/converter/concurrency.d.ts +5 -0
- package/dist/model/converter/concurrency.d.ts.map +1 -0
- package/dist/model/converter/concurrency.js +30 -0
- package/dist/model/converter/concurrency.js.map +1 -0
- package/dist/model/converter/container.d.ts +6 -0
- package/dist/model/converter/container.d.ts.map +1 -0
- package/dist/model/converter/container.js +97 -0
- package/dist/model/converter/container.js.map +1 -0
- package/dist/model/converter/cron-constants.d.ts +44 -0
- package/dist/model/converter/cron-constants.d.ts.map +1 -0
- package/dist/model/converter/cron-constants.js +30 -0
- package/dist/model/converter/cron-constants.js.map +1 -0
- package/dist/model/converter/cron.d.ts +3 -0
- package/dist/model/converter/cron.d.ts.map +1 -0
- package/dist/model/converter/cron.js +92 -0
- package/dist/model/converter/cron.js.map +1 -0
- package/dist/model/converter/events.d.ts +5 -0
- package/dist/model/converter/events.d.ts.map +1 -0
- package/dist/model/converter/events.js +123 -0
- package/dist/model/converter/events.js.map +1 -0
- package/dist/model/converter/handle-errors.d.ts +4 -0
- package/dist/model/converter/handle-errors.d.ts.map +1 -0
- package/dist/model/converter/handle-errors.js +18 -0
- package/dist/model/converter/handle-errors.js.map +1 -0
- package/dist/model/converter/id-builder.d.ts +23 -0
- package/dist/model/converter/id-builder.d.ts.map +1 -0
- package/dist/model/converter/id-builder.js +113 -0
- package/dist/model/converter/id-builder.js.map +1 -0
- package/dist/model/converter/job/environment.d.ts +5 -0
- package/dist/model/converter/job/environment.d.ts.map +1 -0
- package/dist/model/converter/job/environment.js +28 -0
- package/dist/model/converter/job/environment.js.map +1 -0
- package/dist/model/converter/job/inputs.d.ts +8 -0
- package/dist/model/converter/job/inputs.d.ts.map +1 -0
- package/dist/model/converter/job/inputs.js +38 -0
- package/dist/model/converter/job/inputs.js.map +1 -0
- package/dist/model/converter/job/runs-on.d.ts +9 -0
- package/dist/model/converter/job/runs-on.d.ts.map +1 -0
- package/dist/model/converter/job/runs-on.js +78 -0
- package/dist/model/converter/job/runs-on.js.map +1 -0
- package/dist/model/converter/job/secrets.d.ts +4 -0
- package/dist/model/converter/job/secrets.d.ts.map +1 -0
- package/dist/model/converter/job/secrets.js +32 -0
- package/dist/model/converter/job/secrets.js.map +1 -0
- package/dist/model/converter/job.d.ts +5 -0
- package/dist/model/converter/job.d.ts.map +1 -0
- package/dist/model/converter/job.js +144 -0
- package/dist/model/converter/job.js.map +1 -0
- package/dist/model/converter/jobs.d.ts +5 -0
- package/dist/model/converter/jobs.d.ts.map +1 -0
- package/dist/model/converter/jobs.js +74 -0
- package/dist/model/converter/jobs.js.map +1 -0
- package/dist/model/converter/referencedWorkflow.d.ts +5 -0
- package/dist/model/converter/referencedWorkflow.d.ts.map +1 -0
- package/dist/model/converter/referencedWorkflow.js +85 -0
- package/dist/model/converter/referencedWorkflow.js.map +1 -0
- package/dist/model/converter/steps.d.ts +5 -0
- package/dist/model/converter/steps.d.ts.map +1 -0
- package/dist/model/converter/steps.js +113 -0
- package/dist/model/converter/steps.js.map +1 -0
- package/dist/model/converter/string-list.d.ts +3 -0
- package/dist/model/converter/string-list.d.ts.map +1 -0
- package/dist/model/converter/string-list.js +8 -0
- package/dist/model/converter/string-list.js.map +1 -0
- package/dist/model/converter/workflow-call.d.ts +5 -0
- package/dist/model/converter/workflow-call.d.ts.map +1 -0
- package/dist/model/converter/workflow-call.js +45 -0
- package/dist/model/converter/workflow-call.js.map +1 -0
- package/dist/model/converter/workflow-dispatch.d.ts +9 -0
- package/dist/model/converter/workflow-dispatch.d.ts.map +1 -0
- package/dist/model/converter/workflow-dispatch.js +82 -0
- package/dist/model/converter/workflow-dispatch.js.map +1 -0
- package/dist/model/type-guards.d.ts +6 -0
- package/dist/model/type-guards.d.ts.map +1 -0
- package/dist/model/type-guards.js +13 -0
- package/dist/model/type-guards.js.map +1 -0
- package/dist/model/workflow-template.d.ts +157 -0
- package/dist/model/workflow-template.d.ts.map +1 -0
- package/dist/model/workflow-template.js +8 -0
- package/dist/model/workflow-template.js.map +1 -0
- package/dist/templates/allowed-context.d.ts +6 -0
- package/dist/templates/allowed-context.d.ts.map +1 -0
- package/dist/templates/allowed-context.js +30 -0
- package/dist/templates/allowed-context.js.map +1 -0
- package/dist/templates/json-object-reader.d.ts +20 -0
- package/dist/templates/json-object-reader.d.ts.map +1 -0
- package/dist/templates/json-object-reader.js +135 -0
- package/dist/templates/json-object-reader.js.map +1 -0
- package/dist/templates/object-reader.d.ts +15 -0
- package/dist/templates/object-reader.d.ts.map +1 -0
- package/dist/templates/object-reader.js +2 -0
- package/dist/templates/object-reader.js.map +1 -0
- package/dist/templates/parse-event.d.ts +16 -0
- package/dist/templates/parse-event.d.ts.map +1 -0
- package/dist/templates/parse-event.js +17 -0
- package/dist/templates/parse-event.js.map +1 -0
- package/dist/templates/schema/boolean-definition.d.ts +10 -0
- package/dist/templates/schema/boolean-definition.d.ts.map +1 -0
- package/dist/templates/schema/boolean-definition.js +41 -0
- package/dist/templates/schema/boolean-definition.js.map +1 -0
- package/dist/templates/schema/definition-info.d.ts +16 -0
- package/dist/templates/schema/definition-info.d.ts.map +1 -0
- package/dist/templates/schema/definition-info.js +40 -0
- package/dist/templates/schema/definition-info.js.map +1 -0
- package/dist/templates/schema/definition-type.d.ts +11 -0
- package/dist/templates/schema/definition-type.d.ts.map +1 -0
- package/dist/templates/schema/definition-type.js +12 -0
- package/dist/templates/schema/definition-type.js.map +1 -0
- package/dist/templates/schema/definition.d.ts +24 -0
- package/dist/templates/schema/definition.d.ts.map +1 -0
- package/dist/templates/schema/definition.js +62 -0
- package/dist/templates/schema/definition.js.map +1 -0
- package/dist/templates/schema/index.d.ts +2 -0
- package/dist/templates/schema/index.d.ts.map +1 -0
- package/dist/templates/schema/index.js +2 -0
- package/dist/templates/schema/index.js.map +1 -0
- package/dist/templates/schema/mapping-definition.d.ts +16 -0
- package/dist/templates/schema/mapping-definition.d.ts.map +1 -0
- package/dist/templates/schema/mapping-definition.js +81 -0
- package/dist/templates/schema/mapping-definition.js.map +1 -0
- package/dist/templates/schema/null-definition.d.ts +10 -0
- package/dist/templates/schema/null-definition.d.ts.map +1 -0
- package/dist/templates/schema/null-definition.js +41 -0
- package/dist/templates/schema/null-definition.js.map +1 -0
- package/dist/templates/schema/number-definition.d.ts +10 -0
- package/dist/templates/schema/number-definition.d.ts.map +1 -0
- package/dist/templates/schema/number-definition.js +41 -0
- package/dist/templates/schema/number-definition.js.map +1 -0
- package/dist/templates/schema/one-of-definition.d.ts +15 -0
- package/dist/templates/schema/one-of-definition.d.ts.map +1 -0
- package/dist/templates/schema/one-of-definition.js +154 -0
- package/dist/templates/schema/one-of-definition.js.map +1 -0
- package/dist/templates/schema/property-definition.d.ts +8 -0
- package/dist/templates/schema/property-definition.d.ts.map +1 -0
- package/dist/templates/schema/property-definition.js +31 -0
- package/dist/templates/schema/property-definition.js.map +1 -0
- package/dist/templates/schema/scalar-definition.d.ts +7 -0
- package/dist/templates/schema/scalar-definition.d.ts.map +1 -0
- package/dist/templates/schema/scalar-definition.js +7 -0
- package/dist/templates/schema/scalar-definition.js.map +1 -0
- package/dist/templates/schema/sequence-definition.d.ts +11 -0
- package/dist/templates/schema/sequence-definition.d.ts.map +1 -0
- package/dist/templates/schema/sequence-definition.js +47 -0
- package/dist/templates/schema/sequence-definition.js.map +1 -0
- package/dist/templates/schema/string-definition.d.ts +14 -0
- package/dist/templates/schema/string-definition.d.ts.map +1 -0
- package/dist/templates/schema/string-definition.js +79 -0
- package/dist/templates/schema/string-definition.js.map +1 -0
- package/dist/templates/schema/template-schema.d.ts +47 -0
- package/dist/templates/schema/template-schema.d.ts.map +1 -0
- package/dist/templates/schema/template-schema.js +377 -0
- package/dist/templates/schema/template-schema.js.map +1 -0
- package/dist/templates/template-constants.d.ts +49 -0
- package/dist/templates/template-constants.d.ts.map +1 -0
- package/dist/templates/template-constants.js +49 -0
- package/dist/templates/template-constants.js.map +1 -0
- package/dist/templates/template-context.d.ts +66 -0
- package/dist/templates/template-context.d.ts.map +1 -0
- package/dist/templates/template-context.js +118 -0
- package/dist/templates/template-context.js.map +1 -0
- package/dist/templates/template-reader.d.ts +9 -0
- package/dist/templates/template-reader.d.ts.map +1 -0
- package/dist/templates/template-reader.js +595 -0
- package/dist/templates/template-reader.js.map +1 -0
- package/dist/templates/template-validation-error.d.ts +14 -0
- package/dist/templates/template-validation-error.d.ts.map +1 -0
- package/dist/templates/template-validation-error.js +21 -0
- package/dist/templates/template-validation-error.js.map +1 -0
- package/dist/templates/tokens/basic-expression-token.d.ts +27 -0
- package/dist/templates/tokens/basic-expression-token.d.ts.map +1 -0
- package/dist/templates/tokens/basic-expression-token.js +38 -0
- package/dist/templates/tokens/basic-expression-token.js.map +1 -0
- package/dist/templates/tokens/boolean-token.d.ts +12 -0
- package/dist/templates/tokens/boolean-token.d.ts.map +1 -0
- package/dist/templates/tokens/boolean-token.js +23 -0
- package/dist/templates/tokens/boolean-token.js.map +1 -0
- package/dist/templates/tokens/expression-token.d.ts +11 -0
- package/dist/templates/tokens/expression-token.d.ts.map +1 -0
- package/dist/templates/tokens/expression-token.js +24 -0
- package/dist/templates/tokens/expression-token.js.map +1 -0
- package/dist/templates/tokens/index.d.ts +14 -0
- package/dist/templates/tokens/index.d.ts.map +1 -0
- package/dist/templates/tokens/index.js +14 -0
- package/dist/templates/tokens/index.js.map +1 -0
- package/dist/templates/tokens/insert-expression-token.d.ts +12 -0
- package/dist/templates/tokens/insert-expression-token.d.ts.map +1 -0
- package/dist/templates/tokens/insert-expression-token.js +26 -0
- package/dist/templates/tokens/insert-expression-token.js.map +1 -0
- package/dist/templates/tokens/key-value-pair.d.ts +8 -0
- package/dist/templates/tokens/key-value-pair.d.ts.map +1 -0
- package/dist/templates/tokens/key-value-pair.js +7 -0
- package/dist/templates/tokens/key-value-pair.js.map +1 -0
- package/dist/templates/tokens/literal-token.d.ts +14 -0
- package/dist/templates/tokens/literal-token.d.ts.map +1 -0
- package/dist/templates/tokens/literal-token.js +22 -0
- package/dist/templates/tokens/literal-token.js.map +1 -0
- package/dist/templates/tokens/mapping-token.d.ts +20 -0
- package/dist/templates/tokens/mapping-token.d.ts.map +1 -0
- package/dist/templates/tokens/mapping-token.js +58 -0
- package/dist/templates/tokens/mapping-token.js.map +1 -0
- package/dist/templates/tokens/null-token.d.ts +10 -0
- package/dist/templates/tokens/null-token.d.ts.map +1 -0
- package/dist/templates/tokens/null-token.js +19 -0
- package/dist/templates/tokens/null-token.js.map +1 -0
- package/dist/templates/tokens/number-token.d.ts +12 -0
- package/dist/templates/tokens/number-token.d.ts.map +1 -0
- package/dist/templates/tokens/number-token.js +23 -0
- package/dist/templates/tokens/number-token.js.map +1 -0
- package/dist/templates/tokens/scalar-token.d.ts +14 -0
- package/dist/templates/tokens/scalar-token.d.ts.map +1 -0
- package/dist/templates/tokens/scalar-token.js +22 -0
- package/dist/templates/tokens/scalar-token.js.map +1 -0
- package/dist/templates/tokens/sequence-token.d.ts +18 -0
- package/dist/templates/tokens/sequence-token.d.ts.map +1 -0
- package/dist/templates/tokens/sequence-token.js +47 -0
- package/dist/templates/tokens/sequence-token.js.map +1 -0
- package/dist/templates/tokens/serialization.d.ts +21 -0
- package/dist/templates/tokens/serialization.d.ts.map +1 -0
- package/dist/templates/tokens/serialization.js +2 -0
- package/dist/templates/tokens/serialization.js.map +1 -0
- package/dist/templates/tokens/string-token.d.ts +12 -0
- package/dist/templates/tokens/string-token.d.ts.map +1 -0
- package/dist/templates/tokens/string-token.js +21 -0
- package/dist/templates/tokens/string-token.js.map +1 -0
- package/dist/templates/tokens/template-token.d.ts +70 -0
- package/dist/templates/tokens/template-token.d.ts.map +1 -0
- package/dist/templates/tokens/template-token.js +138 -0
- package/dist/templates/tokens/template-token.js.map +1 -0
- package/dist/templates/tokens/token-range.d.ts +12 -0
- package/dist/templates/tokens/token-range.d.ts.map +1 -0
- package/dist/templates/tokens/token-range.js +2 -0
- package/dist/templates/tokens/token-range.js.map +1 -0
- package/dist/templates/tokens/traversal-state.d.ts +12 -0
- package/dist/templates/tokens/traversal-state.d.ts.map +1 -0
- package/dist/templates/tokens/traversal-state.js +54 -0
- package/dist/templates/tokens/traversal-state.js.map +1 -0
- package/dist/templates/tokens/type-guards.d.ts +18 -0
- package/dist/templates/tokens/type-guards.d.ts.map +1 -0
- package/dist/templates/tokens/type-guards.js +28 -0
- package/dist/templates/tokens/type-guards.js.map +1 -0
- package/dist/templates/tokens/types.d.ts +12 -0
- package/dist/templates/tokens/types.d.ts.map +1 -0
- package/dist/templates/tokens/types.js +37 -0
- package/dist/templates/tokens/types.js.map +1 -0
- package/dist/templates/trace-writer.d.ts +11 -0
- package/dist/templates/trace-writer.d.ts.map +1 -0
- package/dist/templates/trace-writer.js +12 -0
- package/dist/templates/trace-writer.js.map +1 -0
- package/dist/test-utils/null-trace.d.ts +3 -0
- package/dist/test-utils/null-trace.d.ts.map +1 -0
- package/dist/test-utils/null-trace.js +3 -0
- package/dist/test-utils/null-trace.js.map +1 -0
- package/dist/workflow-v1.0.json +2511 -0
- package/dist/workflows/file-provider.d.ts +6 -0
- package/dist/workflows/file-provider.d.ts.map +1 -0
- package/dist/workflows/file-provider.js +2 -0
- package/dist/workflows/file-provider.js.map +1 -0
- package/dist/workflows/file-reference.d.ts +13 -0
- package/dist/workflows/file-reference.d.ts.map +1 -0
- package/dist/workflows/file-reference.js +25 -0
- package/dist/workflows/file-reference.js.map +1 -0
- package/dist/workflows/file.d.ts +5 -0
- package/dist/workflows/file.d.ts.map +1 -0
- package/dist/workflows/file.js +2 -0
- package/dist/workflows/file.js.map +1 -0
- package/dist/workflows/workflow-constants.d.ts +2 -0
- package/dist/workflows/workflow-constants.d.ts.map +1 -0
- package/dist/workflows/workflow-constants.js +2 -0
- package/dist/workflows/workflow-constants.js.map +1 -0
- package/dist/workflows/workflow-parser.d.ts +11 -0
- package/dist/workflows/workflow-parser.d.ts.map +1 -0
- package/dist/workflows/workflow-parser.js +28 -0
- package/dist/workflows/workflow-parser.js.map +1 -0
- package/dist/workflows/workflow-schema.d.ts +3 -0
- package/dist/workflows/workflow-schema.d.ts.map +1 -0
- package/dist/workflows/workflow-schema.js +12 -0
- package/dist/workflows/workflow-schema.js.map +1 -0
- package/dist/workflows/yaml-object-reader.d.ts +26 -0
- package/dist/workflows/yaml-object-reader.d.ts.map +1 -0
- package/dist/workflows/yaml-object-reader.js +178 -0
- package/dist/workflows/yaml-object-reader.js.map +1 -0
- package/package.json +70 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright GitHub
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# actions/workflow-parser
|
|
2
|
+
|
|
3
|
+
`@actions/workflow-parser` is a library to parse GitHub Actions [workflows](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
The [package](https://www.npmjs.com/package/@actions/workflow-parser) contains TypeScript types and compiled ECMAScript modules.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @actions/workflow-parser
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
The parser is driven by a custom schema defined in [`worflows-v1.0.json`](./src/workflow-v1.0.json).
|
|
16
|
+
|
|
17
|
+
### Simple example
|
|
18
|
+
|
|
19
|
+
`parseWorkflow` parses the workflow YAML into an intermediate representation and validates that it conforms to the schema. Any parsing errors are returned in the `errors` property of the result context.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
var trace: TraceWriter;
|
|
23
|
+
|
|
24
|
+
const result = parseWorkflow(
|
|
25
|
+
{
|
|
26
|
+
name: "test.yaml",
|
|
27
|
+
content: `on: push
|
|
28
|
+
jobs:
|
|
29
|
+
build:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- run: echo 'hello'`
|
|
33
|
+
},
|
|
34
|
+
trace
|
|
35
|
+
);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`convertWorkflowTemplate` then takes that intermediate representation and converts it to a [`WorkflowTemplate`](./src/workflow-template.ts) object, which is a more convenient representation for working with workflows.
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
const workflowTemplate = await convertWorkflowTemplate(result.context, result.value);
|
|
42
|
+
|
|
43
|
+
// workflowTemplate.jobs[0].id === "build"
|
|
44
|
+
// workflowTemplate.jobs[0].steps[0].run === "echo 'hello'"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Contributing
|
|
48
|
+
|
|
49
|
+
See [CONTRIBUTING.md](../CONTRIBUTING.md) at the root of the repository for general guidelines and recommendations.
|
|
50
|
+
|
|
51
|
+
Similar to [`actions/expressions](../expressions/), this project is just one of multiple implementations of the GitHub Actions workflow parser. We therefore cannot accept contributions that significantly modify the schema or the overall behavior of the parser. If you would like to propose changes to Actions itself, please use our [Community Forum](https://github.com/community/community/discussions/categories/actions-and-packages).
|
|
52
|
+
|
|
53
|
+
If you do want to contribute, please run [prettier](https://prettier.io/) to format your code and add unit tests as appropriate before submitting your PR. [./testdata](./testdata) contains test cases that all implementations should pass, please also make sure those tests are still passing.
|
|
54
|
+
|
|
55
|
+
### Build
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run build
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
or to watch for changes
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npm run watch
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Test
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm test
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
or to watch for changes and run tests:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run test-watch
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Lint
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm run format-check
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## License
|
|
86
|
+
|
|
87
|
+
This project is licensed under the terms of the MIT open source license. Please refer to [MIT](../LICENSE) for the full terms.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { convertWorkflowTemplate } from "./model/convert";
|
|
2
|
+
export { WorkflowTemplate } from "./model/workflow-template";
|
|
3
|
+
export * from "./templates/tokens/type-guards";
|
|
4
|
+
export { NoOperationTraceWriter, TraceWriter } from "./templates/trace-writer";
|
|
5
|
+
export { parseWorkflow, ParseWorkflowResult } from "./workflows/workflow-parser";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,cAAc,gCAAgC,CAAC;AAC/C,OAAO,EAAC,sBAAsB,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { convertWorkflowTemplate } from "./model/convert";
|
|
2
|
+
export * from "./templates/tokens/type-guards";
|
|
3
|
+
export { NoOperationTraceWriter } from "./templates/trace-writer";
|
|
4
|
+
export { parseWorkflow } from "./workflows/workflow-parser";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,iBAAiB,CAAC;AAExD,cAAc,gCAAgC,CAAC;AAC/C,OAAO,EAAC,sBAAsB,EAAc,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAC,aAAa,EAAsB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TemplateContext } from "../templates/template-context";
|
|
2
|
+
import { TemplateToken } from "../templates/tokens/template-token";
|
|
3
|
+
import { FileProvider } from "../workflows/file-provider";
|
|
4
|
+
import { WorkflowTemplate } from "./workflow-template";
|
|
5
|
+
export declare enum ErrorPolicy {
|
|
6
|
+
ReturnErrorsOnly = 0,
|
|
7
|
+
TryConversion = 1
|
|
8
|
+
}
|
|
9
|
+
export type WorkflowTemplateConverterOptions = {
|
|
10
|
+
/**
|
|
11
|
+
* The maximum depth of reusable workflows allowed in the workflow.
|
|
12
|
+
* If this depth is exceeded, an error will be reported.
|
|
13
|
+
* If {@link fetchReusableWorkflowDepth} is less than this value, the maximum depth
|
|
14
|
+
* won't be enforced.
|
|
15
|
+
* Default: 4
|
|
16
|
+
*/
|
|
17
|
+
maxReusableWorkflowDepth?: number;
|
|
18
|
+
/**
|
|
19
|
+
* The depth to fetch reusable workflows, up to {@link maxReusableWorkflowDepth}.
|
|
20
|
+
* Currently only a fetch depth of 0 or 1 is supported.
|
|
21
|
+
* Default: 0
|
|
22
|
+
*/
|
|
23
|
+
fetchReusableWorkflowDepth?: number;
|
|
24
|
+
/**
|
|
25
|
+
* The error policy to use when converting the workflow.
|
|
26
|
+
* By default, conversion will be skipped if there are errors in the {@link TemplateContext}.
|
|
27
|
+
*/
|
|
28
|
+
errorPolicy?: ErrorPolicy;
|
|
29
|
+
};
|
|
30
|
+
export declare function convertWorkflowTemplate(context: TemplateContext, root: TemplateToken, fileProvider?: FileProvider, options?: WorkflowTemplateConverterOptions): Promise<WorkflowTemplate>;
|
|
31
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/model/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAC,aAAa,EAAqB,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AASxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAErD,oBAAY,WAAW;IACrB,gBAAgB,IAAA;IAChB,aAAa,IAAA;CACd;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAQF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,aAAa,EACnB,YAAY,CAAC,EAAE,YAAY,EAC3B,OAAO,GAAE,gCAAiD,GACzD,OAAO,CAAC,gBAAgB,CAAC,CAgF3B"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { TemplateTokenError } from "../templates/tokens/template-token";
|
|
2
|
+
import { parseFileReference } from "../workflows/file-reference";
|
|
3
|
+
import { parseWorkflow } from "../workflows/workflow-parser";
|
|
4
|
+
import { convertConcurrency } from "./converter/concurrency";
|
|
5
|
+
import { convertOn } from "./converter/events";
|
|
6
|
+
import { handleTemplateTokenErrors } from "./converter/handle-errors";
|
|
7
|
+
import { convertJobs } from "./converter/jobs";
|
|
8
|
+
import { convertReferencedWorkflow } from "./converter/referencedWorkflow";
|
|
9
|
+
import { isReusableWorkflowJob } from "./type-guards";
|
|
10
|
+
export var ErrorPolicy;
|
|
11
|
+
(function (ErrorPolicy) {
|
|
12
|
+
ErrorPolicy[ErrorPolicy["ReturnErrorsOnly"] = 0] = "ReturnErrorsOnly";
|
|
13
|
+
ErrorPolicy[ErrorPolicy["TryConversion"] = 1] = "TryConversion";
|
|
14
|
+
})(ErrorPolicy || (ErrorPolicy = {}));
|
|
15
|
+
const defaultOptions = {
|
|
16
|
+
maxReusableWorkflowDepth: 4,
|
|
17
|
+
fetchReusableWorkflowDepth: 0,
|
|
18
|
+
errorPolicy: ErrorPolicy.ReturnErrorsOnly
|
|
19
|
+
};
|
|
20
|
+
export async function convertWorkflowTemplate(context, root, fileProvider, options = defaultOptions) {
|
|
21
|
+
const result = {};
|
|
22
|
+
const opts = getOptionsWithDefaults(options);
|
|
23
|
+
if (context.errors.getErrors().length > 0 && opts.errorPolicy === ErrorPolicy.ReturnErrorsOnly) {
|
|
24
|
+
result.errors = context.errors.getErrors().map(x => ({
|
|
25
|
+
Message: x.message
|
|
26
|
+
}));
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
if (fileProvider === undefined && opts.fetchReusableWorkflowDepth > 0) {
|
|
30
|
+
context.error(root, new Error("A file provider is required to fetch reusable workflows"));
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const rootMapping = root.assertMapping("root");
|
|
34
|
+
for (const item of rootMapping) {
|
|
35
|
+
const key = item.key.assertString("root key");
|
|
36
|
+
switch (key.value) {
|
|
37
|
+
case "on":
|
|
38
|
+
result.events = handleTemplateTokenErrors(root, context, {}, () => convertOn(context, item.value));
|
|
39
|
+
break;
|
|
40
|
+
case "jobs":
|
|
41
|
+
result.jobs = handleTemplateTokenErrors(root, context, [], () => convertJobs(context, item.value));
|
|
42
|
+
break;
|
|
43
|
+
case "concurrency":
|
|
44
|
+
handleTemplateTokenErrors(root, context, {}, () => convertConcurrency(context, item.value));
|
|
45
|
+
result.concurrency = item.value;
|
|
46
|
+
break;
|
|
47
|
+
case "env":
|
|
48
|
+
result.env = item.value;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Load referenced workflows
|
|
53
|
+
for (const job of result.jobs || []) {
|
|
54
|
+
if (isReusableWorkflowJob(job)) {
|
|
55
|
+
if (opts.maxReusableWorkflowDepth === 0) {
|
|
56
|
+
context.error(job.ref, new Error("Reusable workflows are not allowed"));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (opts.fetchReusableWorkflowDepth === 0 || fileProvider === undefined) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const file = await fileProvider.getFileContent(parseFileReference(job.ref.value));
|
|
64
|
+
const workflow = parseWorkflow(file, context);
|
|
65
|
+
if (!workflow.value) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
convertReferencedWorkflow(context, workflow.value, job);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
context.error(job.ref, new Error("Unable to find reusable workflow"));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
if (err instanceof TemplateTokenError) {
|
|
78
|
+
context.error(err.token, err);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Report error for the root node
|
|
82
|
+
context.error(root, err);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
if (context.errors.getErrors().length > 0) {
|
|
87
|
+
result.errors = context.errors.getErrors().map(x => ({
|
|
88
|
+
Message: x.message
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
function getOptionsWithDefaults(options) {
|
|
95
|
+
return {
|
|
96
|
+
maxReusableWorkflowDepth: options.maxReusableWorkflowDepth !== undefined
|
|
97
|
+
? options.maxReusableWorkflowDepth
|
|
98
|
+
: defaultOptions.maxReusableWorkflowDepth,
|
|
99
|
+
fetchReusableWorkflowDepth: options.fetchReusableWorkflowDepth !== undefined
|
|
100
|
+
? options.fetchReusableWorkflowDepth
|
|
101
|
+
: defaultOptions.fetchReusableWorkflowDepth,
|
|
102
|
+
errorPolicy: options.errorPolicy !== undefined ? options.errorPolicy : defaultOptions.errorPolicy
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/model/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TemplateContext } from "../../templates/template-context";
|
|
2
|
+
import { TemplateToken } from "../../templates/tokens/template-token";
|
|
3
|
+
import { ConcurrencySetting } from "../workflow-template";
|
|
4
|
+
export declare function convertConcurrency(context: TemplateContext, token: TemplateToken): ConcurrencySetting;
|
|
5
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../../src/model/converter/concurrency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAC,aAAa,EAAC,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,GAAG,kBAAkB,CA6BrG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { isString } from "../../templates/tokens/type-guards";
|
|
2
|
+
export function convertConcurrency(context, token) {
|
|
3
|
+
const result = {};
|
|
4
|
+
if (token.isExpression) {
|
|
5
|
+
return result;
|
|
6
|
+
}
|
|
7
|
+
if (isString(token)) {
|
|
8
|
+
result.group = token;
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
const concurrencyProperty = token.assertMapping("concurrency group");
|
|
12
|
+
for (const property of concurrencyProperty) {
|
|
13
|
+
const propertyName = property.key.assertString("concurrency group key");
|
|
14
|
+
if (property.key.isExpression || property.value.isExpression) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
switch (propertyName.value) {
|
|
18
|
+
case "group":
|
|
19
|
+
result.group = property.value.assertString("concurrency group");
|
|
20
|
+
break;
|
|
21
|
+
case "cancel-in-progress":
|
|
22
|
+
result.cancelInProgress = property.value.assertBoolean("cancel-in-progress").value;
|
|
23
|
+
break;
|
|
24
|
+
default:
|
|
25
|
+
context.error(propertyName, `Invalid property name: ${propertyName.value}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=concurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../../src/model/converter/concurrency.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,oCAAoC,CAAC;AAG5D,MAAM,UAAU,kBAAkB,CAAC,OAAwB,EAAE,KAAoB;IAC/E,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,IAAI,KAAK,CAAC,YAAY,EAAE;QACtB,OAAO,MAAM,CAAC;KACf;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;QACnB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,OAAO,MAAM,CAAC;KACf;IACD,MAAM,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACrE,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE;QAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE;YAC5D,SAAS;SACV;QACD,QAAQ,YAAY,CAAC,KAAK,EAAE;YAC1B,KAAK,OAAO;gBACV,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBAChE,MAAM;YACR,KAAK,oBAAoB;gBACvB,MAAM,CAAC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC;gBACnF,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,0BAA0B,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;SAC/E;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateContext } from "../../templates/template-context";
|
|
2
|
+
import { TemplateToken } from "../../templates/tokens";
|
|
3
|
+
import { Container } from "../workflow-template";
|
|
4
|
+
export declare function convertToJobContainer(context: TemplateContext, container: TemplateToken): Container | undefined;
|
|
5
|
+
export declare function convertToJobServices(context: TemplateContext, services: TemplateToken): Container[] | undefined;
|
|
6
|
+
//# sourceMappingURL=container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/model/converter/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAA2C,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAE/F,OAAO,EAAC,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS,CAiE/G;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,GAAG,SAAS,EAAE,GAAG,SAAS,CAY/G"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { TemplateToken } from "../../templates/tokens";
|
|
2
|
+
import { isString } from "../../templates/tokens/type-guards";
|
|
3
|
+
export function convertToJobContainer(context, container) {
|
|
4
|
+
let image;
|
|
5
|
+
let env;
|
|
6
|
+
let ports;
|
|
7
|
+
let volumes;
|
|
8
|
+
let options;
|
|
9
|
+
// Skip validation for expressions for now to match
|
|
10
|
+
// behavior of the other parsers
|
|
11
|
+
for (const [, token] of TemplateToken.traverse(container)) {
|
|
12
|
+
if (token.isExpression) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (isString(container)) {
|
|
17
|
+
// Workflow uses shorthand syntax `container: image-name`
|
|
18
|
+
image = container.assertString("container item");
|
|
19
|
+
return { image: image };
|
|
20
|
+
}
|
|
21
|
+
const mapping = container.assertMapping("container item");
|
|
22
|
+
if (mapping)
|
|
23
|
+
for (const item of mapping) {
|
|
24
|
+
const key = item.key.assertString("container item key");
|
|
25
|
+
const value = item.value;
|
|
26
|
+
switch (key.value) {
|
|
27
|
+
case "image":
|
|
28
|
+
image = value.assertString("container image");
|
|
29
|
+
break;
|
|
30
|
+
case "credentials":
|
|
31
|
+
convertToJobCredentials(context, value);
|
|
32
|
+
break;
|
|
33
|
+
case "env":
|
|
34
|
+
env = value.assertMapping("container env");
|
|
35
|
+
for (const envItem of env) {
|
|
36
|
+
envItem.key.assertString("container env value");
|
|
37
|
+
}
|
|
38
|
+
break;
|
|
39
|
+
case "ports":
|
|
40
|
+
ports = value.assertSequence("container ports");
|
|
41
|
+
for (const port of ports) {
|
|
42
|
+
port.assertString("container port");
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
case "volumes":
|
|
46
|
+
volumes = value.assertSequence("container volumes");
|
|
47
|
+
for (const volume of volumes) {
|
|
48
|
+
volume.assertString("container volume");
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case "options":
|
|
52
|
+
options = value.assertString("container options");
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
context.error(key, `Unexpected container item key: ${key.value}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!image) {
|
|
59
|
+
context.error(container, "Container image cannot be empty");
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return { image, env, ports, volumes, options };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function convertToJobServices(context, services) {
|
|
66
|
+
const serviceList = [];
|
|
67
|
+
const mapping = services.assertMapping("services");
|
|
68
|
+
for (const service of mapping) {
|
|
69
|
+
service.key.assertString("service key");
|
|
70
|
+
const container = convertToJobContainer(context, service.value);
|
|
71
|
+
if (container) {
|
|
72
|
+
serviceList.push(container);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return serviceList;
|
|
76
|
+
}
|
|
77
|
+
function convertToJobCredentials(context, value) {
|
|
78
|
+
const mapping = value.assertMapping("credentials");
|
|
79
|
+
let username;
|
|
80
|
+
let password;
|
|
81
|
+
for (const item of mapping) {
|
|
82
|
+
const key = item.key.assertString("credentials item");
|
|
83
|
+
const value = item.value;
|
|
84
|
+
switch (key.value) {
|
|
85
|
+
case "username":
|
|
86
|
+
username = value.assertString("credentials username");
|
|
87
|
+
break;
|
|
88
|
+
case "password":
|
|
89
|
+
password = value.assertString("credentials password");
|
|
90
|
+
break;
|
|
91
|
+
default:
|
|
92
|
+
context.error(key, `credentials key ${key.value}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return { username, password };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/model/converter/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const MINUTE_RANGE: {
|
|
2
|
+
min: number;
|
|
3
|
+
max: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const HOUR_RANGE: {
|
|
6
|
+
min: number;
|
|
7
|
+
max: number;
|
|
8
|
+
};
|
|
9
|
+
export declare const DOM_RANGE: {
|
|
10
|
+
min: number;
|
|
11
|
+
max: number;
|
|
12
|
+
};
|
|
13
|
+
export declare const MONTH_RANGE: {
|
|
14
|
+
min: number;
|
|
15
|
+
max: number;
|
|
16
|
+
names: {
|
|
17
|
+
jan: number;
|
|
18
|
+
feb: number;
|
|
19
|
+
mar: number;
|
|
20
|
+
apr: number;
|
|
21
|
+
may: number;
|
|
22
|
+
jun: number;
|
|
23
|
+
jul: number;
|
|
24
|
+
aug: number;
|
|
25
|
+
sep: number;
|
|
26
|
+
oct: number;
|
|
27
|
+
nov: number;
|
|
28
|
+
dec: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export declare const DOW_RANGE: {
|
|
32
|
+
min: number;
|
|
33
|
+
max: number;
|
|
34
|
+
names: {
|
|
35
|
+
sun: number;
|
|
36
|
+
mon: number;
|
|
37
|
+
tue: number;
|
|
38
|
+
wed: number;
|
|
39
|
+
thu: number;
|
|
40
|
+
fri: number;
|
|
41
|
+
sat: number;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=cron-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-constants.d.ts","sourceRoot":"","sources":["../../../src/model/converter/cron-constants.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,YAAY;;;CAAoB,CAAC;AAC9C,eAAO,MAAM,UAAU;;;CAAoB,CAAC;AAC5C,eAAO,MAAM,SAAS;;;CAAoB,CAAC;AAC3C,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAAmC,CAAC;AAC5D,eAAO,MAAM,SAAS;;;;;;;;;;;;CAAgC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Constants for parsing and validating cron expressions
|
|
2
|
+
const MONTHS = {
|
|
3
|
+
jan: 1,
|
|
4
|
+
feb: 2,
|
|
5
|
+
mar: 3,
|
|
6
|
+
apr: 4,
|
|
7
|
+
may: 5,
|
|
8
|
+
jun: 6,
|
|
9
|
+
jul: 7,
|
|
10
|
+
aug: 8,
|
|
11
|
+
sep: 9,
|
|
12
|
+
oct: 10,
|
|
13
|
+
nov: 11,
|
|
14
|
+
dec: 12
|
|
15
|
+
};
|
|
16
|
+
const DAYS = {
|
|
17
|
+
sun: 0,
|
|
18
|
+
mon: 1,
|
|
19
|
+
tue: 2,
|
|
20
|
+
wed: 3,
|
|
21
|
+
thu: 4,
|
|
22
|
+
fri: 5,
|
|
23
|
+
sat: 6
|
|
24
|
+
};
|
|
25
|
+
export const MINUTE_RANGE = { min: 0, max: 59 };
|
|
26
|
+
export const HOUR_RANGE = { min: 0, max: 23 };
|
|
27
|
+
export const DOM_RANGE = { min: 1, max: 31 };
|
|
28
|
+
export const MONTH_RANGE = { min: 1, max: 12, names: MONTHS };
|
|
29
|
+
export const DOW_RANGE = { min: 0, max: 6, names: DAYS };
|
|
30
|
+
//# sourceMappingURL=cron-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-constants.js","sourceRoot":"","sources":["../../../src/model/converter/cron-constants.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,MAAM,MAAM,GAAG;IACb,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;CACR,CAAC;AAEF,MAAM,IAAI,GAAG;IACX,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,SAAS,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../../src/model/converter/cron.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBjD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAyBvE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import cronstrue from "cronstrue";
|
|
2
|
+
import { MONTH_RANGE, HOUR_RANGE, MINUTE_RANGE, DOM_RANGE, DOW_RANGE } from "./cron-constants";
|
|
3
|
+
export function isValidCron(cron) {
|
|
4
|
+
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
|
|
5
|
+
const parts = cron.split(/ +/);
|
|
6
|
+
if (parts.length != 5) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const [minutes, hours, dom, months, dow] = parts;
|
|
10
|
+
return (validateCronPart(minutes, MINUTE_RANGE) &&
|
|
11
|
+
validateCronPart(hours, HOUR_RANGE) &&
|
|
12
|
+
validateCronPart(dom, DOM_RANGE) &&
|
|
13
|
+
validateCronPart(months, MONTH_RANGE) &&
|
|
14
|
+
validateCronPart(dow, DOW_RANGE));
|
|
15
|
+
}
|
|
16
|
+
export function getCronDescription(cronspec) {
|
|
17
|
+
if (!isValidCron(cronspec)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
let desc = "";
|
|
21
|
+
try {
|
|
22
|
+
desc = cronstrue.toString(cronspec, {
|
|
23
|
+
dayOfWeekStartIndexZero: true,
|
|
24
|
+
monthStartIndexZero: false,
|
|
25
|
+
use24HourTimeFormat: true,
|
|
26
|
+
// cronstrue sets the description as the error if throwExceptionOnParseError is false
|
|
27
|
+
// so we need to distinguish between an error and a valid description
|
|
28
|
+
throwExceptionOnParseError: true
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Make first character lowercase
|
|
35
|
+
let result = "Runs " + desc.charAt(0).toLowerCase() + desc.slice(1);
|
|
36
|
+
result +=
|
|
37
|
+
"\n\nActions schedules run at most every 5 minutes." +
|
|
38
|
+
" [Learn more](https://docs.github.com/actions/using-workflows/workflow-syntax-for-github-actions#onschedule)";
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
function validateCronPart(value, range, allowSeparators = true) {
|
|
42
|
+
if (range.names && range.names[value.toLowerCase()] !== undefined) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (value === "*") {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// Operator precedence: , > / > -
|
|
49
|
+
if (value.includes(",")) {
|
|
50
|
+
if (!allowSeparators) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return value.split(",").every(v => v && validateCronPart(v, range));
|
|
54
|
+
}
|
|
55
|
+
if (value.includes("/")) {
|
|
56
|
+
if (!allowSeparators) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const [start, step, ...rest] = value.split("/");
|
|
60
|
+
const stepNumber = +step;
|
|
61
|
+
if (rest.length > 0 || isNaN(stepNumber) || stepNumber <= 0 || !start || !step) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
// Separators are only allowed in the part before the `/`, e.g. `1-5/2`
|
|
65
|
+
return validateCronPart(start, range) && validateCronPart(step, range, false);
|
|
66
|
+
}
|
|
67
|
+
if (value.includes("-")) {
|
|
68
|
+
if (!allowSeparators) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const [start, end, ...rest] = value.split("-");
|
|
72
|
+
if (rest.length > 0 || !start || !end) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// Convert name to integers so we can make sure end >= start
|
|
76
|
+
const startNumber = convertToNumber(start, range.names);
|
|
77
|
+
const endNumber = convertToNumber(end, range.names);
|
|
78
|
+
return validateCronPart(start, range, false) && validateCronPart(end, range, false) && endNumber >= startNumber;
|
|
79
|
+
}
|
|
80
|
+
const number = +value;
|
|
81
|
+
return !isNaN(number) && number >= range.min && number <= range.max;
|
|
82
|
+
}
|
|
83
|
+
// Converts a string integer or a short name to a number
|
|
84
|
+
function convertToNumber(value, names) {
|
|
85
|
+
if (names && names[value.toLowerCase()] !== undefined) {
|
|
86
|
+
return +names[value.toLowerCase()];
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return +value;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/model/converter/cron.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TemplateContext } from "../../templates/template-context";
|
|
2
|
+
import { TemplateToken } from "../../templates/tokens/template-token";
|
|
3
|
+
import { EventsConfig } from "../workflow-template";
|
|
4
|
+
export declare function convertOn(context: TemplateContext, token: TemplateToken): EventsConfig;
|
|
5
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/model/converter/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAC;AAGjE,OAAO,EAAC,aAAa,EAAC,MAAM,uCAAuC,CAAC;AAGpE,OAAO,EAEL,YAAY,EAMb,MAAM,sBAAsB,CAAC;AAM9B,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,CA4DtF"}
|