Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NXJS-218: Run tests against LTS 2025 #177

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions ci/Jenkinsfiles/build.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ Closure buildFunctionalTestStage(String containerId, String nodejsVersion, Strin
return {
container(containerId) {
nxWithHelmfileDeployment(namespace: testNamespace, environment: "functional-tests-${nuxeoVersion}",
secrets: [[name: 'platform-cluster-tls', namespace: 'platform']], envVars: ["NUXEO_VERSION=${nuxeoVersion}-${VERSION}",
"JS_REPORTS_DIR=nuxeo-${nuxeoVersionSlug}-node-${nodejsVersionSlug}", "NUXEO_DOMAIN=${nuxeoDomain}",
"NUXEO_BASE_URL=https://${nuxeoDomain}/nuxeo"]) {
secrets: [[name: 'platform-cluster-tls', namespace: 'platform'], [name: 'instance-clid-preprod', namespace: 'platform']],
envVars: ["NUXEO_VERSION=${nuxeoVersion}-${VERSION}", "JS_REPORTS_DIR=nuxeo-${nuxeoVersionSlug}-node-${nodejsVersionSlug}",
"NUXEO_DOMAIN=${nuxeoDomain}", "NUXEO_BASE_URL=https://${nuxeoDomain}/nuxeo"]) {
script {
try {
sh "yarn it:cover"
Expand Down Expand Up @@ -160,16 +160,27 @@ pipeline {
}
}
}
stage('Nuxeo 2025') {
steps {
container('nodejs-active') {
script {
nxDocker.build(skaffoldFile: 'ci/docker/nuxeo/skaffold.yaml', envVars: ["FTESTS_VERSION=2025-${VERSION}", "NUXEO_VERSION=2025.x"])
}
}
}
}
}
}

stage('Run functional tests') {
steps {
script {
def stages = [:]
// run functional tests against latest nuxeo version for active node
stages["Against Nuxeo 2023 - Node.js ${NODEJS_ACTIVE_VERSION}"] =
buildFunctionalTestStage("nodejs-active", env.NODEJS_ACTIVE_VERSION, '2023')
// run functional tests against latest and upcoming nuxeo version for active node
for (nuxeoVersion in ["2023", "2025"]) {
stages["Against Nuxeo ${nuxeoVersion} - Node.js ${NODEJS_ACTIVE_VERSION}"] =
buildFunctionalTestStage("nodejs-active", env.NODEJS_ACTIVE_VERSION, nuxeoVersion)
}
// run functional tests against all nuxeo version for maintenance mode
for (nuxeoVersion in ["10.10", "2021", "2023"]) {
stages["Against Nuxeo ${nuxeoVersion} - Node.js ${NODEJS_MAINTENANCE_VERSION}"] =
Expand Down
4 changes: 4 additions & 0 deletions ci/helm/environments/functional-tests-2025.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
opensearch:
enabled: true
elasticsearch:
enabled: false
27 changes: 24 additions & 3 deletions ci/helm/helmfile.yaml.gotmpl
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,18 @@ environments:
mongodb:
image:
tag: "6.0.2"
functional-tests-2025:
values:
- environments/functional-tests-2025.yaml
- nuxeo:
image:
tag: {{ env "NUXEO_VERSION" | default "2025.x" | quote }}
opensearch:
image:
tag: "1.3.19"
mongodb:
image:
tag: "8.0.3"
---
repositories:
- name: bitnami
Expand All @@ -58,7 +70,7 @@ releases:
chart: nuxeo/nuxeo
version: ~3.1.0
needs:
- {{ eq .Environment.Name "functional-tests-2023" | ternary "opensearch" "elasticsearch" }}
- {{ any (eq .Environment.Name "functional-tests-2023") (eq .Environment.Name "functional-tests-2025") | ternary "opensearch" "elasticsearch" }}
- "mongodb"
values:
- values/values-nuxeo.yaml.gotmpl
Expand Down Expand Up @@ -111,10 +123,19 @@ releases:
{{ end }}
{{ if eq .Environment.Name "functional-tests-2023" }}
- name: mongodb
chart: bitnami/mongodb
chart: oci://registry-1.docker.io/bitnamicharts/mongodb
version: 13.3.1
values:
- values/values-mongodb-6.yaml.gotmpl
- values/values-mongodb.yaml.gotmpl
- values/values-mongodb-commons.yaml.gotmpl
- values/values-tolerations.yaml.gotmpl
{{ end }}
{{ if eq .Environment.Name "functional-tests-2025" }}
- name: mongodb
chart: oci://registry-1.docker.io/bitnamicharts/mongodb
version: 16.1.1
values:
- values/values-mongodb.yaml.gotmpl
- values/values-mongodb-commons.yaml.gotmpl
- values/values-tolerations.yaml.gotmpl
{{ end }}
22 changes: 21 additions & 1 deletion ci/helm/values/values-nuxeo.yaml.gotmpl
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,29 @@ ingress:
- {{ requiredEnv "NUXEO_DOMAIN" }}
secretName: platform-cluster-tls
{{- end }}
customProperties:
dev: |
org.nuxeo.dev=true
org.nuxeo.rest.stack.enable=true
{{- if hasPrefix "10.10" .Values.nuxeo.image.tag }}
{{/* this value is lost for 10.10 */}}
customProperties:
elasticsearch: |
elasticsearch.client=RestClient
{{- end }}
{{- if hasPrefix "2025" .Values.nuxeo.image.tag }}
default: |
nuxeo.append.templates.default=default
{{- end }}
{{- if hasPrefix "2025" .Values.nuxeo.image.tag }}
customEnvs:
- name: NUXEO_CONNECT_URL
value: https://nos-preprod-connect.nuxeocloud.com/nuxeo/site/
- name: NUXEO_CLID
valueFrom:
secretKeyRef:
name: instance-clid-preprod
key: instance.clid
packages: nuxeo-audit-opensearch1
{{- end }}
startupProbe:
initialDelaySeconds: 90
19 changes: 11 additions & 8 deletions lib/operation.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,19 +108,22 @@ class Operation extends Base {
*/
execute(opts = {}) {
const options = this._computeOptions(opts);
options.headers = options.headers || {};
options.headers['Content-Type'] = this._computeContentTypeHeader(this._automationParams.input);
const body = this._computeRequestBody();
const headers = this._computeRequestHeaders(body);
const url = this._computeRequestURL();
let finalOptions = {
body,
headers,
url,
method: 'POST',
url: this._computeRequestURL(),
body: this._computeRequestBody(),
};
finalOptions = extend(true, finalOptions, options);
return this._nuxeo.http(finalOptions);
}

_computeContentTypeHeader(input) {
return this._isMultipartInput(input) ? 'multipart/form-data' : 'application/json';
_computeRequestHeaders(body) {
const contentType = body instanceof FormData ? body.getHeaders()['content-type'] : 'application/json';
return { 'Content-Type': contentType };
}

_computeRequestURL() {
Expand Down Expand Up @@ -167,7 +170,7 @@ class Operation extends Base {
context: this._automationParams.context,
};
const form = new FormData();
form.append('params', JSON.stringify(automationParams));
form.append('params', JSON.stringify(automationParams), { contentType: 'application/json' });

let inputIndex = 0;
for (const blob of input) {
Expand All @@ -186,7 +189,7 @@ class Operation extends Base {
context: this._automationParams.context,
};
const form = new FormData();
form.append('params', JSON.stringify(automationParams));
form.append('params', JSON.stringify(automationParams), { contentType: 'application/json' });
form.append('input', input.content, input.name);
return form;
}
Expand Down