1
0
mirror of https://git.cloudron.io/cloudron/gitea-app synced 2025-09-25 22:47:24 +00:00

Compare commits

..

18 Commits

Author SHA1 Message Date
Dennis Schwerdel
355ee698dc Using crudini for configuration merging 2017-08-09 07:06:23 +02:00
dswd
b8b3abfbfc Merge branch 'update_to_1.1.3' into 'master'
Update to 1.1.3

See merge request !3
2017-08-09 04:57:48 +00:00
Girish Ramakrishnan
3970139ea7 Add --wait for configure 2017-08-08 14:53:40 -07:00
Girish Ramakrishnan
9b4fb46cf3 Version 1.0.0 2017-08-08 14:53:22 -07:00
Girish Ramakrishnan
4357f4b3b9 Update to version 1.1.3 2017-08-07 11:22:40 -07:00
Girish Ramakrishnan
821c13e7eb restart requires --wait now 2017-08-07 11:22:40 -07:00
Girish Ramakrishnan
a03fb92253 Add update test 2017-08-07 11:22:40 -07:00
Dennis Schwerdel
c636d1dd87 Updated to 1.1.2 2017-06-12 13:13:49 +02:00
Dennis Schwerdel
5ecde5c49b Version 0.1.2 2017-06-03 00:17:19 +02:00
dswd
47a9de45c9 Merge branch 'fix_tests' into 'master'
Fix tests

See merge request !2
2017-06-02 22:15:50 +00:00
dswd
cc112ff9bb Merge branch 'description' into 'master'
Description

See merge request !1
2017-06-02 22:15:20 +00:00
Girish Ramakrishnan
8b7ec669bc restart now requires wait 2017-06-02 14:58:13 -07:00
Girish Ramakrishnan
6ab83644d7 TIMEOUT must be a number 2017-06-02 14:58:07 -07:00
Girish Ramakrishnan
5827bf87a7 Use promises correctly in tests 2017-06-02 14:58:02 -07:00
Girish Ramakrishnan
b4156a8192 Replace media links with cloudron CDN links 2017-06-02 14:08:01 -07:00
Girish Ramakrishnan
f89a2ab8d4 Update description 2017-06-02 13:58:45 -07:00
Dennis Schwerdel
5522fc9398 Version 0.1.1 2017-06-02 17:55:05 +02:00
Dennis Schwerdel
240716671d Removed last reference to Gogs 2017-06-02 17:52:03 +02:00
8 changed files with 239 additions and 162 deletions

View File

@@ -1,3 +1,15 @@
[0.1.0]
* Initial package (forked from Gogs app)
[0.1.1]
* Removed reference to Gogs
[0.1.2]
* Updated description
[0.1.3]
* Updated to version 1.1.2
[1.0.0]
* Update to version 1.1.3

View File

@@ -4,7 +4,7 @@
"author": "Gitea developers",
"description": "file://DESCRIPTION.md",
"tagline": "A painless self-hosted Git Service",
"version": "0.1.0",
"version": "1.0.0",
"healthCheckPath": "/healthcheck",
"httpPort": 3000,
"addons": {
@@ -25,15 +25,11 @@
"contactEmail": "apps@cloudron.io",
"icon": "file://logo.png",
"mediaLinks": [
"https://i.imgur.com/3iEQsux.jpg",
"https://i.imgur.com/glqFnj8.jpg",
"https://i.imgur.com/ad1FEpi.jpg",
"https://i.imgur.com/q81EcGa.jpg",
"https://i.imgur.com/L2CQeN0.jpg",
"https://i.imgur.com/cNuvMum.jpg",
"https://i.imgur.com/xCYRqaF.jpg",
"https://i.imgur.com/ILpRBCe.jpg",
"https://i.imgur.com/0BHnrcL.jpg"
"https://s3.amazonaws.com/cloudron-app-screenshots/io.gitea.cloudronapp/f89a2ab8d49094c80589f69a2d60bef63b2dbb62/1.png",
"https://s3.amazonaws.com/cloudron-app-screenshots/io.gitea.cloudronapp/f89a2ab8d49094c80589f69a2d60bef63b2dbb62/2.png",
"https://s3.amazonaws.com/cloudron-app-screenshots/io.gitea.cloudronapp/f89a2ab8d49094c80589f69a2d60bef63b2dbb62/3.png",
"https://s3.amazonaws.com/cloudron-app-screenshots/io.gitea.cloudronapp/f89a2ab8d49094c80589f69a2d60bef63b2dbb62/4.png",
"https://s3.amazonaws.com/cloudron-app-screenshots/io.gitea.cloudronapp/f89a2ab8d49094c80589f69a2d60bef63b2dbb62/5.png"
],
"tags": [ "version control", "git", "code hosting", "development" ],
"changelog": "file://CHANGELOG",

View File

@@ -1,6 +1,6 @@
Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket or Gitlab. The initial development have been done on Gogs but we have forked it and named it Gitea. If you want to read more about the reasons why we have done that please read this blog post.
Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket or Gitlab. The initial development have been done on Gogs but we have forked it and named it Gitea. If you want to read more about the reasons why we have done that please read [this](https://blog.gitea.io/2016/12/welcome-to-gitea/) blog post.
This app packages Gogs <upstream>1.1.1</upstream>
This app packages Gitea <upstream>1.1.3</upstream>
### Purpose
@@ -20,9 +20,7 @@ The goal of this project is to make the easiest, fastest, and most painless way
- Gravatar and custom source
- Mail service
- Administration panel
- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb) (experimental)
- Multi-language support ([15 languages](https://crowdin.com/project/gogs))
### Bug reports
Open bugs on [Github](https://git.cloudron.io/dswd/gitea-app/issues)
Open bugs on [Github](https://git.cloudron.io/cloudron/gitea-app/issues)

View File

@@ -1,6 +1,6 @@
FROM cloudron/base:0.10.0
ENV VERSION 1.1.1
ENV VERSION 1.1.3
RUN apt-get update && \
apt-get install -y openssh-server && \

View File

@@ -6,7 +6,7 @@ If you want to disable Cloudron SSO, do the following:
* Admin Panel -> Authentication -> 'cloudron' -> Uncheck 'This authentication is activated'
* Admin Panel -> Users -> Change Authentication Source to 'Local' and also give a password
You can create a `/app/data/app.ini` with any custom configuration. See the
You can edit `/app/data/app.ini` and add any custom configuration. See the
[configuration cheat sheet](https://docs.gitea.io/en-us/config-cheat-sheet)
for more information.

View File

@@ -2,7 +2,9 @@ APP_NAME = Gitea
RUN_USER = git
RUN_MODE = prod
[database]
; those settings are protected and can't be modified
DB_TYPE = mysql
HOST = ##MYSQL_HOST:##MYSQL_PORT
NAME = ##MYSQL_DATABASE
@@ -11,7 +13,9 @@ PASSWD = ##MYSQL_PASSWORD
SSL_MODE = disable
PATH =
[server]
; those settings are protected and can't be modified
PROTOCOL = http
DOMAIN = ##DOMAIN
ROOT_URL = https://%(DOMAIN)s/
@@ -20,55 +24,74 @@ HTTP_PORT = 3000
DISABLE_SSH = ##DISABLE_SSH
SSH_PORT = ##SSH_PORT
APP_DATA_PATH = /app/data/appdata
; Landing page for non-logged users, can be "home" or "explore"
LANDING_PAGE = explore
[repository]
; this setting is protected and can't be modified
ROOT = /app/data/repository
SCRIPT_TYPE = bash
[repository.upload]
ENABLED = true
; this setting is protected and can't be modified
TEMP_PATH = /run/gitea/tmp/uploads
[release.attachment]
ENABLED = true
; APP_DATA_PATH/attachments
PATH =
[mailer]
ENABLED = true
; those settings are protected and can't be modified
HOST = ##MAIL_SERVER:##MAIL_PORT
USER = ##MAIL_SMTP_USERNAME
PASSWD = ##MAIL_SMTP_PASSWORD
FROM = ##MAIL_FROM
SKIP_VERIFY = true
[security]
; those settings are protected and can't be modified
INSTALL_LOCK = true
SECRET_KEY = ##SECRET_KEY
[service]
DISABLE_REGISTRATION = false
SHOW_REGISTRATION_BUTTON = false
ENABLE_NOTIFY_MAIL = true
[log]
; Either "console", "file", "conn", "smtp" or "database", default is "console"
; those settings are protected and can't be modified
MODE = console
; used for xorm.log
ROOT_PATH = /run/gitea
[picture]
; APP_DATA_PATH/avatars
AVATAR_UPLOAD_PATH =
GRAVATAR_SOURCE = gravatar
DISABLE_GRAVATAR = false
[attachment]
ENABLE = true
; APP_DATA_PATH/attachments
PATH =
[indexer]
; this setting is protected and can't be modified
ISSUE_INDEXER_PATH = /app/data/appdata/indexers/issues.bleve

View File

@@ -55,24 +55,44 @@ sed -e "s/^Port .*/Port ${SSH_PORT}/" \
-e "s,^HostKey /etc/ssh/,HostKey /app/data/sshd/," \
/etc/ssh/sshd_config > /run/gitea/sshd_config
sed -e "s/##DOMAIN/${APP_DOMAIN}/g" \
-e "s/##SSH_PORT/${SSH_PORT}/g" \
-e "s/##DISABLE_SSH/${disable_ssh}/g" \
-e "s/##MYSQL_HOST/${MYSQL_HOST}/g" \
-e "s/##MYSQL_PORT/${MYSQL_PORT}/g" \
-e "s/##MYSQL_USERNAME/${MYSQL_USERNAME}/g" \
-e "s/##MYSQL_PASSWORD/${MYSQL_PASSWORD}/g" \
-e "s/##MYSQL_DATABASE/${MYSQL_DATABASE}/g" \
-e "s/##MAIL_SERVER/${MAIL_SMTP_SERVER}/g" \
-e "s/##MAIL_PORT/${MAIL_SMTP_PORT}/g" \
-e "s/##MAIL_FROM/${MAIL_FROM}/g" \
-e "s/##MAIL_SMTP_USERNAME/${MAIL_SMTP_USERNAME}/g" \
-e "s/##MAIL_SMTP_PASSWORD/${MAIL_SMTP_PASSWORD}/g" \
-e "s/##SECRET_KEY/$(pwgen -1 -s)/g" \
/home/git/app.ini.template > "/run/gitea/app.ini"
cp /home/git/app.ini.template "/run/gitea/app.ini"
# create default user config file
if ! [ -f /app/data/app.ini ]; then
cp /home/git/app.ini.template /app/data/app.ini
fi
# merge user config file
crudini --merge "/run/gitea/app.ini" < "/app/data/app.ini"
# override important values
crudini --set "/run/gitea/app.ini" database DB_TYPE mysql
crudini --set "/run/gitea/app.ini" database HOST "${MYSQL_HOST}:${MYSQL_PORT}"
crudini --set "/run/gitea/app.ini" database NAME "${MYSQL_DATABASE}"
crudini --set "/run/gitea/app.ini" database USER "${MYSQL_USERNAME}"
crudini --set "/run/gitea/app.ini" database PASSWD "${MYSQL_PASSWORD}"
crudini --set "/run/gitea/app.ini" database SSL_MODE "disable"
crudini --set "/run/gitea/app.ini" server PROTOCOL "http"
crudini --set "/run/gitea/app.ini" server DOMAIN "${APP_DOMAIN}"
crudini --set "/run/gitea/app.ini" server ROOT_URL "https://%(DOMAIN)s/"
crudini --set "/run/gitea/app.ini" server HTTP_ADDR ""
crudini --set "/run/gitea/app.ini" server HTTP_PORT "3000"
crudini --set "/run/gitea/app.ini" server DISABLE_SSH "${disable_ssh}"
crudini --set "/run/gitea/app.ini" server SSH_PORT "${SSH_PORT}"
crudini --set "/run/gitea/app.ini" server APP_DATA_PATH "/app/data/appdata"
crudini --set "/run/gitea/app.ini" repository ROOT "/app/data/repository"
crudini --set "/run/gitea/app.ini" repository.upload TEMP_PATH "/run/gitea/tmp/uploads"
crudini --set "/run/gitea/app.ini" mailer HOST "${MAIL_SMTP_SERVER}:${MAIL_SMTP_PORT}"
crudini --set "/run/gitea/app.ini" mailer USER "${MAIL_SMTP_USERNAME}"
crudini --set "/run/gitea/app.ini" mailer PASSWD "${MAIL_SMTP_PASSWORD}"
crudini --set "/run/gitea/app.ini" mailer FROM "${MAIL_FROM}"
crudini --set "/run/gitea/app.ini" mailer SKIP_VERIFY "true"
crudini --set "/run/gitea/app.ini" security SECRET_KEY $(pwgen -1 -s)
crudini --set "/run/gitea/app.ini" security INSTALL_LOCK "true"
crudini --set "/run/gitea/app.ini" log MODE "console"
crudini --set "/run/gitea/app.ini" log ROOT_PATH "/run/gitea"
crudini --set "/run/gitea/app.ini" indexer ISSUE_INDEXER_PATH "/app/data/appdata/indexers/issues.bleve"
# merge any user config file
[[ -f /app/data/app.ini ]] && cat "/app/data/app.ini" >> "/run/gitea/app.ini"
mkdir -p /app/data/repository /app/data/ssh

View File

@@ -33,7 +33,7 @@ describe('Application life cycle test', function () {
var app, reponame = 'testrepo';
var username = process.env.USERNAME;
var password = process.env.PASSWORD;
var TIMEOUT = process.env.TIMEOUT || 5000;
var TIMEOUT = parseInt(process.env.TIMEOUT, 10) || 5000;
var email, token;
before(function (done) {
@@ -63,12 +63,20 @@ describe('Application life cycle test', function () {
}, TIMEOUT).then(function () { done(); });
}
function getAppInfo() {
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
}
function setAvatar(done) {
browser.get('https://' + app.fqdn + '/user/settings/avatar');
browser.findElement(by.xpath('//input[@type="file" and @name="avatar"]')).sendKeys(path.resolve(__dirname, '../logo.png')).then(function () {
browser.findElement(by.xpath('//button[contains(text(), "Update Avatar Setting")]')).click();
browser.get('https://' + app.fqdn + '/user/settings/avatar').then(function () {
return browser.findElement(by.xpath('//input[@type="file" and @name="avatar"]')).sendKeys(path.resolve(__dirname, '../logo.png'));
}).then(function () {
return browser.findElement(by.xpath('//button[contains(text(), "Update Avatar Setting")]')).click();
}).then(function () {
browser.wait(until.elementLocated(by.xpath('//p[contains(text(),"updated successfully")]')), TIMEOUT).then(function () { done(); });
});
}
@@ -82,18 +90,105 @@ describe('Application life cycle test', function () {
}
function editFile(done) {
browser.get('https://' + app.fqdn + '/' + username + '/' + reponame + '/_edit/master/newfile');
var cm = browser.findElement(by.xpath('//div[contains(@class,"CodeMirror")]'));
var text = 'yo';
browser.executeScript('arguments[0].CodeMirror.setValue("' + text + '");', cm).then(function () {
browser.findElement(by.xpath('//input[@name="commit_summary"]')).sendKeys('Dummy edit');
browser.findElement(by.xpath('//button[contains(text(), "Commit Changes")]')).click();
browser.get('https://' + app.fqdn + '/' + username + '/' + reponame + '/_edit/master/newfile').then(function () {
var cm = browser.findElement(by.xpath('//div[contains(@class,"CodeMirror")]'));
var text = 'yo';
return browser.executeScript('arguments[0].CodeMirror.setValue("' + text + '");', cm);
}).then(function () {
return browser.findElement(by.xpath('//input[@name="commit_summary"]')).sendKeys('Dummy edit');
}).then(function () {
return browser.findElement(by.xpath('//button[contains(text(), "Commit Changes")]')).click();
}).then(function () {
waitForUrl('https://' + app.fqdn + '/' + username + '/' + reponame + '/src/master/newfile', done);
});
}
function login(done) {
browser.get('https://' + app.fqdn + '/user/login').then(function () {
return browser.findElement(by.id('user_name')).sendKeys(username);
}).then(function () {
return browser.findElement(by.id('password')).sendKeys(password);
}).then(function () {
return browser.findElement(by.tagName('form')).submit();
}).then(function () {
return browser.wait(until.elementLocated(by.linkText('Dashboard')), TIMEOUT);
}).then(function () {
done();
});
}
function addPublicKey(done) {
var publicKey = fs.readFileSync(__dirname + '/id_rsa.pub', 'utf8');
browser.get('https://' + app.fqdn + '/user/settings/ssh').then(function () {
return browser.findElement(by.xpath('//div[text()="Add Key"]')).click();
}).then(function () {
return browser.findElement(by.id('ssh-key-title')).sendKeys('testkey');
}).then(function () {
return browser.findElement(by.id('ssh-key-content')).sendKeys(publicKey.trim()); // #3480
}).then(function () {
return browser.findElement(by.xpath('//button[contains(text(), "Add Key")]')).click();
}).then(function () {
return browser.wait(until.elementLocated(by.xpath('//p[contains(text(), "added successfully!")]')), TIMEOUT);
}).then(function () {
done();
});
}
function createRepo(done) {
browser.get('https://' + app.fqdn).then(function () {
return browser.findElement(by.linkText('New Repository')).click();
}).then(function () {
return browser.wait(until.elementLocated(by.xpath('//*[contains(text(), "New Repository")]')), TIMEOUT);
}).then(function () {
return browser.findElement(by.id('repo_name')).sendKeys(reponame);
}).then(function () {
return browser.findElement(by.id('auto-init')).click();
}).then(function () {
return browser.findElement(by.xpath('//button[contains(text(), "Create Repository")]')).click();
}).then(function () {
browser.wait(function () {
return browser.getCurrentUrl().then(function (url) {
return url === 'https://' + app.fqdn + '/' + username + '/' + reponame;
});
}, TIMEOUT);
}).then(function () {
done();
});
}
function checkCloneUrl(done) {
browser.get('https://' + app.fqdn + '/' + username + '/' + reponame).then(function () {
return browser.findElement(by.id('repo-clone-ssh')).click();
}).then(function () {
return browser.findElement(by.id('repo-clone-url')).getAttribute('value');
}).then(function (cloneUrl) {
expect(cloneUrl).to.be('ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git');
done();
});
}
function cloneRepo(done) {
rimraf.sync(repodir);
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env });
done();
}
function pushFile(done) {
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('touch newfile && git add newfile && git commit -a -mx && git push ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + ' master',
{ env: env, cwd: repodir });
rimraf.sync('/tmp/testrepo');
done();
}
function fileExists() {
expect(fs.existsSync(repodir + '/newfile')).to.be(true);
}
xit('build app', function () {
execSync('cloudron build', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
@@ -121,19 +216,11 @@ describe('Application life cycle test', function () {
});
});
it('install app', function () {
execSync('cloudron install --new --wait --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can get app information', function () {
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
});
it('can get app information', getAppInfo);
it('can get the main page', function (done) {
superagent.get('https://' + app.fqdn).end(function (error, result) {
expect(error).to.be(null);
@@ -143,82 +230,29 @@ describe('Application life cycle test', function () {
});
});
it('can login', function (done) {
browser.get('https://' + app.fqdn + '/user/login');
browser.findElement(by.id('user_name')).sendKeys(username);
browser.findElement(by.id('password')).sendKeys(password);
browser.findElement(by.tagName('form')).submit();
browser.wait(until.elementLocated(by.linkText('Dashboard')), TIMEOUT).then(function () { done(); });
});
it('can login', login);
it('can set avatar', setAvatar);
it('can get avatar', checkAvatar);
it('can add public key', function (done) {
browser.get('https://' + app.fqdn + '/user/settings/ssh');
var publicKey = fs.readFileSync(__dirname + '/id_rsa.pub', 'utf8');
it('can add public key', addPublicKey);
browser.findElement(by.xpath('//div[text()="Add Key"]')).click();
browser.findElement(by.id('ssh-key-title')).sendKeys('testkey');
browser.findElement(by.id('ssh-key-content')).sendKeys(publicKey.trim()); // #3480
browser.findElement(by.xpath('//button[contains(text(), "Add Key")]')).click();
browser.wait(until.elementLocated(by.xpath('//p[contains(text(), "added successfully!")]')), TIMEOUT).then(function () { done(); });
});
it('can create repo', createRepo);
it('can create repo', function (done) {
browser.get('https://' + app.fqdn);
browser.findElement(by.linkText('New Repository')).click();
browser.wait(until.elementLocated(by.xpath('//*[contains(text(), "New Repository")]')), TIMEOUT);
browser.findElement(by.id('repo_name')).sendKeys(reponame);
browser.findElement(by.id('auto-init')).click();
browser.findElement(by.xpath('//button[contains(text(), "Create Repository")]')).click();
browser.wait(function () {
return browser.getCurrentUrl().then(function (url) {
return url === 'https://' + app.fqdn + '/' + username + '/' + reponame;
});
}, TIMEOUT).then(function () { done(); });
});
it('displays correct clone url', checkCloneUrl);
it('displays correct clone url', function (done) {
browser.get('https://' + app.fqdn + '/' + username + '/' + reponame);
browser.findElement(by.id('repo-clone-ssh')).click();
browser.findElement(by.id('repo-clone-url')).getAttribute('value').then(function (cloneUrl) {
expect(cloneUrl).to.be('ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git');
done();
});
});
it('can clone the url', function (done) {
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env });
done();
});
it('can add and push a file', function (done) {
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('touch newfile && git add newfile && git commit -a -mx && git push ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + ' master',
{ env: env, cwd: repodir });
rimraf.sync('/tmp/testrepo');
done();
});
it('can clone the url', cloneRepo);
it('can add and push a file', pushFile);
it('can edit file', editFile);
it('can restart app', function (done) {
execSync('cloudron restart');
execSync('cloudron restart --wait');
done();
});
it('can clone the url', function (done) {
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env });
expect(fs.existsSync(repodir + '/newfile')).to.be(true);
rimraf.sync(repodir);
done();
});
it('can clone the url', checkCloneUrl);
it('can clone the url', cloneRepo);
it('file exists in repo', fileExists);
it('backup app', function () {
execSync('cloudron backup create --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
@@ -229,51 +263,22 @@ describe('Application life cycle test', function () {
});
it('can get avatar', checkAvatar);
it('can clone the url', function (done) {
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env });
expect(fs.existsSync(repodir + '/newfile')).to.be(true);
rimraf.sync(repodir);
done();
});
it('can clone the url', cloneRepo);
it('file exists in repo', function () { expect(fs.existsSync(repodir + '/newfile')).to.be(true); });
it('move to different location', function () {
browser.manage().deleteAllCookies();
execSync('cloudron configure --location ' + LOCATION + '2', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
execSync('cloudron configure --wait --location ' + LOCATION + '2', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION + '2'; })[0];
expect(app).to.be.an('object');
});
it('can login', function (done) {
browser.get('https://' + app.fqdn + '/user/login');
browser.findElement(by.id('user_name')).sendKeys(username);
browser.findElement(by.id('password')).sendKeys(password);
browser.findElement(by.tagName('form')).submit();
browser.wait(until.elementLocated(by.linkText('Dashboard')), TIMEOUT).then(function () { done(); });
});
it('can login', login);
it('can get avatar', checkAvatar);
it('displays correct clone url', function (done) {
browser.get('https://' + app.fqdn + '/' + username + '/' + reponame);
browser.findElement(by.id('repo-clone-ssh')).click();
browser.findElement(by.id('repo-clone-url')).getAttribute('value').then(function (cloneUrl) {
expect(cloneUrl).to.be('ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git');
done();
});
});
it('can clone the url', function (done) {
var env = Object.create(process.env);
env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh';
execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env });
expect(fs.existsSync(repodir + '/newfile')).to.be(true);
rimraf.sync(repodir);
done();
});
it('displays correct clone url', checkCloneUrl);
it('can clone the url', cloneRepo);
it('file exists in repo', function () { expect(fs.existsSync(repodir + '/newfile')).to.be(true); });
it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
@@ -287,13 +292,36 @@ describe('Application life cycle test', function () {
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
browser.get('https://' + app.fqdn + '/user/login');
browser.findElement(by.id('user_name')).sendKeys(email);
browser.findElement(by.id('password')).sendKeys(password);
browser.findElement(by.tagName('form')).submit();
browser.wait(until.elementLocated(by.linkText('Dashboard')), TIMEOUT).then(function () {
login(function (error) {
if (error) return done(error);
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
done();
});
});
// test update
it('can install app', function () {
execSync('cloudron install --new --wait --appstore-id ' + app.manifest.id + ' --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can get app information', getAppInfo);
it('can login', login);
it('can set avatar', setAvatar);
it('can get avatar', checkAvatar);
it('can add public key', addPublicKey);
it('can create repo', createRepo);
it('can clone the url', cloneRepo);
it('can add and push a file', pushFile);
it('can update', function () {
execSync('cloudron install --wait --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can get avatar', checkAvatar);
it('can clone the url', cloneRepo);
it('file exists in cloned repo', fileExists);
it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
});