add files for ci

This commit is contained in:
Girish Ramakrishnan
2024-10-15 16:09:15 +02:00
parent 7976cc122d
commit b255387cde
2 changed files with 25 additions and 23 deletions

5
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,5 @@
include:
- project: devops/pipeline-components
ref: main
file: cloudron-app.gitlab-ci.yml

View File

@@ -1,11 +1,7 @@
#!/usr/bin/env node #!/usr/bin/env node
/* jshint esversion: 8 */ /* jshint esversion: 8 */
/* global it:false */ /* global it, xit, describe, before, after, afterEach */
/* global xit:false */
/* global describe:false */
/* global before:false */
/* global after:false */
'use strict'; 'use strict';
@@ -13,11 +9,11 @@ require('chromedriver');
const execSync = require('child_process').execSync, const execSync = require('child_process').execSync,
expect = require('expect.js'), expect = require('expect.js'),
fs = require('fs'),
path = require('path'), path = require('path'),
{ Builder, By, Key, until } = require('selenium-webdriver'), { Builder, By, Key, until } = require('selenium-webdriver'),
{ Options } = require('selenium-webdriver/chrome'); { Options } = require('selenium-webdriver/chrome');
if (!process.env.USERNAME || !process.env.PASSWORD) { if (!process.env.USERNAME || !process.env.PASSWORD) {
console.log('USERNAME and PASSWORD env vars need to be set'); console.log('USERNAME and PASSWORD env vars need to be set');
process.exit(1); process.exit(1);
@@ -27,7 +23,7 @@ describe('Application life cycle test', function () {
this.timeout(0); this.timeout(0);
const ELEMENT_LOCATION = 'element-test'; const ELEMENT_LOCATION = 'element-test';
const LOCATION = 'test'; const LOCATION = process.env.LOCATION || 'test';
const TEST_TIMEOUT = parseInt(process.env.TIMEOUT, 10) || 10000; const TEST_TIMEOUT = parseInt(process.env.TIMEOUT, 10) || 10000;
const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }; const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
const USERNAME = process.env.USERNAME; const USERNAME = process.env.USERNAME;
@@ -40,19 +36,26 @@ describe('Application life cycle test', function () {
let athenticated_by_oidc = false; let athenticated_by_oidc = false;
before(function () { before(function () {
const options = new Options().windowSize({ width: 1280, height: 1024 }); const chromeOptions = new Options().windowSize({ width: 1280, height: 1024 });
if (process.env.HEADLESS) options.addArguments('headless'); if (process.env.CI) chromeOptions.addArguments('no-sandbox', 'disable-dev-shm-usage', 'headless');
browser = new Builder().forBrowser('chrome').setChromeOptions(chromeOptions).build();
browser = new Builder().forBrowser('chrome').setChromeOptions(options).build(); if (!fs.existsSync('./screenshots')) fs.mkdirSync('./screenshots');
}); });
after(function () { after(function () {
browser.quit(); browser.quit();
}); });
function sleep(millis) { afterEach(async function () {
return new Promise(resolve => setTimeout(resolve, millis)); if (!process.env.CI || !app) return;
}
const currentUrl = await browser.getCurrentUrl();
if (!currentUrl.includes(app.domain)) return;
expect(this.currentTest.title).to.be.a('string');
const screenshotData = await browser.takeScreenshot();
fs.writeFileSync(`./screenshots/${new Date().getTime()}-${this.currentTest.title.replaceAll(' ', '_')}.png`, screenshotData, 'base64');
});
async function waitForElement(elem) { async function waitForElement(elem) {
await browser.wait(until.elementLocated(elem), TEST_TIMEOUT); await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
@@ -80,7 +83,7 @@ describe('Application life cycle test', function () {
execSync(`cloudron exec --app ${ELEMENT_LOCATION} -- bash -c "jq '.default_server_config[\\"m.homeserver\\"].base_url = \\"https://${app.fqdn}\\"' /app/data/config.json | sponge /app/data/config.json"`); execSync(`cloudron exec --app ${ELEMENT_LOCATION} -- bash -c "jq '.default_server_config[\\"m.homeserver\\"].base_url = \\"https://${app.fqdn}\\"' /app/data/config.json | sponge /app/data/config.json"`);
execSync(`cloudron restart --app ${ELEMENT_LOCATION}`); execSync(`cloudron restart --app ${ELEMENT_LOCATION}`);
// wait when all services are up and running // wait when all services are up and running
await sleep(15000); await browser.sleep(15000);
} }
async function checkLandingPage() { async function checkLandingPage() {
@@ -130,10 +133,6 @@ describe('Application life cycle test', function () {
await browser.findElement(By.xpath('//a[contains(., "Continue")]')).click(); await browser.findElement(By.xpath('//a[contains(., "Continue")]')).click();
await browser.sleep(2000); await browser.sleep(2000);
//if (await browser.findElements(By.xpath('//div[@aria-label="Skip verification for now"]')).then(found => !!found.length)) {
// await skipVerification();
//}
if (await browser.findElements(By.xpath('//div[text()="Proceed with reset"]')).then(found => !!found.length)) { if (await browser.findElements(By.xpath('//div[text()="Proceed with reset"]')).then(found => !!found.length)) {
await browser.findElement(By.xpath('//div[text()="Proceed with reset"]')).click(); await browser.findElement(By.xpath('//div[text()="Proceed with reset"]')).click();
@@ -323,8 +322,7 @@ describe('Application life cycle test', function () {
execSync(`cloudron configure --location ${LOCATION}2`, EXEC_ARGS); execSync(`cloudron configure --location ${LOCATION}2`, EXEC_ARGS);
getAppInfo(); getAppInfo();
// wait when all services are up and running await browser.sleep(15000);
await sleep(15000);
}); });
it('update element-app config', updateSynapseConfig); it('update element-app config', updateSynapseConfig);
@@ -361,8 +359,7 @@ describe('Application life cycle test', function () {
it('can update', async function () { it('can update', async function () {
await browser.get('about:blank'); await browser.get('about:blank');
execSync(`cloudron update --app ${app.id}`, EXEC_ARGS); execSync(`cloudron update --app ${app.id}`, EXEC_ARGS);
// wait when all services are up and running await browser.sleep(15000);
await sleep(15000);
}); });
it('can get Element app info', getElementAppInfo); it('can get Element app info', getElementAppInfo);