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

Compare commits

...

26 Commits

Author SHA1 Message Date
Girish Ramakrishnan
91cc96705e Version 1.13.3 2019-08-22 18:07:30 -07:00
Girish Ramakrishnan
6fe012f901 Update gitea to 1.9.2 2019-08-22 18:01:55 -07:00
Girish Ramakrishnan
29197622fc Remove session config now that migration is done 2019-08-19 20:11:47 -07:00
Girish Ramakrishnan
3adbf0b442 Version 1.13.2 2019-08-19 17:29:50 -07:00
Girish Ramakrishnan
6c0a2ab20b no need to relogin since session persists 2019-08-19 17:29:26 -07:00
Girish Ramakrishnan
1943723dd3 Use file based sessions
Fixes #5
2019-08-19 17:10:23 -07:00
Johannes Zellner
2d15227f2e Update chromedriver 2019-08-15 14:02:50 +02:00
Johannes Zellner
cbc0bfb222 Bump version for 1.9.1 2019-08-15 13:37:27 +02:00
Johannes Zellner
10df3c6ba9 Bump version for Gitea 1.9.0 2019-07-31 18:16:42 +02:00
Johannes Zellner
047ec295bc Remove unused test requires 2019-07-31 18:16:28 +02:00
Johannes Zellner
31b8a17230 Ensure we never test with the default port 2019-07-31 18:15:17 +02:00
Girish Ramakrishnan
ebb46bb7ac Version 1.12.0 2019-06-17 14:40:15 -07:00
Girish Ramakrishnan
53f180ef95 Update manifest to v2 2019-06-17 14:30:49 -07:00
Girish Ramakrishnan
d89fc6a0ec Update Gitea to 1.8.3 2019-06-17 14:29:03 -07:00
Girish Ramakrishnan
1039d32995 Version 1.11.0 2019-06-04 19:27:00 -07:00
Girish Ramakrishnan
6b25bb66c7 Fix up tests 2019-06-04 19:26:26 -07:00
Girish Ramakrishnan
e566c94b43 Bring in various gogs features
better custom app.ini
optional sso support
always create root user
2019-06-04 17:15:20 -07:00
Girish Ramakrishnan
0d2e1cfff0 Remove admin propagation 2019-06-04 17:07:59 -07:00
Girish Ramakrishnan
f830faac79 Add lock file 2019-05-30 09:56:01 -07:00
Girish Ramakrishnan
319e6d275c Version 1.10.2 2019-05-30 09:55:07 -07:00
Girish Ramakrishnan
9128339000 Update modules 2019-05-30 09:50:05 -07:00
Girish Ramakrishnan
f7ca27425a Update Gitea to 1.8.2 2019-05-30 09:36:33 -07:00
Johannes Zellner
9907d1c9cd Bump version for 1.8.1 2019-05-09 11:30:29 +02:00
Girish Ramakrishnan
8d16e4d734 Version 1.10.0 2019-04-22 11:51:14 -07:00
Girish Ramakrishnan
150d490801 Update Gitea to 1.8.0 2019-04-22 11:44:21 -07:00
Johannes Zellner
4a4e4ff4f1 Bump version for 1.7.6 2019-04-15 12:52:36 +02:00
10 changed files with 2141 additions and 72 deletions

View File

@@ -291,3 +291,58 @@
* unitTypeCode not being used in accessLevelUnit (#6419) (#6423)
* ParsePatch function to work with quoted diff --git strings (#6323) (#6332)
[1.9.6]
* Update Gitea to 1.7.6
* Prevent remote code execution vulnerability with mirror repo URL settings (#6593) (#6595)
* Allow resend of confirmation email when logged in (#6482) (#6487)
[1.10.0]
* Update Gitea to 1.8.0
* [Full changelog](https://github.com/go-gitea/gitea/releases/tag/v1.8.0)
* Prevent remote code execution vulnerability with mirror repo URL settings (#6593) (#6594)
* Resolve 2FA bypass on API (#6676) (#6674)
* Prevent the creation of empty sessions for non-logged in users (#6690) (#6677)
* Expose issue stopwatch toggling via API (#5970)
* Pull request conflict files detection (#5951)
* Implement "conversation lock" for issue comments (#5073)
* Feature: Archive repos (#5009)
* Allow to set organization visibility (public, internal, private) (#1763)
* Added URL mapping for Release attachments like on github.com (#1707)
[1.10.1]
* Update Gitea to 1.8.1
[1.10.2]
* Update Gitea to 1.8.2
[1.11.0]
* better custom app.ini integration
* optional sso support
[1.12.0]
* Update Gitea to 1.8.3
* Update manifest to v2
[1.13.0]
* Update Gitea to 1.9.0
[1.13.1]
* Update Gitea to 1.9.1
[1.13.2]
* Make sessions persist restarts
[1.13.3]
* Update Gitea to 1.9.2
* Fix wrong sender when send slack webhook (#7918) (#7924)
* Upload support text/plain; charset=utf8 (#7899)
* Lfs/lock: round locked_at timestamp to second (#7872) (#7875)
* Fix non existent milestone with 500 error (#7867) (#7873)
* SECURITY
* Fix No PGP signature on 1.9.1 tag (#7874)
* Release built with go 1.12.9 to fix security fixes in golang std lib, ref: https://groups.google.com/forum/#!msg/golang-announce/oeMaeUnkvVE/a49yvTLqAAAJ
* ENHANCEMENT
* Fix pull creation with empty changes (#7920) (#7926)
* BUILD
* Drone/docker: prepare multi-arch release + provide arm64 image (#7571) (#7884)

View File

@@ -4,7 +4,7 @@
"author": "Gitea developers",
"description": "file://DESCRIPTION.md",
"tagline": "A painless self-hosted Git Service",
"version": "1.9.5",
"version": "1.13.3",
"healthCheckPath": "/healthcheck",
"httpPort": 3000,
"addons": {
@@ -20,10 +20,11 @@
"defaultValue": 29418
}
},
"manifestVersion": 1,
"manifestVersion": 2,
"website": "https://gitea.io",
"contactEmail": "apps@cloudron.io",
"icon": "file://logo.png",
"optionalSso": true,
"mediaLinks": [
"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",
@@ -34,6 +35,6 @@
"tags": [ "version control", "git", "code hosting", "development" ],
"changelog": "file://CHANGELOG",
"postInstallMessage": "file://POSTINSTALL.md",
"minBoxVersion": "1.10.0",
"minBoxVersion": "4.1.4",
"documentationUrl": "https://cloudron.io/documentation/apps/gitea/"
}

View File

@@ -1,4 +1,4 @@
This app packages Gitea <upstream>1.7.5</upstream>
This app packages Gitea <upstream>1.9.2</upstream>
Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket or Gitlab.

View File

@@ -1,5 +1,7 @@
FROM cloudron/base:1.0.0@sha256:147a648a068a2e746644746bbfb42eb7a50d682437cead3c67c933c546357617
ARG VERSION=1.9.2
RUN apt-get update && \
apt-get install -y openssh-server git && \
rm -rf /etc/ssh_host_* && \
@@ -13,7 +15,8 @@ RUN adduser --disabled-login --gecos 'Gitea' git
RUN passwd -d git
RUN mkdir -p /home/git/gitea
RUN curl -L https://dl.gitea.io/gitea/1.7.5/gitea-1.7.5-linux-amd64 -o /home/git/gitea/gitea \
WORKDIR /home/git
RUN curl -L https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64 -o /home/git/gitea/gitea \
&& chmod +x /home/git/gitea/gitea
# setup config paths

View File

@@ -1,12 +1,14 @@
This app integrates with the Cloudron SSO. Admins on Cloudron automatically
become admins on Gitea.
A default admin user has been setup with the following credentials (use the `Local` authentication source when logging in):
If you want to disable Cloudron SSO, do the following:
```
username: root
password: changeme
```
* Admin Panel -> Authentication -> 'cloudron' -> Uncheck 'This authentication is activated'
* Admin Panel -> Users -> Change Authentication Source to 'Local' and also give a password
**Note:** Please change the password and email immediately after installation.
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.
<sso>
This app integrates with the Cloudron SSO. Cloudron users can login and use Gitea
using the `Cloudron` authentication source.
</sso>

View File

@@ -95,3 +95,11 @@ PATH =
[indexer]
; this setting is protected and can't be modified
ISSUE_INDEXER_PATH = /app/data/appdata/indexers/issues.bleve
[session]
PROVIDER = file
PROVIDER_CONFIG = /run/gitea/sessions
COOKIE_SECURE = true
COOKIE_NAME = cloudron_gitea
GC_INTERVAL_TIME = 2592000

View File

@@ -2,32 +2,61 @@
set -eu -o pipefail
mkdir -p /run/gitea/tmp/uploads /run/sshd
mkdir -p /run/gitea/tmp/uploads /run/sshd /run/gitea/sessions
setup_ldap_source() {
set -eu
# Wait for gitea to finish db setup, before we insert ldap source in db
while ! curl --fail http://localhost:3000/healthcheck; do
echo "Waiting for gitea to come up"
sleep 1
done
# Get the existing LDAP source status. This allows the user to disable LDAP
# Note that this method is deprecated since this app now supports optionalSso
ldap_status=$(mysql -u"${CLOUDRON_MYSQL_USERNAME}" -p"${CLOUDRON_MYSQL_PASSWORD}" -h mysql --database="${CLOUDRON_MYSQL_DATABASE}" -N -B -e "select is_actived from login_source WHERE name='cloudron';")
[[ -z "${ldap_status}" ]] && ldap_status="1"
now=$(date +%s)
# Get the existing LDAP source status. This allows the user to disable LDAP
ldap_status=$(mysql -u"${MYSQL_USERNAME}" -p"${MYSQL_PASSWORD}" -h mysql --database="${MYSQL_DATABASE}" -N -B -e "select is_actived from login_source WHERE name='cloudron';")
[[ -z "${ldap_status}" ]] && ldap_status="1"
if mysql -u"${MYSQL_USERNAME}" -p"${MYSQL_PASSWORD}" -h mysql --database="${MYSQL_DATABASE}" \
-e "REPLACE INTO login_source (id, type, name, is_actived, cfg, created_unix, updated_unix) VALUES (1,2,'cloudron',${ldap_status},'{\"Name\":\"cloudron\",\"Host\":\"${LDAP_SERVER}\",\"Port\":${LDAP_PORT},\"UseSSL\":false,\"SkipVerify\":true,\"BindDN\":\"${LDAP_BIND_DN}\",\"BindPassword\":\"${LDAP_BIND_PASSWORD}\",\"UserBase\":\"${LDAP_USERS_BASE_DN}\",\"AttributeUsername\":\"username\",\"AttributeName\":\"displayname\",\"AttributeSurname\":\"\",\"AttributeMail\":\"mail\",\"Filter\":\"(\\\\u007C(mail=%[1]s)(username=%[1]s))\",\"AdminFilter\":\"(memberof=cn=admins,${LDAP_GROUPS_BASE_DN})\"}','${now}','${now}');"; then
echo "LDAP Authentication was setup with status ${ldap_status}"
if mysql -u"${CLOUDRON_MYSQL_USERNAME}" -p"${CLOUDRON_MYSQL_PASSWORD}" -h mysql --database="${CLOUDRON_MYSQL_DATABASE}" \
-e "REPLACE INTO login_source (id, type, name, is_actived, cfg, created_unix, updated_unix) VALUES (1,2,'cloudron',${ldap_status},'{\"Name\":\"cloudron\",\"Host\":\"${CLOUDRON_LDAP_SERVER}\",\"Port\":${CLOUDRON_LDAP_PORT},\"UseSSL\":false,\"SkipVerify\":true,\"BindDN\":\"${CLOUDRON_LDAP_BIND_DN}\",\"BindPassword\":\"${CLOUDRON_LDAP_BIND_PASSWORD}\",\"UserBase\":\"${CLOUDRON_LDAP_USERS_BASE_DN}\",\"AttributeUsername\":\"username\",\"AttributeName\":\"displayname\",\"AttributeSurname\":\"\",\"AttributeMail\":\"mail\",\"Filter\":\"(\\\\u007C(mail=%[1]s)(username=%[1]s))\"}','${now}','${now}');"; then
echo "==> LDAP Authentication was setup with activation status ${ldap_status}"
else
echo "Failed to setup LDAP authentication"
echo "==> Failed to setup LDAP authentication"
exit 1
fi
}
setup_root_user() {
set -eu
if sudo -H -u git /home/git/gitea/gitea admin create-user --name root --password changeme --email test@cloudron.io --admin -c /run/gitea/app.ini; then
echo "==> root user added"
else
echo "==> Failed to add root user"
exit 1
fi
}
setup_auth() {
set -eu
# Wait for gitea to finish db setup, before we do any db operations
while ! curl --fail http://localhost:3000/healthcheck; do
echo "==> Waiting for gitea to come up"
sleep 1
done
echo "==> Gitea is up, setting up auth"
if [[ -n "${CLOUDRON_LDAP_SERVER:-}" ]]; then
setup_ldap_source
fi
user_count=$(mysql -u"${CLOUDRON_MYSQL_USERNAME}" -p"${CLOUDRON_MYSQL_PASSWORD}" -h mysql --database="${CLOUDRON_MYSQL_DATABASE}" -N -B -e "SELECT count(*) FROM user;")
# be careful, not to create root user for existing LDAP based installs
if [[ "${user_count}" == "0" ]]; then
echo "==> Setting up root user for first run"
setup_root_user
fi
}
# SSH_PORT can be unset to disable SSH
disable_ssh="false"
if [[ -z "${SSH_PORT:-}" ]]; then
@@ -52,30 +81,26 @@ chmod 0644 /app/data/sshd/*.pub
sed -e "s/^Port .*/Port ${SSH_PORT}/" /etc/ssh/sshd_config > /run/gitea/sshd_config
cp /home/git/app.ini.template "/run/gitea/app.ini"
if [[ ! -f /app/data/app.ini ]]; then
echo -e "; Add customizations here - https://docs.gitea.io/en-us/config-cheat-sheet/" > /app/data/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
if [ "$(crudini --get /app/data/app.ini security SECRET_KEY)" == "##SECRET_KEY" ]; then
echo "Generating new SECRET_KEY"
echo "==> Generating new SECRET_KEY"
crudini --set "/app/data/app.ini" security SECRET_KEY $(pwgen -1 -s)
fi
# merge user config file
cp /home/git/app.ini.template "/run/gitea/app.ini"
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 HOST "${CLOUDRON_MYSQL_HOST}:${CLOUDRON_MYSQL_PORT}"
crudini --set "/run/gitea/app.ini" database NAME "${CLOUDRON_MYSQL_DATABASE}"
crudini --set "/run/gitea/app.ini" database USER "${CLOUDRON_MYSQL_USERNAME}"
crudini --set "/run/gitea/app.ini" database PASSWD "${CLOUDRON_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 DOMAIN "${CLOUDRON_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"
@@ -84,21 +109,22 @@ 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_SMTPS_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 HOST "${CLOUDRON_MAIL_SMTP_SERVER}:${CLOUDRON_MAIL_SMTPS_PORT}"
crudini --set "/run/gitea/app.ini" mailer USER "${CLOUDRON_MAIL_SMTP_USERNAME}"
crudini --set "/run/gitea/app.ini" mailer PASSWD "${CLOUDRON_MAIL_SMTP_PASSWORD}"
crudini --set "/run/gitea/app.ini" mailer FROM "${CLOUDRON_MAIL_FROM}"
crudini --set "/run/gitea/app.ini" mailer SKIP_VERIFY "true"
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"
echo "==> Creating dirs and changing permissions"
mkdir -p /app/data/repository /app/data/ssh /app/data/custom
chown -R git:git /app/data /run/gitea
( setup_ldap_source ) &
# this expects app.ini to be available
( setup_auth ) &
exec /usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i Gitea

1938
test/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -9,17 +9,15 @@
"author": "",
"license": "ISC",
"devDependencies": {
"ejs": "^2.3.4",
"chromedriver": "^76.0.0",
"expect.js": "^0.3.1",
"mkdirp": "^0.5.1",
"mocha": "^2.3.4",
"rimraf": "^2.4.4",
"superagent": "^1.4.0"
"mocha": "^6.1.4",
"rimraf": "^2.6.3",
"superagent": "^5.0.5"
},
"dependencies": {
"chromedriver": "^2.38.2",
"selenium-server-standalone-jar": "^3.3.1",
"selenium-webdriver": "^3.3.0",
"selenium-server-standalone-jar": "^3.141.5",
"selenium-webdriver": "^3.6.0",
"superagent": "^1.8.5"
}
}

View File

@@ -12,14 +12,11 @@
require('chromedriver');
var execSync = require('child_process').execSync,
ejs = require('ejs'),
expect = require('expect.js'),
fs = require('fs'),
mkdirp = require('mkdirp'),
path = require('path'),
rimraf = require('rimraf'),
superagent = require('superagent'),
webdriver = require('selenium-webdriver');
superagent = require('superagent');
var by = require('selenium-webdriver').By,
until = require('selenium-webdriver').until,
@@ -37,11 +34,12 @@ describe('Application life cycle test', function () {
var username = process.env.USERNAME;
var password = process.env.PASSWORD;
var TIMEOUT = parseInt(process.env.TIMEOUT, 10) || 5000;
var email, token;
var email = process.env.EMAIL, token;
before(function (done) {
if (!process.env.USERNAME) return done(new Error('USERNAME env var not set'));
if (!process.env.PASSWORD) return done(new Error('PASSWORD env var not set'));
if (!process.env.EMAIL) return done(new Error('EMAIL env var not set'));
var seleniumJar= require('selenium-server-standalone-jar');
var SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;
@@ -58,12 +56,12 @@ describe('Application life cycle test', function () {
done();
});
function waitForUrl(url, done) {
browser.wait(function () {
function waitForUrl(url) {
return browser.wait(function () {
return browser.getCurrentUrl().then(function (currentUrl) {
return currentUrl === url;
});
}, TIMEOUT).then(function () { done(); });
}, TIMEOUT);
}
function getAppInfo() {
@@ -128,11 +126,13 @@ return done();
}).then(function () {
return browser.findElement(by.xpath('//button[contains(text(), "Commit Changes")]')).click();
}).then(function () {
waitForUrl('https://' + app.fqdn + '/' + username + '/' + reponame + '/src/branch/master/newfile', done);
return waitForUrl('https://' + app.fqdn + '/' + username + '/' + reponame + '/src/branch/master/newfile');
}).then(function () {
done();
});
}
function login(done) {
function login(username, password, done) {
browser.get('https://' + app.fqdn + '/user/login').then(function () {
return browser.findElement(by.id('user_name')).sendKeys(username);
}).then(function () {
@@ -146,6 +146,18 @@ return done();
});
}
function adminLogin(done) {
login('root', 'changeme', done);
}
function logout(done) {
browser.get('https://' + app.fqdn + '/user/logout').then(function () {
return waitForUrl('https://' + app.fqdn + '/explore/repos');
}).then(function () {
done();
});
}
function addPublicKey(done) {
var publicKey = fs.readFileSync(__dirname + '/id_rsa.pub', 'utf8');
@@ -310,8 +322,11 @@ return done();
});
});
it('can login', login);
it('can admin login', adminLogin);
it('can send mail', sendMail);
it('can logout', logout);
it('can login', login.bind(null, username, password));
it('can set avatar', setAvatar);
it('can get avatar', checkAvatar);
@@ -334,7 +349,7 @@ return done();
done();
});
it('can login', login);
xit('can login', login.bind(null, username, password)); // no need to relogin since session persists
it('displays correct clone url', checkCloneUrl);
it('can clone the url', cloneRepo);
it('file exists in repo', fileExists);
@@ -347,7 +362,7 @@ return done();
execSync('cloudron restore --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can login', login);
it('can login', login.bind(null, username, password));
it('can get avatar', checkAvatar);
it('can clone the url', cloneRepo);
it('file exists in repo', function () { expect(fs.existsSync(repodir + '/newfile')).to.be(true); });
@@ -365,7 +380,7 @@ return done();
});
});
it('can login', login);
it('can login', login.bind(null, username, password));
it('can get avatar', checkAvatar);
it('displays correct clone url', checkCloneUrl);
it('can clone the url', cloneRepo);
@@ -387,7 +402,7 @@ return done();
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
login(function (error) {
login(email, password, function (error) {
if (error) return done(error);
// ensure we don't hit NXDOMAIN in the mean time
@@ -398,13 +413,33 @@ return done();
});
});
// No SSO
it('install app (no sso)', function () {
execSync(`cloudron install --new --wait --no-sso --location ${LOCATION} -p SSH_PORT=${SSH_PORT}`, { 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 admin login (no sso)', adminLogin);
it('can logout', logout);
it('uninstall app (no sso)', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
// test update
it('can install app', function () {
execSync(`cloudron install --new --wait --appstore-id ${app.manifest.id} --location ${LOCATION} -p SSH_PORT=${SSH_PORT}`, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can get app information', getAppInfo);
it('can login', login);
it('can login', login.bind(null, username, password));
it('can set avatar', setAvatar);
it('can get avatar', checkAvatar);
it('can add public key', addPublicKey);
@@ -416,8 +451,11 @@ return done();
execSync('cloudron install --wait --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can login', login);
it('can send mail', sendMail);
xit('can admin login', adminLogin);
xit('can send mail', sendMail);
xit('can logout', logout);
it('can login', login.bind(null, username, password));
it('can get avatar', checkAvatar);
it('can clone the url', cloneRepo);
it('file exists in cloned repo', fileExists);