@grnsft/if 1.0.2 → 1.1.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/.dockerignore +10 -0
- package/CONTAINER.md +148 -0
- package/Dockerfile +73 -0
- package/HELM_CHART.md +96 -0
- package/README.md +56 -0
- package/bin/docker-entrypoint.sh +15 -0
- package/build/common/types/manifest.d.ts +1 -0
- package/build/common/types/manifest.js +1 -1
- package/build/common/util/debug-logger.js +4 -18
- package/build/common/util/storage.d.ts +9 -0
- package/build/common/util/storage.js +24 -0
- package/build/if-api/config/config.d.ts +9 -0
- package/build/if-api/config/config.js +58 -0
- package/build/if-api/config/index.d.ts +2 -0
- package/build/if-api/config/index.js +8 -0
- package/build/if-api/config/strings.d.ts +16 -0
- package/build/if-api/config/strings.js +20 -0
- package/build/if-api/index.d.ts +2 -0
- package/build/if-api/index.js +268 -0
- package/build/if-api/types/process-args.d.ts +18 -0
- package/build/if-api/types/process-args.js +3 -0
- package/build/if-api/util/args.d.ts +5 -0
- package/build/if-api/util/args.js +42 -0
- package/build/if-metadata-check/config/config.d.ts +5 -0
- package/build/if-metadata-check/config/config.js +26 -0
- package/build/if-metadata-check/config/strings.d.ts +5 -0
- package/build/if-metadata-check/config/strings.js +9 -0
- package/build/if-metadata-check/index.d.ts +2 -0
- package/build/if-metadata-check/index.js +30 -0
- package/build/if-metadata-check/types/plugin.d.ts +7 -0
- package/build/if-metadata-check/types/plugin.js +3 -0
- package/build/if-metadata-check/types/process-args.d.ts +5 -0
- package/build/if-metadata-check/types/process-args.js +3 -0
- package/build/if-metadata-check/util/args.d.ts +57 -0
- package/build/if-metadata-check/util/args.js +29 -0
- package/build/if-metadata-check/util/metadata-checker.d.ts +44 -0
- package/build/if-metadata-check/util/metadata-checker.js +99 -0
- package/build/if-run/index.js +1 -1
- package/build/if-run/lib/aggregate.d.ts +2 -2
- package/build/if-run/lib/aggregate.js +5 -19
- package/build/if-run/lib/compute.d.ts +1 -1
- package/build/if-run/lib/compute.js +10 -9
- package/build/if-run/lib/environment.d.ts +5 -1
- package/build/if-run/lib/environment.js +21 -16
- package/build/if-run/lib/initialize.d.ts +12 -0
- package/build/if-run/lib/initialize.js +37 -3
- package/build/if-run/lib/regroup.d.ts +3 -2
- package/build/if-run/lib/regroup.js +13 -9
- package/build/if-run/types/compute.d.ts +1 -1
- package/build/if-run/types/compute.js +1 -1
- package/helm-chart/.helmignore +23 -0
- package/helm-chart/Chart.yaml +24 -0
- package/helm-chart/templates/NOTES.txt +22 -0
- package/helm-chart/templates/_helpers.tpl +62 -0
- package/helm-chart/templates/additionalPlugins.yaml +13 -0
- package/helm-chart/templates/deployment.yaml +144 -0
- package/helm-chart/templates/disabledPlugins.yaml +11 -0
- package/helm-chart/templates/env-configmap.yaml +10 -0
- package/helm-chart/templates/env-secret.yaml +10 -0
- package/helm-chart/templates/hpa.yaml +32 -0
- package/helm-chart/templates/ingress.yaml +43 -0
- package/helm-chart/templates/npmrc.yaml +11 -0
- package/helm-chart/templates/service.yaml +24 -0
- package/helm-chart/templates/serviceaccount.yaml +13 -0
- package/helm-chart/templates/tests/test-connection.yaml +15 -0
- package/helm-chart/values.yaml +175 -0
- package/manifests/examples/bugs/aggregation-error-wrong-metric.yml +173 -0
- package/manifests/examples/bugs/input-error-missing-duration.yml +25 -0
- package/manifests/examples/bugs/mock-observations-failure-duration-is-zero.yml +33 -0
- package/manifests/examples/bugs/pipeline-error-naming-mismatch.yml +32 -0
- package/manifests/examples/bugs/pipeline-error-uninitialized-plugin.yml +33 -0
- package/manifests/examples/bugs/pipeline-ordering-error.yml +91 -0
- package/manifests/examples/builtins/divide/success-denominator-equal-zero.yml +36 -0
- package/manifests/examples/builtins/mock-observations/failure-invalid-config-cpu-range.yml +0 -1
- package/manifests/examples/builtins/mock-observations/failure-invalid-memory-utilization-range.yml +0 -1
- package/manifests/examples/builtins/mock-observations/failure-missing-timestamp-from-param.yml +0 -1
- package/manifests/examples/builtins/mock-observations/success.yml +0 -1
- package/manifests/examples/builtins/sci/failure-invalid-config-value.yml +0 -1
- package/manifests/examples/builtins/sci/failure-missing-input-param.yml +0 -1
- package/manifests/examples/builtins/sci/success.yml +0 -1
- package/manifests/examples/builtins/sci-embodied/failure-invalid-default-emission-value.yml +22 -0
- package/manifests/examples/builtins/time-sync/failure-missing-config.yml +0 -2
- package/manifests/examples/builtins/time-sync/success.yml +0 -2
- package/manifests/examples/features/aggregate-failure-invalid-metrics.yml +50 -0
- package/manifests/examples/features/aggregate-failure-missing-metric-in-inputs.yml +50 -0
- package/manifests/examples/features/aggregate-horizontal.yml +58 -0
- package/manifests/examples/features/aggregate-vertical.yml +58 -0
- package/manifests/examples/features/aggregate.yml +58 -0
- package/manifests/examples/pipelines/cloud-metadata-divide.yml +36 -0
- package/manifests/examples/pipelines/pipeline-with-mocks.yml +0 -1
- package/manifests/examples/pipelines/scenario-5.yml +0 -1
- package/manifests/outputs/bugs/mock-observations-failure-duration-is-zero.yaml +0 -1
- package/manifests/outputs/builtins/mock-observations/failure-invalid-config-cpu-range.yaml +0 -1
- package/manifests/outputs/builtins/mock-observations/failure-invalid-memory-utilization-range.yaml +0 -1
- package/manifests/outputs/builtins/mock-observations/failure-missing-timestamp-from-param.yaml +0 -1
- package/manifests/outputs/builtins/sci/failure-invalid-config-value.yaml +0 -1
- package/manifests/outputs/builtins/sci/failure-missing-input-param.yaml +0 -1
- package/manifests/outputs/builtins/time-sync/failure-missing-config.yaml +0 -2
- package/manifests/outputs/features/regroup/success.yaml +72 -0
- package/manifests/outputs/pipelines/pipeline-with-aggregate.yaml +1291 -0
- package/manifests/outputs/pipelines/scenario-3.yaml +126 -0
- package/openapi.yaml +424 -0
- package/package.json +8 -3
- package/with-plugins/Dockerfile +59 -0
- package/manifests/outputs/builtins/interpolation/interpolation.yaml +0 -81
- package/manifests/outputs/features/failure-invalid-regroup.yaml +0 -87
- package/manifests/outputs/features/failure-missing-cloud-instance-type.yaml +0 -86
package/.dockerignore
ADDED
package/CONTAINER.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Using Docker Container
|
|
2
|
+
|
|
3
|
+
The Impact Framework API server can be run as a Docker container.
|
|
4
|
+
The official image is provided at `ghcr.io/green-software-foundation/if`.
|
|
5
|
+
|
|
6
|
+
## Running the Container
|
|
7
|
+
|
|
8
|
+
Run a container using the built image:
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
# Run with default port (3000)
|
|
12
|
+
$ docker run --rm -p 3000:3000 ghcr.io/green-software-foundation/if
|
|
13
|
+
|
|
14
|
+
# Run with custom port
|
|
15
|
+
$ docker run --rm -p 8080:3000 ghcr.io/green-software-foundation/if
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
When specifying arguments for the `if-api` command, you need to include the `if-api` command as shown below.
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
# Run without external plugin warning
|
|
22
|
+
$ docker run --rm -p 3000:3000 ghcr.io/green-software-foundation/if if-api --disableExternalPluginWarning
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Using the containerized API server
|
|
26
|
+
|
|
27
|
+
The containerized API server provides the same endpoints as the regular API server:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
# Process manifest
|
|
31
|
+
$ curl -H "Content-Type: application/yaml" --data-binary @manifest.yaml http://localhost:3000/v1/run
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Adding external plugins at startup
|
|
35
|
+
You can add any external plugins at startup by mounting a file that lists the plugins to `/app/plugins.txt`.
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
$ cat plugins.txt
|
|
39
|
+
carbon-intensity-plugin
|
|
40
|
+
Green-Software-Foundation/if-github-plugin
|
|
41
|
+
$ docker run --rm -p 3000:3000 -v $(pwd)/plugins.txt:/app/plugins.txt ghcr.io/green-software-foundation/if
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The contents of `/app/plugins.txt` are used directly as arguments for `npm install`.
|
|
45
|
+
For available formats, refer to: https://docs.npmjs.com/cli/v8/commands/npm-install
|
|
46
|
+
|
|
47
|
+
If the plugin itself or packages it depends on are private, you'll need to mount an `.npmrc` file at `/app/.npmrc` for the access token required to install packages.
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
$ cat plugins.txt
|
|
51
|
+
@myscope/myplugin
|
|
52
|
+
$ cat .npmrc
|
|
53
|
+
//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>
|
|
54
|
+
@myscope:registry=https://registry.npmjs.org/
|
|
55
|
+
$ docker run --rm -p 3000:3000 -v $(pwd)/plugins.txt:/app/plugins.txt -v $(pwd)/.npmrc:/app/.npmrc ghcr.io/green-software-foundation/if
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For `.npmrc` format reference: https://docs.npmjs.com/cli/v8/configuring-npm/npmrc
|
|
59
|
+
|
|
60
|
+
Note that if the plugin itself or packages it depends on are in GitHub Packages, a personal access token (classic) with `read:packages` permission is required even for public packages.
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
$ cat plugins.txt
|
|
64
|
+
danuw/if-casdk-plugin
|
|
65
|
+
$ cat .npmrc
|
|
66
|
+
//npm.pkg.github.com/:_authToken=<YOUR_PERSONAL_ACCESS_TOKEN>
|
|
67
|
+
@Green-Software-Foundation:registry=https://npm.pkg.github.com/
|
|
68
|
+
$ docker run --rm -p 3000:3000 -v $(pwd)/plugins.txt:/app/plugins.txt -v $(pwd)/.npmrc:/app/.npmrc ghcr.io/green-software-foundation/if
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Alternatively, the access token can also be extracted to an environment variable (but this is not recommended as it can easily leak through `ps` commands, `proc` filesystem, dumps, etc.).
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
$ cat plugins.txt
|
|
75
|
+
@myscope/myplugin
|
|
76
|
+
$ cat .npmrc
|
|
77
|
+
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
|
|
78
|
+
@myscope:registry=https://registry.npmjs.org/
|
|
79
|
+
$ docker run --rm -p 3000:3000 -v $(pwd)/plugins.txt:/app/plugins.txt -e NODE_AUTH_TOKEN=<YOUR_AUTH_TOKEN> -v $(pwd)/.npmrc:/app/.npmrc ghcr.io/green-software-foundation/if
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Building the Container Image
|
|
83
|
+
|
|
84
|
+
As mentioned above, there are official images available, but you can also build your own container image using the provided `Dockerfile`:
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
# Build the container image
|
|
88
|
+
$ docker build -t myorg/if:v1.0.0 .
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Building Slim Image
|
|
92
|
+
|
|
93
|
+
The built container image includes the git command to enable installation of external plugins from git repositories such as GitHub at startup.
|
|
94
|
+
However, if you know that you don't need to install external plugins from git repositories during startup, you can create a slimmer container image without git by specifying the `--build-arg PACKAGES=` option in the container image build command.
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
# Build custom image without git
|
|
98
|
+
$ docker build -t myorg/if:v1.0.0-slim --build-arg PACKAGES= .
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Note that the absence of git does not affect the installation of npm packages.
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
# Run the custom image with the npm package
|
|
105
|
+
$ cat plugins-startup.txt
|
|
106
|
+
carbon-intensity-plugin
|
|
107
|
+
$ docker run --rm -p 3000:3000 -v $(pwd)/plugins-startup.txt:/app/plugins.txt myorg/if:v1.0.0-slim
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Building the Container Image with external plugins
|
|
111
|
+
|
|
112
|
+
While the official image and images built using the methods described above can add external plugins at container startup, installing external plugins takes considerable time, which significantly slows down container startup.
|
|
113
|
+
To avoid this, a `Dockerfile` for building container images with external plugins pre-installed is also provided in the `with-plugins` directory.
|
|
114
|
+
Create a `with-plugins/plugins.txt` file and build the image.
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
$ cat with-plugins/plugins.txt
|
|
118
|
+
carbon-intensity-plugin
|
|
119
|
+
Green-Software-Foundation/if-github-plugin
|
|
120
|
+
$ docker build -t myorg/if-with-plugins:v1.0.0 with-plugins
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
A `with-plugins/.npmrc` is required if you need an access token, as well as if you want to add external plugins when starting the container (The `with-plugins/.npmrc` file will not remain in the container image).
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
$ cat with-plugins/plugins.txt
|
|
127
|
+
danuw/if-casdk-plugin
|
|
128
|
+
$ cat with-plugins/.npmrc
|
|
129
|
+
//npm.pkg.github.com/:_authToken=<YOUR_PERSONAL_ACCESS_TOKEN>
|
|
130
|
+
@Green-Software-Foundation:registry=https://npm.pkg.github.com/
|
|
131
|
+
$ docker build -t myorg/if-with-plugins:v1.0.0 with-plugins
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The base image used for installing external plugins is the official image, and the base image for the final image is `node:18-slim`, but these can be changed using the `BUILDBASEIMAGE` and `BASEIMAGE` arguments respectively.
|
|
135
|
+
|
|
136
|
+
```sh
|
|
137
|
+
$ docker build -t myorg/if-with-plugins:v1.0.0 --build-arg BUILDBASEIMAGE=myorg/if:v1.0.0 --build-arg BASEIMAGE=node:20-slim with-plugins
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Note that, as with regular images, you can also create a slim image without git by adding the `--build-arg PACKAGES=` option.
|
|
141
|
+
|
|
142
|
+
## Execution Other Than API Server
|
|
143
|
+
|
|
144
|
+
The container image can execute commands other than the `if-api` command.
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
$ docker run --rm -v $(pwd)/manifests/examples/pipelines/sci.yml:/app/sci.yml myorg/if:v1.0.0 if-run -m sci.yml
|
|
148
|
+
```
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
ARG BASEIMAGE=node:18-slim
|
|
2
|
+
|
|
3
|
+
FROM --platform=$BUILDPLATFORM $BASEIMAGE AS deps
|
|
4
|
+
|
|
5
|
+
# Install git and ca-certificates
|
|
6
|
+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
7
|
+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
8
|
+
apt-get update && \
|
|
9
|
+
apt-get --no-install-recommends install -y \
|
|
10
|
+
git ca-certificates
|
|
11
|
+
|
|
12
|
+
# Create application directory
|
|
13
|
+
WORKDIR /app
|
|
14
|
+
|
|
15
|
+
# Copy package*.json
|
|
16
|
+
COPY package*.json .
|
|
17
|
+
|
|
18
|
+
# Install build dependencies
|
|
19
|
+
RUN --mount=type=cache,target=/root/.npm,sharing=locked \
|
|
20
|
+
npm ci --ignore-scripts --no-fund
|
|
21
|
+
|
|
22
|
+
# Compile TypeScript
|
|
23
|
+
RUN --mount=src=tsconfig.json,target=tsconfig.json \
|
|
24
|
+
--mount=src=tsconfig.build.json,target=tsconfig.build.json \
|
|
25
|
+
--mount=src=src/,target=src/ \
|
|
26
|
+
npm run build
|
|
27
|
+
|
|
28
|
+
# Remove devDependencies
|
|
29
|
+
RUN --mount=type=cache,target=/root/.npm,sharing=locked \
|
|
30
|
+
npm prune --ignore-scripts --omit=dev
|
|
31
|
+
|
|
32
|
+
# Remove empty directory
|
|
33
|
+
RUN rmdir --ignore-fail-on-non-empty node_modules/*
|
|
34
|
+
|
|
35
|
+
# Set executable attributes to applications
|
|
36
|
+
RUN chmod +x build/if-*/index.js
|
|
37
|
+
|
|
38
|
+
# Link applications
|
|
39
|
+
RUN for a in build/if-*/index.js; do ln -s ../../$a node_modules/.bin/$(basename $(dirname $a)); done
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
FROM $BASEIMAGE
|
|
43
|
+
|
|
44
|
+
# Packages to be installed
|
|
45
|
+
ARG PACKAGES='git ca-certificates'
|
|
46
|
+
|
|
47
|
+
# Install lsb_release, git and ca-certificates
|
|
48
|
+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
49
|
+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
50
|
+
apt-get update && \
|
|
51
|
+
apt-get --no-install-recommends install -y \
|
|
52
|
+
lsb-release $PACKAGES
|
|
53
|
+
|
|
54
|
+
# Copy entrypoint shell script
|
|
55
|
+
COPY bin/docker-entrypoint.sh /usr/local/bin
|
|
56
|
+
|
|
57
|
+
# Set execution user
|
|
58
|
+
USER 1000
|
|
59
|
+
|
|
60
|
+
# Create application directory
|
|
61
|
+
WORKDIR /app
|
|
62
|
+
|
|
63
|
+
# Copy application and runtime dependencies
|
|
64
|
+
COPY --from=deps --chown=node:node /app .
|
|
65
|
+
|
|
66
|
+
# Set environment variables
|
|
67
|
+
ENV NODE_ENV=production NPM_CONFIG_UPDATE_NOTIFIER=false PATH=/app/node_modules/.bin:$PATH HOST=
|
|
68
|
+
|
|
69
|
+
# Expose port
|
|
70
|
+
EXPOSE 3000
|
|
71
|
+
|
|
72
|
+
# Run the application
|
|
73
|
+
CMD ["if-api"]
|
package/HELM_CHART.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Using API server with Kubernetes
|
|
2
|
+
|
|
3
|
+
The Impact Framework provides a helm chart, making it easy to run on a Kubernetes cluster.
|
|
4
|
+
|
|
5
|
+
## Deploy the API server to Kubernetes
|
|
6
|
+
|
|
7
|
+
The helm chart is provided in OCI format on GitHub Container Registry, so you need to specify `oci:` when referencing the chart.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
$ helm install if oci://ghcr.io/green-software-foundation/charts/if
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For security reasons, three builtin plugins (Shell, CSVImport, CSVLookup) are disabled by default, but they can be enabled by specifying in `values.yaml`.
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
# enable all builtin plugins
|
|
17
|
+
disabledPlugins: []
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Install External Plugins
|
|
21
|
+
|
|
22
|
+
You can also specify in `values.yaml` to install external plugins when the pod starts.
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
additionalPlugins:
|
|
26
|
+
- carbon-intensity-plugin
|
|
27
|
+
- Green-Software-Foundation/if-github-plugin
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
If an `.npmrc` file is required, you can create a `Secret` by specifying it in the `npmrc` section of the `values.yaml` file.
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
additionalPlugins:
|
|
34
|
+
- Green-Software-Foundation/community-plugins
|
|
35
|
+
- danuw/if-casdk-plugin
|
|
36
|
+
|
|
37
|
+
npmrc: |
|
|
38
|
+
//npm.pkg.github.com/:_authToken=<YOUR_PERSONAL_ACCESS_TOKEN>
|
|
39
|
+
@Green-Software-Foundation:registry=https://npm.pkg.github.com/
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
You can also extract the access token as an environment variable.
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
additionalPlugins:
|
|
46
|
+
- Green-Software-Foundation/community-plugins
|
|
47
|
+
- danuw/if-casdk-plugin
|
|
48
|
+
|
|
49
|
+
npmrc: |
|
|
50
|
+
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
|
|
51
|
+
@Green-Software-Foundation:registry=https://npm.pkg.github.com/
|
|
52
|
+
|
|
53
|
+
env:
|
|
54
|
+
secret:
|
|
55
|
+
GITHUB_TOKEN: <YOUR_PERSONAL_ACCESS_TOKEN>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Using Custom Container Images
|
|
59
|
+
|
|
60
|
+
By creating and using a container image with external plugins pre-installed, you can use external plugins without installing them at pod startup, which reduces pod startup time.
|
|
61
|
+
|
|
62
|
+
`values.yaml` for using `my-image-repository:my-version` as the container image:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
image:
|
|
66
|
+
repository: my-image-repository
|
|
67
|
+
tag: my-version
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Using Kubernetes service
|
|
71
|
+
|
|
72
|
+
By default, a `ClusterIP` service is deployed, so you can access the API server by running `kubectl port-forward`.
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
$ kubectl port-forward svc/if 3000:3000 &
|
|
76
|
+
$ curl -H "Content-Type: application/yaml" --data-binary @manifest.yaml http://localhost:3000/v1/run
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
You can access the API server from outside the cluster without using `port-forward` by changing the service type to `NodePort` or `LoadBalancer`.
|
|
80
|
+
|
|
81
|
+
`values.yaml` for the `NodePort`:
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
# Using NodePort
|
|
85
|
+
service:
|
|
86
|
+
type: NodePort
|
|
87
|
+
nodePort: 32000
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`values.yaml` for the `LoadBalancer`:
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
# Using LoadBalancer
|
|
94
|
+
service:
|
|
95
|
+
type: LoadBalancer
|
|
96
|
+
```
|
package/README.md
CHANGED
|
@@ -60,6 +60,62 @@ if-run --help
|
|
|
60
60
|
if-run -h
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
### Using API server
|
|
64
|
+
|
|
65
|
+
The Impact Framework also provides an API server. By default, it listens on localhost:3000, but this can be changed.
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
# Run the API server listening on the default localhost:3000.
|
|
69
|
+
$ if-api
|
|
70
|
+
|
|
71
|
+
# Run the API server listening on 0.0.0.0:8080.
|
|
72
|
+
$ if-api --host 0.0.0.0 --port 8080
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
If the API server is running, you can send a manifest in the request body and receive the results of `if-run` as a response.
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
# Process manifest
|
|
79
|
+
$ curl -H "Content-Type: application/yaml" --data-binary @manifest.yaml http://localhost:3000/v1/run
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Note that in `if-api`, the following builtin plugins are disabled by default for security reasons.
|
|
83
|
+
- Shell
|
|
84
|
+
- CSVImport
|
|
85
|
+
- CSVLookup
|
|
86
|
+
|
|
87
|
+
Please refer to the documentation for detailed usage instructions, including how to enable these plugins.
|
|
88
|
+
|
|
89
|
+
### Using Docker Container
|
|
90
|
+
|
|
91
|
+
The Impact Framework API server can also be run as a Docker container.
|
|
92
|
+
The official image is provided at `ghcr.io/green-software-foundation/if`, so you can run the container with the following command.
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
# Run with default port (3000)
|
|
96
|
+
$ docker run --rm -p 3000:3000 ghcr.io/green-software-foundation/if
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Please refer to [`CONTAINER.md`](CONTAINER.md) for how to install external plugins during container execution and how to build custom images.
|
|
100
|
+
|
|
101
|
+
### Using API server with Kubernetes
|
|
102
|
+
|
|
103
|
+
The Impact Framework also provides a helm chart for running the API server on a Kubernetes cluster.
|
|
104
|
+
The helm chart is provided in OCI format on GitHub Container Registry, so you need to specify `oci:` when referencing the chart.
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
$ helm install if oci://ghcr.io/green-software-foundation/charts/if
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
By default, a `ClusterIP` service is deployed, so you can access the API server by running `kubectl port-forward`.
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
$ kubectl port-forward svc/if 3000:3000 &
|
|
114
|
+
$ curl -H "Content-Type: application/yaml" --data-binary @manifest.yaml http://localhost:3000/v1/run
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
For detailed usage including external plugin installation and NodePort configuration, please refer to [`HELM_CHART.md`](HELM_CHART.md).
|
|
118
|
+
|
|
63
119
|
## Documentation
|
|
64
120
|
|
|
65
121
|
Please read our documentation at [if.greensoftware.foundation](https://if.greensoftware.foundation/)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# Install plugins if plugins.txt exists.
|
|
5
|
+
if [ -f plugins.txt ] && [ -r plugins.txt ]; then
|
|
6
|
+
echo "Installing plugins..."
|
|
7
|
+
npm install --no-fund $(cat plugins.txt)
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
# Run command with node if the first argument contains a "-" or is not a system command.
|
|
11
|
+
if [ "${1#-}" != "${1}" ] || [ -z "$(command -v "${1}")" ] || { [ -f "${1}" ] && ! [ -x "${1}" ]; } || [ -d "${1}" ]; then
|
|
12
|
+
set -- node "$@"
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
exec "$@"
|
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { AggregationOptions } from '@grnsft/if-core/types';
|
|
3
3
|
import { manifestSchema } from '../util/validations';
|
|
4
4
|
export type Manifest = z.infer<typeof manifestSchema>;
|
|
5
|
+
export type Execution = NonNullable<Manifest['execution']>;
|
|
5
6
|
export type GlobalPlugins = Manifest['initialize']['plugins'];
|
|
6
7
|
export type PluginOptions = GlobalPlugins[string];
|
|
7
8
|
export type AggregationParams = Manifest['aggregation'];
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3R5cGVzL21hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uT3B0aW9uc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHttYW5pZmVzdFNjaGVtYX0gZnJvbSAnLi4vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0ID0gei5pbmZlcjx0eXBlb2YgbWFuaWZlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBHbG9iYWxQbHVnaW5zID0gTWFuaWZlc3RbJ2luaXRpYWxpemUnXVsncGx1Z2lucyddO1xuXG5leHBvcnQgdHlwZSBQbHVnaW5PcHRpb25zID0gR2xvYmFsUGx1Z2luc1tzdHJpbmddO1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvblBhcmFtcyA9IE1hbmlmZXN0WydhZ2dyZWdhdGlvbiddO1xuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25NZXRyaWNzV2l0aE1ldGhvZCA9IHtcbiAgW2tleTogc3RyaW5nXTogQWdncmVnYXRpb25PcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25QYXJhbXNTdXJlID0gRXh0cmFjdDxNYW5pZmVzdFsnYWdncmVnYXRpb24nXSwge30+O1xuXG5leHBvcnQgdHlwZSBDb250ZXh0ID0gT21pdDxNYW5pZmVzdCwgJ3RyZWUnPjtcblxuZXhwb3J0IHR5cGUgQ29udGV4dFdpdGhFeGVjID0gT21pdDxNYW5pZmVzdCwgJ3RyZWUnPjtcbiJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3R5cGVzL21hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uT3B0aW9uc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHttYW5pZmVzdFNjaGVtYX0gZnJvbSAnLi4vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0ID0gei5pbmZlcjx0eXBlb2YgbWFuaWZlc3RTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRpb24gPSBOb25OdWxsYWJsZTxNYW5pZmVzdFsnZXhlY3V0aW9uJ10+O1xuXG5leHBvcnQgdHlwZSBHbG9iYWxQbHVnaW5zID0gTWFuaWZlc3RbJ2luaXRpYWxpemUnXVsncGx1Z2lucyddO1xuXG5leHBvcnQgdHlwZSBQbHVnaW5PcHRpb25zID0gR2xvYmFsUGx1Z2luc1tzdHJpbmddO1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvblBhcmFtcyA9IE1hbmlmZXN0WydhZ2dyZWdhdGlvbiddO1xuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25NZXRyaWNzV2l0aE1ldGhvZCA9IHtcbiAgW2tleTogc3RyaW5nXTogQWdncmVnYXRpb25PcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25QYXJhbXNTdXJlID0gRXh0cmFjdDxNYW5pZmVzdFsnYWdncmVnYXRpb24nXSwge30+O1xuXG5leHBvcnQgdHlwZSBDb250ZXh0ID0gT21pdDxNYW5pZmVzdCwgJ3RyZWUnPjtcblxuZXhwb3J0IHR5cGUgQ29udGV4dFdpdGhFeGVjID0gT21pdDxNYW5pZmVzdCwgJ3RyZWUnPjtcbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.debugLogger = void 0;
|
|
4
|
+
const storage_1 = require("../../common/util/storage");
|
|
4
5
|
const config_1 = require("../../if-run/config");
|
|
5
6
|
const logMessagesKeys = [
|
|
6
7
|
'STARTING_IF',
|
|
@@ -46,26 +47,11 @@ const overrideConsoleMethods = (debugMode) => {
|
|
|
46
47
|
console.error = (...args) => debugLog(LogLevel.Error, args, debugMode);
|
|
47
48
|
console.debug = (...args) => debugLog(LogLevel.Debug, args, debugMode);
|
|
48
49
|
};
|
|
49
|
-
/**
|
|
50
|
-
* Creates an encapsulated object to retrieve the plugin name.
|
|
51
|
-
*/
|
|
52
|
-
const pluginNameManager = (() => {
|
|
53
|
-
let pluginName = '';
|
|
54
|
-
const manager = {
|
|
55
|
-
get currentPluginName() {
|
|
56
|
-
return pluginName;
|
|
57
|
-
},
|
|
58
|
-
set currentPluginName(value) {
|
|
59
|
-
pluginName = value;
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
return manager;
|
|
63
|
-
})();
|
|
64
50
|
/**
|
|
65
51
|
* Sets the name of the currently executing plugin.
|
|
66
52
|
*/
|
|
67
53
|
const setExecutingPluginName = (pluginName) => {
|
|
68
|
-
|
|
54
|
+
(0, storage_1.getStorage)().currentPluginName = pluginName;
|
|
69
55
|
};
|
|
70
56
|
/**
|
|
71
57
|
* Logs messages with the specified log level and format.
|
|
@@ -96,7 +82,7 @@ const debugLog = (level, args, debugMode) => {
|
|
|
96
82
|
return;
|
|
97
83
|
}
|
|
98
84
|
const date = new Date().toISOString();
|
|
99
|
-
const plugin =
|
|
85
|
+
const plugin = (0, storage_1.getStorage)().currentPluginName;
|
|
100
86
|
const isExeption = typeof args[0] === 'string' && args[0].includes('**Computing');
|
|
101
87
|
const message = `${level}: ${date}: ${plugin ? plugin + ': ' : ''}${args.join(', ')}`;
|
|
102
88
|
const formattedMessage = isExeption ? args.join(', ') : message;
|
|
@@ -121,4 +107,4 @@ exports.debugLogger = {
|
|
|
121
107
|
overrideConsoleMethods,
|
|
122
108
|
setExecutingPluginName,
|
|
123
109
|
};
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi91dGlsL2RlYnVnLWxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBcUQ7QUFFckQsZ0RBQTRDO0FBRTVDLE1BQU0sZUFBZSxHQUE2QjtJQUNoRCxhQUFhO0lBQ2IsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsb0NBQW9DO0lBQ3BDLDZCQUE2QjtJQUM3QixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsOEJBQThCO0lBQzlCLFlBQVk7SUFDWixXQUFXO0lBQ1gsa0NBQWtDO0lBQ2xDLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtDQUN6QixDQUFDO0FBRUYsSUFBSyxRQUtKO0FBTEQsV0FBSyxRQUFRO0lBQ1gseUJBQWEsQ0FBQTtJQUNiLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTEksUUFBUSxLQUFSLFFBQVEsUUFLWjtBQUVELE1BQU0sZUFBZSxHQUFHO0lBQ3RCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztJQUNoQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7SUFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztJQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Q0FDckIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQWtCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMz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QUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBRWhFLElBQUksU0FBUyxFQUFFO1FBQ2IsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3hDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3hDLE1BQU07U0FDVDtLQUNGO0FBQ0gsQ0FBQyxDQUFDO0FBRVcsUUFBQSxXQUFXLEdBQUc7SUFDekIsc0JBQXNCO0lBQ3RCLHNCQUFzQjtDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRTdG9yYWdlfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9zdG9yYWdlJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9pZi1ydW4vY29uZmlnJztcblxuY29uc3QgbG9nTWVzc2FnZXNLZXlzOiAoa2V5b2YgdHlwZW9mIFNUUklOR1MpW10gPSBbXG4gICdTVEFSVElOR19JRicsXG4gICdFWElUSU5HX0lGJyxcbiAgJ0xPQURJTkdfTUFOSUZFU1QnLFxuICAnVkFMSURBVElOR19NQU5JRkVTVCcsXG4gICdDQVBUVVJJTkdfUlVOVElNRV9FTlZJUk9OTUVOVF9EQVRBJyxcbiAgJ0NIRUNLSU5HX0FHR1JFR0FUSU9OX01FVEhPRCcsXG4gICdJTklUSUFMSVpJTkdfUExVR0lOUycsXG4gICdJTklUSUFMSVpJTkdfUExVR0lOJyxcbiAgJ0xPQURJTkdfUExVR0lOX0ZST01fUEFUSCcsXG4gICdDT01QVVRJTkdfUElQRUxJTkVfRk9SX05PREUnLFxuICAnQ09NUFVUSU5HX0NPTVBPTkVOVF9QSVBFTElORScsXG4gICdSRUdST1VQSU5HJyxcbiAgJ09CU0VSVklORycsXG4gICdNRVJHSU5HX0RFRkFVTFRTX1dJVEhfSU5QVVRfREFUQScsXG4gICdBR0dSRUdBVElOR19PVVRQVVRTJyxcbiAgJ0FHR1JFR0FUSU5HX05PREUnLFxuICAnUFJFUEFSSU5HX09VVFBVVF9EQVRBJyxcbiAgJ0VYUE9SVElOR19UT19ZQU1MX0ZJTEUnLFxuXTtcblxuZW51bSBMb2dMZXZlbCB7XG4gIEluZm8gPSAnSU5GTycsXG4gIFdhcm4gPSAnV0FSTicsXG4gIEVycm9yID0gJ0VSUk9SJyxcbiAgRGVidWcgPSAnREVCVUcnLFxufVxuXG5jb25zdCBvcmlnaW5hbENvbnNvbGUgPSB7XG4gIGxvZzogY29uc29sZS5sb2csXG4gIGluZm86IGNvbnNvbGUuaW5mbyxcbiAgd2FybjogY29uc29sZS53YXJuLFxuICBlcnJvcjogY29uc29sZS5lcnJvcixcbiAgZGVidWc6IGNvbnNvbGUuZGVidWcsXG59O1xuXG4vKipcbiAqIE92ZXJyaWRlcyBjb25zb2xlIG1ldGhvZHMgd2l0aCBjdXN0b20gZGVidWcgbG9nZ2luZy5cbiAqL1xuY29uc3Qgb3ZlcnJpZGVDb25zb2xlTWV0aG9kcyA9IChkZWJ1Z01vZGU6IGJvb2xlYW4pID0+IHtcbiAgY29uc29sZS5sb2cgPSAoLi4uYXJnczogYW55W10pID0+IGRlYnVnTG9nKExvZ0xldmVsLkluZm8sIGFyZ3MsIGRlYnVnTW9kZSk7XG4gIGNvbnNvbGUuaW5mbyA9ICguLi5hcmdzOiBhbnlbXSkgPT4gZGVidWdMb2coTG9nTGV2ZWwuSW5mbywgYXJncywgZGVidWdNb2RlKTtcbiAgY29uc29sZS53YXJuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBkZWJ1Z0xvZyhMb2dMZXZlbC5XYXJuLCBhcmdzLCBkZWJ1Z01vZGUpO1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBkZWJ1Z0xvZyhMb2dMZXZlbC5FcnJvciwgYXJncywgZGVidWdNb2RlKTtcbiAgY29uc29sZS5kZWJ1ZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4gZGVidWdMb2coTG9nTGV2ZWwuRGVidWcsIGFyZ3MsIGRlYnVnTW9kZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcGx1Z2luLlxuICovXG5jb25zdCBzZXRFeGVjdXRpbmdQbHVnaW5OYW1lID0gKHBsdWdpbk5hbWU/OiBzdHJpbmcpID0+IHtcbiAgZ2V0U3RvcmFnZSgpLmN1cnJlbnRQbHVnaW5OYW1lID0gcGx1Z2luTmFtZTtcbn07XG5cbi8qKlxuICogTG9ncyBtZXNzYWdlcyB3aXRoIHRoZSBzcGVjaWZpZWQgbG9nIGxldmVsIGFuZCBmb3JtYXQuXG4gKi9cbmNvbnN0IGRlYnVnTG9nID0gKGxldmVsOiBMb2dMZXZlbCwgYXJnczogYW55W10sIGRlYnVnTW9kZTogYm9vbGVhbikgPT4ge1xuICBpZiAoIWRlYnVnTW9kZSkge1xuICAgIGlmIChsZXZlbCA9PT0gTG9nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0RlYnVnTG9nID1cbiAgICAgIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgbG9nTWVzc2FnZXNLZXlzLnNvbWUoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgdHlwZW9mIFNUUklOR1Nba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyAoU1RSSU5HU1trZXldIGFzIEZ1bmN0aW9uKS5jYWxsKG51bGwsICcnKVxuICAgICAgICAgICAgOiAoU1RSSU5HU1trZXldIGFzIHN0cmluZyk7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3NbMF0uaW5jbHVkZXMobWVzc2FnZSk7XG4gICAgICB9KTtcblxuICAgIGlmICghaXNEZWJ1Z0xvZykge1xuICAgICAgb3JpZ2luYWxDb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmIGFyZ3NbMF0uaW5jbHVkZXMoJyMgc3RhcnQnKSkge1xuICAgIG9yaWdpbmFsQ29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdcXG4nKSB7XG4gICAgb3JpZ2luYWxDb25zb2xlLmxvZygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHBsdWdpbiA9IGdldFN0b3JhZ2UoKS5jdXJyZW50UGx1Z2luTmFtZTtcbiAgY29uc3QgaXNFeGVwdGlvbiA9XG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmIGFyZ3NbMF0uaW5jbHVkZXMoJyoqQ29tcHV0aW5nJyk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgJHtsZXZlbH06ICR7ZGF0ZX06ICR7cGx1Z2luID8gcGx1Z2luICsgJzogJyA6ICcnfSR7YXJncy5qb2luKFxuICAgICcsICdcbiAgKX1gO1xuXG4gIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBpc0V4ZXB0aW9uID8gYXJncy5qb2luKCcsICcpIDogbWVzc2FnZTtcblxuICBpZiAoZGVidWdNb2RlKSB7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSBMb2dMZXZlbC5JbmZvOlxuICAgICAgICBvcmlnaW5hbENvbnNvbGUuaW5mbyhmb3JtYXR0ZWRNZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLldhcm46XG4gICAgICAgIG9yaWdpbmFsQ29uc29sZS53YXJuKGZvcm1hdHRlZE1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9nTGV2ZWwuRXJyb3I6XG4gICAgICAgIG9yaWdpbmFsQ29uc29sZS5lcnJvcihmb3JtYXR0ZWRNZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLkRlYnVnOlxuICAgICAgICBvcmlnaW5hbENvbnNvbGUuZGVidWcoZm9ybWF0dGVkTWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlYnVnTG9nZ2VyID0ge1xuICBvdmVycmlkZUNvbnNvbGVNZXRob2RzLFxuICBzZXRFeGVjdXRpbmdQbHVnaW5OYW1lLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the storage for the current context
|
|
3
|
+
*/
|
|
4
|
+
export declare const getStorage: () => any;
|
|
5
|
+
/**
|
|
6
|
+
* Set up the context and execute the process
|
|
7
|
+
* @param callback The process to be executed after the context is set up
|
|
8
|
+
*/
|
|
9
|
+
export declare const executeWithContext: (callback: () => void) => void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeWithContext = exports.getStorage = void 0;
|
|
4
|
+
const async_hooks_1 = require("async_hooks");
|
|
5
|
+
/**
|
|
6
|
+
* Create global storage
|
|
7
|
+
*/
|
|
8
|
+
const globalStorage = {};
|
|
9
|
+
/**
|
|
10
|
+
* Create async local storage
|
|
11
|
+
*/
|
|
12
|
+
const asyncLocalStorage = new async_hooks_1.AsyncLocalStorage();
|
|
13
|
+
/**
|
|
14
|
+
* Get the storage for the current context
|
|
15
|
+
*/
|
|
16
|
+
const getStorage = () => asyncLocalStorage.getStore() || globalStorage;
|
|
17
|
+
exports.getStorage = getStorage;
|
|
18
|
+
/**
|
|
19
|
+
* Set up the context and execute the process
|
|
20
|
+
* @param callback The process to be executed after the context is set up
|
|
21
|
+
*/
|
|
22
|
+
const executeWithContext = (callback) => asyncLocalStorage.run({}, callback);
|
|
23
|
+
exports.executeWithContext = executeWithContext;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vdXRpbC9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE4QztBQUU5Qzs7R0FFRztBQUNILE1BQU0sYUFBYSxHQUFRLEVBQUUsQ0FBQztBQUU5Qjs7R0FFRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSwrQkFBaUIsRUFBRSxDQUFDO0FBRWxEOztHQUVHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksYUFBYSxDQUFDO0FBQWpFLFFBQUEsVUFBVSxjQUF1RDtBQUU5RTs7O0dBR0c7QUFFSSxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBb0IsRUFBUSxFQUFFLENBQy9ELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFEekIsUUFBQSxrQkFBa0Isc0JBQ08iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jTG9jYWxTdG9yYWdlfSBmcm9tICdhc3luY19ob29rcyc7XG5cbi8qKlxuICogQ3JlYXRlIGdsb2JhbCBzdG9yYWdlXG4gKi9cbmNvbnN0IGdsb2JhbFN0b3JhZ2U6IGFueSA9IHt9O1xuXG4vKipcbiAqIENyZWF0ZSBhc3luYyBsb2NhbCBzdG9yYWdlXG4gKi9cbmNvbnN0IGFzeW5jTG9jYWxTdG9yYWdlID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKCk7XG5cbi8qKlxuICogR2V0IHRoZSBzdG9yYWdlIGZvciB0aGUgY3VycmVudCBjb250ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9yYWdlID0gKCkgPT4gYXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKSB8fCBnbG9iYWxTdG9yYWdlO1xuXG4vKipcbiAqIFNldCB1cCB0aGUgY29udGV4dCBhbmQgZXhlY3V0ZSB0aGUgcHJvY2Vzc1xuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBwcm9jZXNzIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNldCB1cFxuICovXG5cbmV4cG9ydCBjb25zdCBleGVjdXRlV2l0aENvbnRleHQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkID0+XG4gIGFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7fSwgY2FsbGJhY2spO1xuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ArgumentConfig, ParseOptions } from 'ts-command-line-args';
|
|
2
|
+
import type { IfApiArgs } from '../types/process-args';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for if-api.
|
|
5
|
+
*/
|
|
6
|
+
export declare const CONFIG: {
|
|
7
|
+
readonly ARGS: ArgumentConfig<IfApiArgs>;
|
|
8
|
+
readonly HELP: ParseOptions<IfApiArgs>;
|
|
9
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONFIG = void 0;
|
|
4
|
+
const config_1 = require("../../common/config");
|
|
5
|
+
const { DISCLAIMER_MESSAGE } = config_1.STRINGS;
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for if-api.
|
|
8
|
+
*/
|
|
9
|
+
exports.CONFIG = {
|
|
10
|
+
ARGS: {
|
|
11
|
+
debug: {
|
|
12
|
+
type: Boolean,
|
|
13
|
+
alias: 'd',
|
|
14
|
+
description: 'Print debug logs to the console',
|
|
15
|
+
defaultValue: false,
|
|
16
|
+
},
|
|
17
|
+
disableExternalPluginWarning: {
|
|
18
|
+
type: Boolean,
|
|
19
|
+
alias: 'w',
|
|
20
|
+
description: 'Disable external plugin warning',
|
|
21
|
+
defaultValue: false,
|
|
22
|
+
},
|
|
23
|
+
disabledPlugins: {
|
|
24
|
+
type: String,
|
|
25
|
+
alias: 'f',
|
|
26
|
+
description: 'Filename that contains plugin names to be disabled',
|
|
27
|
+
optional: true,
|
|
28
|
+
},
|
|
29
|
+
port: {
|
|
30
|
+
type: String,
|
|
31
|
+
alias: 'p',
|
|
32
|
+
description: 'Port to listen on',
|
|
33
|
+
defaultValue: process.env.PORT ?? '3000',
|
|
34
|
+
},
|
|
35
|
+
host: {
|
|
36
|
+
type: String,
|
|
37
|
+
alias: 'b',
|
|
38
|
+
description: 'Host to listen on',
|
|
39
|
+
defaultValue: process.env.HOST ?? 'localhost',
|
|
40
|
+
},
|
|
41
|
+
help: {
|
|
42
|
+
type: Boolean,
|
|
43
|
+
alias: 'h',
|
|
44
|
+
description: 'Show help',
|
|
45
|
+
optional: true,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
HELP: {
|
|
49
|
+
helpArg: 'help',
|
|
50
|
+
headerContentSections: [
|
|
51
|
+
{ header: 'Impact Framework', content: 'Helpful keywords:' },
|
|
52
|
+
],
|
|
53
|
+
footerContentSections: [
|
|
54
|
+
{ header: 'Green Software Foundation', content: DISCLAIMER_MESSAGE },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLWFwaS9jb25maWcvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGdEQUE0QztBQUk1QyxNQUFNLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRXJDOztHQUVHO0FBQ1UsUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFO1FBQ0osS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsR0FBRztZQUNWLFdBQVcsRUFBRSxpQ0FBaUM7WUFDOUMsWUFBWSxFQUFFLEtBQUs7U0FDcEI7UUFDRCw0QkFBNEIsRUFBRTtZQUM1QixJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxHQUFHO1lBQ1YsV0FBVyxFQUFFLGlDQUFpQztZQUM5QyxZQUFZLEVBQUUsS0FBSztTQUNwQjtRQUNELGVBQWUsRUFBRTtZQUNmLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEdBQUc7WUFDVixXQUFXLEVBQUUsb0RBQW9EO1lBQ2pFLFFBQVEsRUFBRSxJQUFJO1NBQ2Y7UUFDRCxJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxHQUFHO1lBQ1YsV0FBVyxFQUFFLG1CQUFtQjtZQUNoQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksTUFBTTtTQUN6QztRQUNELElBQUksRUFBRTtZQUNKLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEdBQUc7WUFDVixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxXQUFXO1NBQzlDO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsR0FBRztZQUNWLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFFBQVEsRUFBRSxJQUFJO1NBQ2Y7S0FDMkI7SUFDOUIsSUFBSSxFQUFFO1FBQ0osT0FBTyxFQUFFLE1BQU07UUFDZixxQkFBcUIsRUFBRTtZQUNyQixFQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUM7U0FDM0Q7UUFDRCxxQkFBcUIsRUFBRTtZQUNyQixFQUFDLE1BQU0sRUFBRSwyQkFBMkIsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUM7U0FDbkU7S0FDeUI7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtBcmd1bWVudENvbmZpZywgUGFyc2VPcHRpb25zfSBmcm9tICd0cy1jb21tYW5kLWxpbmUtYXJncyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vLi4vY29tbW9uL2NvbmZpZyc7XG5cbmltcG9ydCB0eXBlIHtJZkFwaUFyZ3N9IGZyb20gJy4uL3R5cGVzL3Byb2Nlc3MtYXJncyc7XG5cbmNvbnN0IHtESVNDTEFJTUVSX01FU1NBR0V9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBpZi1hcGkuXG4gKi9cbmV4cG9ydCBjb25zdCBDT05GSUcgPSB7XG4gIEFSR1M6IHtcbiAgICBkZWJ1Zzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGFsaWFzOiAnZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1ByaW50IGRlYnVnIGxvZ3MgdG8gdGhlIGNvbnNvbGUnLFxuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB9LFxuICAgIGRpc2FibGVFeHRlcm5hbFBsdWdpbldhcm5pbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBhbGlhczogJ3cnLFxuICAgICAgZGVzY3JpcHRpb246ICdEaXNhYmxlIGV4dGVybmFsIHBsdWdpbiB3YXJuaW5nJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgfSxcbiAgICBkaXNhYmxlZFBsdWdpbnM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGFsaWFzOiAnZicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZpbGVuYW1lIHRoYXQgY29udGFpbnMgcGx1Z2luIG5hbWVzIHRvIGJlIGRpc2FibGVkJyxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0sXG4gICAgcG9ydDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgYWxpYXM6ICdwJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUG9ydCB0byBsaXN0ZW4gb24nLFxuICAgICAgZGVmYXVsdFZhbHVlOiBwcm9jZXNzLmVudi5QT1JUID8/ICczMDAwJyxcbiAgICB9LFxuICAgIGhvc3Q6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGFsaWFzOiAnYicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0hvc3QgdG8gbGlzdGVuIG9uJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcHJvY2Vzcy5lbnYuSE9TVCA/PyAnbG9jYWxob3N0JyxcbiAgICB9LFxuICAgIGhlbHA6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBhbGlhczogJ2gnLFxuICAgICAgZGVzY3JpcHRpb246ICdTaG93IGhlbHAnLFxuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSxcbiAgfSBhcyBBcmd1bWVudENvbmZpZzxJZkFwaUFyZ3M+LFxuICBIRUxQOiB7XG4gICAgaGVscEFyZzogJ2hlbHAnLFxuICAgIGhlYWRlckNvbnRlbnRTZWN0aW9uczogW1xuICAgICAge2hlYWRlcjogJ0ltcGFjdCBGcmFtZXdvcmsnLCBjb250ZW50OiAnSGVscGZ1bCBrZXl3b3JkczonfSxcbiAgICBdLFxuICAgIGZvb3RlckNvbnRlbnRTZWN0aW9uczogW1xuICAgICAge2hlYWRlcjogJ0dyZWVuIFNvZnR3YXJlIEZvdW5kYXRpb24nLCBjb250ZW50OiBESVNDTEFJTUVSX01FU1NBR0V9LFxuICAgIF0sXG4gIH0gYXMgUGFyc2VPcHRpb25zPElmQXBpQXJncz4sXG59IGFzIGNvbnN0O1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STRINGS = exports.CONFIG = void 0;
|
|
4
|
+
var config_1 = require("./config");
|
|
5
|
+
Object.defineProperty(exports, "CONFIG", { enumerable: true, get: function () { return config_1.CONFIG; } });
|
|
6
|
+
var strings_1 = require("./strings");
|
|
7
|
+
Object.defineProperty(exports, "STRINGS", { enumerable: true, get: function () { return strings_1.STRINGS; } });
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWYtYXBpL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBZ0M7QUFBeEIsZ0dBQUEsTUFBTSxPQUFBO0FBQ2QscUNBQWtDO0FBQTFCLGtHQUFBLE9BQU8sT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7Q09ORklHfSBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQge1NUUklOR1N9IGZyb20gJy4vc3RyaW5ncyc7XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strings for if-api.
|
|
3
|
+
*/
|
|
4
|
+
export declare const STRINGS: {
|
|
5
|
+
readonly SERVER_STARTED: (addr: string) => string;
|
|
6
|
+
readonly SERVER_START_FAILED: (err: Error) => string;
|
|
7
|
+
readonly PROCESSING_REQUEST: "Processing request";
|
|
8
|
+
readonly INTERNAL_SERVER_ERROR: "Internal Server Error";
|
|
9
|
+
readonly INVALID_JSON: "Invalid JSON format";
|
|
10
|
+
readonly INVALID_YAML: "Invalid YAML format";
|
|
11
|
+
readonly MISSING_MANIFEST: "Missing manifest in request body";
|
|
12
|
+
readonly UNSUPPORTED_CONTENT_TYPE: "Unsupported content type. Supported types are: application/json, application/yaml";
|
|
13
|
+
readonly DISCLAIMER_MESSAGE: "Impact Framework API - Green Software Foundation";
|
|
14
|
+
readonly INVALID_DISABLED_PLUGINS: (line: string) => string;
|
|
15
|
+
readonly INVALID_PORT_NUMBER: (port: string) => string;
|
|
16
|
+
};
|