diff --git a/.github/workflows/cd-pipeline.yaml b/.github/workflows/cd-pipeline.yaml
index a9ad94ce78..4dcb6ac503 100644
--- a/.github/workflows/cd-pipeline.yaml
+++ b/.github/workflows/cd-pipeline.yaml
@@ -44,6 +44,7 @@ on: # rebuild any PRs and main branch changes
- 'bitnami/odoo/**'
- 'bitnami/opencart/**'
- 'bitnami/owncloud/**'
+ - 'bitnami/parse/**'
- 'bitnami/phpbb/**'
- 'bitnami/phpmyadmin/**'
- 'bitnami/pinniped/**'
diff --git a/.vib/parse/cypress/cypress.json b/.vib/parse/cypress/cypress.json
new file mode 100644
index 0000000000..b42e01729a
--- /dev/null
+++ b/.vib/parse/cypress/cypress.json
@@ -0,0 +1,7 @@
+{
+ "baseUrl": "http://localhost",
+ "env": {
+ "appId": "testApp",
+ "masterKey": "M4ster#K3y"
+ }
+}
diff --git a/.vib/parse/cypress/cypress/fixtures/high_score_stats.json b/.vib/parse/cypress/cypress/fixtures/high_score_stats.json
new file mode 100644
index 0000000000..f064b5b3b5
--- /dev/null
+++ b/.vib/parse/cypress/cypress/fixtures/high_score_stats.json
@@ -0,0 +1,4 @@
+{
+ "playerName": "CharliP",
+ "score": "1997"
+}
diff --git a/.vib/parse/cypress/cypress/integration/parse_spec.js b/.vib/parse/cypress/cypress/integration/parse_spec.js
new file mode 100644
index 0000000000..dbe142958a
--- /dev/null
+++ b/.vib/parse/cypress/cypress/integration/parse_spec.js
@@ -0,0 +1,30 @@
+///
+import { random } from '../support/utils';
+import highScoreStats from '../fixtures/high_score_stats.json';
+
+it('allows store and retrieve a new object', () => {
+ const NEW_CLASS_NAME = `BitnamiClass${random}`;
+ const AUTH_HEADERS = {
+ 'X-Parse-Application-Id': Cypress.env('appId'),
+ 'X-Parse-Master-Key': Cypress.env('masterKey'),
+ };
+
+ cy.request({
+ method: 'POST',
+ url: `/parse/classes/${NEW_CLASS_NAME}`,
+ headers: AUTH_HEADERS,
+ body: highScoreStats,
+ }).then((response) => {
+ expect(response.status).to.eq(201);
+ expect(response.body).to.include.keys(['objectId']);
+
+ cy.request({
+ method: 'GET',
+ url: `/parse/classes/${NEW_CLASS_NAME}/${response.body.objectId}`,
+ headers: AUTH_HEADERS,
+ }).then((response) => {
+ expect(response.status).to.eq(200);
+ expect(response.body).to.contain(highScoreStats);
+ });
+ });
+});
diff --git a/.vib/parse/cypress/cypress/support/utils.js b/.vib/parse/cypress/cypress/support/utils.js
new file mode 100644
index 0000000000..f0217c9773
--- /dev/null
+++ b/.vib/parse/cypress/cypress/support/utils.js
@@ -0,0 +1,3 @@
+///
+
+export let random = (Math.random() + 1).toString(36).substring(7);
diff --git a/.vib/parse/goss/dashboard/goss.yaml b/.vib/parse/goss/dashboard/goss.yaml
new file mode 100644
index 0000000000..d755aa5d8b
--- /dev/null
+++ b/.vib/parse/goss/dashboard/goss.yaml
@@ -0,0 +1,25 @@
+file:
+ /bitnami/parse-dashboard:
+ exists: true
+ filetype: directory
+ mode: "2777"
+ owner: root
+ /opt/bitnami/parse-dashboard/config.json:
+ exists: true
+ filetype: file
+ mode: "0644"
+ contains:
+ - /masterKey.*{{ .Vars.server.masterKey }}/
+ - /user.*{{ .Vars.dashboard.username }}/
+ - /pass.*{{ .Vars.dashboard.password }}/
+ /var/run/secrets/kubernetes.io/serviceaccount:
+ exists: {{ .Vars.serviceAccount.automountServiceAccountToken }}
+ filetype: directory
+ mode: "3777"
+command:
+ check-user-info:
+ exec: id
+ exit-status: 0
+ stdout:
+ - uid={{ .Vars.dashboard.containerSecurityContext.runAsUser }}
+ - /groups=.*{{ .Vars.dashboard.podSecurityContext.fsGroup }}/
diff --git a/.vib/parse/goss/dashboard/vars.yaml b/.vib/parse/goss/dashboard/vars.yaml
new file mode 100644
index 0000000000..52a469d135
--- /dev/null
+++ b/.vib/parse/goss/dashboard/vars.yaml
@@ -0,0 +1,11 @@
+server:
+ masterKey: "M4ster#K3y"
+dashboard:
+ podSecurityContext:
+ fsGroup: 1002
+ containerSecurityContext:
+ runAsUser: 1002
+ username: parseUser
+ password: "ComplicatedPassword123!4"
+serviceAccount:
+ automountServiceAccountToken: true
\ No newline at end of file
diff --git a/.vib/parse/goss/server/goss.yaml b/.vib/parse/goss/server/goss.yaml
new file mode 100644
index 0000000000..ff504c7860
--- /dev/null
+++ b/.vib/parse/goss/server/goss.yaml
@@ -0,0 +1,24 @@
+file:
+ /bitnami/parse:
+ exists: true
+ filetype: directory
+ mode: "2775"
+ owner: root
+ /opt/bitnami/parse/config.json:
+ exists: true
+ filetype: file
+ mode: "0644"
+ contains:
+ - /port.*{{ .Vars.server.containerPorts.http }}/
+ - /database.*{{ .Vars.mongodb.auth.username }}.*{{ .Vars.mongodb.auth.password }}.*{{ .Vars.mongodb.auth.database }}/
+ /var/run/secrets/kubernetes.io/serviceaccount:
+ exists: {{ .Vars.serviceAccount.automountServiceAccountToken }}
+ filetype: directory
+ mode: "3777"
+command:
+ check-user-info:
+ exec: id
+ exit-status: 0
+ stdout:
+ - uid={{ .Vars.server.containerSecurityContext.runAsUser }}
+ - /groups=.*{{ .Vars.server.podSecurityContext.fsGroup }}/
\ No newline at end of file
diff --git a/.vib/parse/goss/server/vars.yaml b/.vib/parse/goss/server/vars.yaml
new file mode 100644
index 0000000000..80684f21ed
--- /dev/null
+++ b/.vib/parse/goss/server/vars.yaml
@@ -0,0 +1,14 @@
+server:
+ containerPorts:
+ http: 1338
+ podSecurityContext:
+ fsGroup: 1002
+ containerSecurityContext:
+ runAsUser: 1002
+serviceAccount:
+ automountServiceAccountToken: true
+mongodb:
+ auth:
+ username: bn_test_parse
+ password: "M0ngoP4ss"
+ database: bitnami_parse
diff --git a/.vib/parse/vib-publish.json b/.vib/parse/vib-publish.json
index c5099a0e50..c23382176a 100644
--- a/.vib/parse/vib-publish.json
+++ b/.vib/parse/vib-publish.json
@@ -22,7 +22,7 @@
"url": "{SHA_ARCHIVE}",
"path": "/bitnami/parse"
},
- "runtime_parameters": "InNlcnZlciI6CiAgInNlcnZpY2UiOgogICAgInBvcnRzIjoKICAgICAgImh0dHAiOiA4MAogICJ0eXBlIjogIkxvYWRCYWxhbmNlciIK",
+ "runtime_parameters": "c2VydmVyOgogIGhvc3Q6IHBhcnNlLmxvY2FsCiAgYXBwSWQ6IHRlc3RBcHAKICBtYXN0ZXJLZXk6ICJNNHN0ZXIjSzN5IgogIHNlcnZpY2U6CiAgICB0eXBlOiBMb2FkQmFsYW5jZXIKICAgIHBvcnRzOgogICAgICBodHRwOiA4MAogIGNvbnRhaW5lclBvcnRzOgogICAgaHR0cDogMTMzOAogIHBvZFNlY3VyaXR5Q29udGV4dDoKICAgIGVuYWJsZWQ6IHRydWUKICAgIGZzR3JvdXA6IDEwMDIKICBjb250YWluZXJTZWN1cml0eUNvbnRleHQ6CiAgICBlbmFibGVkOiB0cnVlCiAgICBydW5Bc1VzZXI6IDEwMDIKZGFzaGJvYXJkOgogIGVuYWJsZWQ6IHRydWUKICBjb250YWluZXJQb3J0czoKICAgIGh0dHA6IDQwNDAKICBwb2RTZWN1cml0eUNvbnRleHQ6CiAgICBlbmFibGVkOiB0cnVlCiAgICBmc0dyb3VwOiAxMDAyCiAgY29udGFpbmVyU2VjdXJpdHlDb250ZXh0OgogICAgZW5hYmxlZDogdHJ1ZQogICAgcnVuQXNVc2VyOiAxMDAyCiAgdXNlcm5hbWU6IHBhcnNlVXNlcgogIHBhc3N3b3JkOiAiQ29tcGxpY2F0ZWRQYXNzd29yZDEyMyE0IgogIGFwcE5hbWU6IENoaWNrZW5HYW1lCiAgc2VydmljZToKICAgIHR5cGU6IExvYWRCYWxhbmNlcgogICAgcG9ydHM6CiAgICAgIGh0dHA6IDgwCnNlcnZpY2VBY2NvdW50OgogIGNyZWF0ZTogdHJ1ZQogIGF1dG9tb3VudFNlcnZpY2VBY2NvdW50VG9rZW46IHRydWUKbW9uZ29kYjoKICBlbmFibGVkOiB0cnVlCiAgYXV0aDogCiAgICBlbmFibGVkOiB0cnVlCiAgICB1c2VybmFtZTogYm5fdGVzdF9wYXJzZQogICAgcGFzc3dvcmQ6ICJNMG5nb1A0c3MiCiAgICBkYXRhYmFzZTogYml0bmFtaV9wYXJzZQo=",
"target_platform": {
"target_platform_id": "{VIB_ENV_TARGET_PLATFORM}",
"size": {
@@ -34,7 +34,45 @@
{
"action_id": "health-check",
"params": {
- "endpoint": "lb-parse-http-server"
+ "endpoint": "lb-parse-dasboard-http-dashboard"
+ }
+ },
+ {
+ "action_id": "goss",
+ "params": {
+ "resources": {
+ "path": "/.vib/parse/goss/server"
+ },
+ "remote": {
+ "workload": "deploy-parse-server"
+ },
+ "vars_file": "vars.yaml"
+ }
+ },
+ {
+ "action_id": "goss",
+ "params": {
+ "resources": {
+ "path": "/.vib/parse/goss/dashboard"
+ },
+ "remote": {
+ "workload": "deploy-parse-dashboard"
+ },
+ "vars_file": "vars.yaml"
+ }
+ },
+ {
+ "action_id": "cypress",
+ "params": {
+ "resources": {
+ "path": "/.vib/parse/cypress"
+ },
+ "endpoint": "lb-parse-http-server",
+ "app_protocol": "HTTP",
+ "env": {
+ "appId": "testApp",
+ "masterKey": "M4ster#K3y"
+ }
}
}
]
diff --git a/.vib/parse/vib-verify.json b/.vib/parse/vib-verify.json
index 11183f319f..40154a0dc3 100644
--- a/.vib/parse/vib-verify.json
+++ b/.vib/parse/vib-verify.json
@@ -22,7 +22,7 @@
"url": "{SHA_ARCHIVE}",
"path": "/bitnami/parse"
},
- "runtime_parameters": "InNlcnZlciI6CiAgInNlcnZpY2UiOgogICAgInBvcnRzIjoKICAgICAgImh0dHAiOiA4MAogICJ0eXBlIjogIkxvYWRCYWxhbmNlciIK",
+ "runtime_parameters": "c2VydmVyOgogIGhvc3Q6IHBhcnNlLmxvY2FsCiAgYXBwSWQ6IHRlc3RBcHAKICBtYXN0ZXJLZXk6ICJNNHN0ZXIjSzN5IgogIHNlcnZpY2U6CiAgICB0eXBlOiBMb2FkQmFsYW5jZXIKICAgIHBvcnRzOgogICAgICBodHRwOiA4MAogIGNvbnRhaW5lclBvcnRzOgogICAgaHR0cDogMTMzOAogIHBvZFNlY3VyaXR5Q29udGV4dDoKICAgIGVuYWJsZWQ6IHRydWUKICAgIGZzR3JvdXA6IDEwMDIKICBjb250YWluZXJTZWN1cml0eUNvbnRleHQ6CiAgICBlbmFibGVkOiB0cnVlCiAgICBydW5Bc1VzZXI6IDEwMDIKZGFzaGJvYXJkOgogIGVuYWJsZWQ6IHRydWUKICBjb250YWluZXJQb3J0czoKICAgIGh0dHA6IDQwNDAKICBwb2RTZWN1cml0eUNvbnRleHQ6CiAgICBlbmFibGVkOiB0cnVlCiAgICBmc0dyb3VwOiAxMDAyCiAgY29udGFpbmVyU2VjdXJpdHlDb250ZXh0OgogICAgZW5hYmxlZDogdHJ1ZQogICAgcnVuQXNVc2VyOiAxMDAyCiAgdXNlcm5hbWU6IHBhcnNlVXNlcgogIHBhc3N3b3JkOiAiQ29tcGxpY2F0ZWRQYXNzd29yZDEyMyE0IgogIGFwcE5hbWU6IENoaWNrZW5HYW1lCiAgc2VydmljZToKICAgIHR5cGU6IExvYWRCYWxhbmNlcgogICAgcG9ydHM6CiAgICAgIGh0dHA6IDgwCnNlcnZpY2VBY2NvdW50OgogIGNyZWF0ZTogdHJ1ZQogIGF1dG9tb3VudFNlcnZpY2VBY2NvdW50VG9rZW46IHRydWUKbW9uZ29kYjoKICBlbmFibGVkOiB0cnVlCiAgYXV0aDogCiAgICBlbmFibGVkOiB0cnVlCiAgICB1c2VybmFtZTogYm5fdGVzdF9wYXJzZQogICAgcGFzc3dvcmQ6ICJNMG5nb1A0c3MiCiAgICBkYXRhYmFzZTogYml0bmFtaV9wYXJzZQo=",
"target_platform": {
"target_platform_id": "{VIB_ENV_TARGET_PLATFORM}",
"size": {
@@ -34,7 +34,45 @@
{
"action_id": "health-check",
"params": {
- "endpoint": "lb-parse-http-server"
+ "endpoint": "lb-parse-dashboard-http-dashboard"
+ }
+ },
+ {
+ "action_id": "goss",
+ "params": {
+ "resources": {
+ "path": "/.vib/parse/goss/server"
+ },
+ "remote": {
+ "workload": "deploy-parse-server"
+ },
+ "vars_file": "vars.yaml"
+ }
+ },
+ {
+ "action_id": "goss",
+ "params": {
+ "resources": {
+ "path": "/.vib/parse/goss/dashboard"
+ },
+ "remote": {
+ "workload": "deploy-parse-dashboard"
+ },
+ "vars_file": "vars.yaml"
+ }
+ },
+ {
+ "action_id": "cypress",
+ "params": {
+ "resources": {
+ "path": "/.vib/parse/cypress"
+ },
+ "endpoint": "lb-parse-http-server",
+ "app_protocol": "HTTP",
+ "env": {
+ "appId": "testApp",
+ "masterKey": "M4ster#K3y"
+ }
}
}
]