Implement Automatic Deploy
+ Implemented Automatic Deploy + Tags will now build automatically + You can now restart builds that failed + Builds now have their own storage device + Added a retry build endpoint
This commit is contained in:
parent
885f57438d
commit
37da3c5651
|
@ -2013,6 +2013,17 @@ $collections = [
|
||||||
'default' => '',
|
'default' => '',
|
||||||
'array' => false,
|
'array' => false,
|
||||||
'filters' => [],
|
'filters' => [],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'$id' => 'automaticDeploy',
|
||||||
|
'type' => Database::VAR_BOOLEAN,
|
||||||
|
'format' => '',
|
||||||
|
'size' => 0,
|
||||||
|
'signed' => true,
|
||||||
|
'required' => false,
|
||||||
|
'default' => false,
|
||||||
|
'array' => false,
|
||||||
|
'filters' => [],
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'indexes' => [
|
'indexes' => [
|
||||||
|
@ -2049,6 +2060,17 @@ $collections = [
|
||||||
'array' => false,
|
'array' => false,
|
||||||
'filters' => [],
|
'filters' => [],
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'$id' => 'runtime',
|
||||||
|
'type' => Database::VAR_STRING,
|
||||||
|
'format' => '',
|
||||||
|
'size' => 2048,
|
||||||
|
'signed' => true,
|
||||||
|
'required' => true,
|
||||||
|
'default' => '',
|
||||||
|
'array' => false,
|
||||||
|
'filters' => [],
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'$id' => 'status',
|
'$id' => 'status',
|
||||||
'type' => Database::VAR_STRING,
|
'type' => Database::VAR_STRING,
|
||||||
|
|
1
app/config/specs/0.13.x.client.json
Normal file
1
app/config/specs/0.13.x.client.json
Normal file
File diff suppressed because one or more lines are too long
1
app/config/specs/0.13.x.console.json
Normal file
1
app/config/specs/0.13.x.console.json
Normal file
File diff suppressed because one or more lines are too long
1
app/config/specs/0.13.x.server.json
Normal file
1
app/config/specs/0.13.x.server.json
Normal file
File diff suppressed because one or more lines are too long
|
@ -333,49 +333,51 @@ App::patch('/v1/functions/:functionId/tag')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->inject('dbForInternal')
|
->inject('dbForInternal')
|
||||||
->inject('project')
|
->inject('project')
|
||||||
->inject('user')
|
->action(function ($functionId, $tag, $response, $dbForInternal, $project) {
|
||||||
->action(function ($functionId, $tag, $response, $dbForInternal, $project, $user) {
|
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
/** @var Utopia\Database\Database $dbForInternal */
|
/** @var Utopia\Database\Database $dbForInternal */
|
||||||
/** @var Utopia\Database\Document $project */
|
/** @var Utopia\Database\Document $project */
|
||||||
/** @var Utopia\Database\Document $user */
|
|
||||||
|
|
||||||
$function = $dbForInternal->getDocument('functions', $functionId);
|
$function = $dbForInternal->getDocument('functions', $functionId);
|
||||||
|
$tag = $dbForInternal->getDocument('tags', $tag);
|
||||||
|
$build = $dbForInternal->getDocument('builds', $tag->getAttribute('buildId'));
|
||||||
|
|
||||||
$ch = \curl_init();
|
if ($function->isEmpty()) {
|
||||||
\curl_setopt($ch, CURLOPT_URL, "http://appwrite-executor:8080/v1/tag");
|
throw new Exception('Function not found', 404);
|
||||||
\curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
\curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
|
|
||||||
'functionId' => $functionId,
|
|
||||||
'tagId' => $tag,
|
|
||||||
'userId' => $user->getId()
|
|
||||||
]));
|
|
||||||
\curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
\curl_setopt($ch, CURLOPT_TIMEOUT, 900);
|
|
||||||
\curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
|
||||||
\curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
||||||
'Content-Type: application/json',
|
|
||||||
'x-appwrite-project: '.$project->getId(),
|
|
||||||
'x-appwrite-executor-key: '. App::getEnv('_APP_EXECUTOR_SECRET', '')
|
|
||||||
]);
|
|
||||||
|
|
||||||
$executorResponse = \curl_exec($ch);
|
|
||||||
|
|
||||||
$error = \curl_error($ch);
|
|
||||||
|
|
||||||
if (!empty($error)) {
|
|
||||||
throw new Exception('Curl error: ' . $error, 500);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check status code
|
if ($tag->isEmpty()) {
|
||||||
$statusCode = \curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
throw new Exception('Tag not found', 404);
|
||||||
if (200 !== $statusCode) {
|
|
||||||
throw new Exception('Executor error: ' . $executorResponse, $statusCode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
\curl_close($ch);
|
if ($build->isEmpty()) {
|
||||||
|
throw new Exception('Build not found', 404);
|
||||||
|
}
|
||||||
|
|
||||||
$response->dynamic(new Document(json_decode($executorResponse, true)), Response::MODEL_FUNCTION);
|
if ($build->getAttribute('status') !== 'ready') {
|
||||||
|
throw new Exception('Build not ready', 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
$schedule = $function->getAttribute('schedule', '');
|
||||||
|
$cron = (empty($function->getAttribute('tag')) && !empty($schedule)) ? new CronExpression($schedule) : null;
|
||||||
|
$next = (empty($function->getAttribute('tag')) && !empty($schedule)) ? $cron->getNextRunDate()->format('U') : 0;
|
||||||
|
|
||||||
|
$function = $dbForInternal->updateDocument('functions', $function->getId(), new Document(array_merge($function->getArrayCopy(), [
|
||||||
|
'tag' => $tag->getId(),
|
||||||
|
'scheduleNext' => (int)$next,
|
||||||
|
])));
|
||||||
|
|
||||||
|
if ($next) { // Init first schedule
|
||||||
|
ResqueScheduler::enqueueAt($next, 'v1-functions', 'FunctionsV1', [
|
||||||
|
'projectId' => $project->getId(),
|
||||||
|
'webhooks' => $project->getAttribute('webhooks', []),
|
||||||
|
'functionId' => $function->getId(),
|
||||||
|
'executionId' => null,
|
||||||
|
'trigger' => 'schedule',
|
||||||
|
]); // Async task rescheduale
|
||||||
|
}
|
||||||
|
|
||||||
|
$response->dynamic($function, Response::MODEL_FUNCTION);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::delete('/v1/functions/:functionId')
|
App::delete('/v1/functions/:functionId')
|
||||||
|
@ -466,15 +468,20 @@ App::post('/v1/functions/:functionId/tags')
|
||||||
->param('functionId', '', new UID(), 'Function unique ID.')
|
->param('functionId', '', new UID(), 'Function unique ID.')
|
||||||
->param('entrypoint', '', new Text('1028'), 'Entrypoint File.')
|
->param('entrypoint', '', new Text('1028'), 'Entrypoint File.')
|
||||||
->param('code', [], new File(), 'Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.', false)
|
->param('code', [], new File(), 'Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.', false)
|
||||||
|
->param('automaticDeploy', false, new Boolean(true), 'Automatically deploy the function when it is finished building.', false)
|
||||||
->inject('request')
|
->inject('request')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->inject('dbForInternal')
|
->inject('dbForInternal')
|
||||||
->inject('usage')
|
->inject('usage')
|
||||||
->action(function ($functionId, $entrypoint, $file, $request, $response, $dbForInternal, $usage) {
|
->inject('user')
|
||||||
|
->inject('project')
|
||||||
|
->action(function ($functionId, $entrypoint, $file, $automaticDeploy, $request, $response, $dbForInternal, $usage, $user, $project) {
|
||||||
/** @var Utopia\Swoole\Request $request */
|
/** @var Utopia\Swoole\Request $request */
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
/** @var Utopia\Database\Database $dbForInternal */
|
/** @var Utopia\Database\Database $dbForInternal */
|
||||||
/** @var Appwrite\Event\Event $usage */
|
/** @var Appwrite\Event\Event $usage */
|
||||||
|
/** @var Appwrite\Auth\User $user */
|
||||||
|
/** @var Appwrite\Project\Project $project */
|
||||||
|
|
||||||
$function = $dbForInternal->getDocument('functions', $functionId);
|
$function = $dbForInternal->getDocument('functions', $functionId);
|
||||||
|
|
||||||
|
@ -517,6 +524,18 @@ App::post('/v1/functions/:functionId/tags')
|
||||||
throw new Exception('Failed moving file', 500);
|
throw new Exception('Failed moving file', 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($automaticDeploy === 'true') {
|
||||||
|
// Remove automaticDeploy for all other tags.
|
||||||
|
$tags = $dbForInternal->find('tags', [
|
||||||
|
new Query('automaticDeploy', Query::TYPE_EQUAL, [true]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
foreach ($tags as $tag) {
|
||||||
|
$tag->setAttribute('automaticDeploy', false);
|
||||||
|
$dbForInternal->updateDocument('tags', $tag->getId(), $tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$tagId = $dbForInternal->getId();
|
$tagId = $dbForInternal->getId();
|
||||||
$tag = $dbForInternal->createDocument('tags', new Document([
|
$tag = $dbForInternal->createDocument('tags', new Document([
|
||||||
'$id' => $tagId,
|
'$id' => $tagId,
|
||||||
|
@ -531,13 +550,50 @@ App::post('/v1/functions/:functionId/tags')
|
||||||
'status' => 'pending',
|
'status' => 'pending',
|
||||||
'buildPath' => '',
|
'buildPath' => '',
|
||||||
'buildStdout' => '',
|
'buildStdout' => '',
|
||||||
'buildStderr' => ''
|
'buildStderr' => '',
|
||||||
|
'automaticDeploy' => ($automaticDeploy === 'true'),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$usage
|
$usage
|
||||||
->setParam('storage', $tag->getAttribute('size', 0))
|
->setParam('storage', $tag->getAttribute('size', 0))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
// Send start build reqeust to executor using /v1/build/:buildId
|
||||||
|
$function = $dbForInternal->getDocument('functions', $functionId);
|
||||||
|
|
||||||
|
$ch = \curl_init();
|
||||||
|
\curl_setopt($ch, CURLOPT_URL, "http://appwrite-executor:8080/v1/tag");
|
||||||
|
\curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
\curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
|
||||||
|
'functionId' => $functionId,
|
||||||
|
'tagId' => $tag->getId(),
|
||||||
|
'userId' => $user->getId(),
|
||||||
|
]));
|
||||||
|
\curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
\curl_setopt($ch, CURLOPT_TIMEOUT, 900);
|
||||||
|
\curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
||||||
|
\curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||||
|
'Content-Type: application/json',
|
||||||
|
'x-appwrite-project: '.$project->getId(),
|
||||||
|
'x-appwrite-executor-key: '. App::getEnv('_APP_EXECUTOR_SECRET', '')
|
||||||
|
]);
|
||||||
|
|
||||||
|
$executorResponse = \curl_exec($ch);
|
||||||
|
|
||||||
|
$error = \curl_error($ch);
|
||||||
|
|
||||||
|
if (!empty($error)) {
|
||||||
|
throw new Exception('Curl error: ' . $error, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check status code
|
||||||
|
$statusCode = \curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
if (200 !== $statusCode) {
|
||||||
|
throw new Exception('Executor error: ' . $executorResponse, $statusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
\curl_close($ch);
|
||||||
|
|
||||||
$response->setStatusCode(Response::STATUS_CODE_CREATED);
|
$response->setStatusCode(Response::STATUS_CODE_CREATED);
|
||||||
$response->dynamic($tag, Response::MODEL_TAG);
|
$response->dynamic($tag, Response::MODEL_TAG);
|
||||||
});
|
});
|
||||||
|
@ -1055,3 +1111,64 @@ App::get('/v1/builds/:buildId')
|
||||||
|
|
||||||
$response->dynamic($build, Response::MODEL_BUILD);
|
$response->dynamic($build, Response::MODEL_BUILD);
|
||||||
});
|
});
|
||||||
|
App::post('/v1/builds/:buildId')
|
||||||
|
->groups(['api', 'functions'])
|
||||||
|
->desc('Retry Build')
|
||||||
|
->label('scope', 'functions.write')
|
||||||
|
->label('event', 'functions.tags.update')
|
||||||
|
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
|
||||||
|
->label('sdk.namespace', 'functions')
|
||||||
|
->label('sdk.method', 'retryBuild')
|
||||||
|
->label('sdk.description', '/docs/references/functions/retry-build.md')
|
||||||
|
->label('sdk.response.code', Response::STATUS_CODE_NOCONTENT)
|
||||||
|
->label('sdk.response.model', Response::MODEL_NONE)
|
||||||
|
->param('buildId', '', new UID(), 'Build unique ID.')
|
||||||
|
->inject('response')
|
||||||
|
->inject('dbForInternal')
|
||||||
|
->inject('project')
|
||||||
|
->action(function ($buildId, $response, $dbForInternal, $project) {
|
||||||
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
|
/** @var Utopia\Database\Database $dbForInternal */
|
||||||
|
/** @var Utopia\Database\Document $project */
|
||||||
|
|
||||||
|
$build = $dbForInternal->getDocument('builds', $buildId);
|
||||||
|
|
||||||
|
if ($build->isEmpty()) {
|
||||||
|
throw new Exception('Build not found', 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($build->getAttribute('status') !== 'failed') {
|
||||||
|
throw new Exception('Build not failed', 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retry build
|
||||||
|
$ch = \curl_init();
|
||||||
|
\curl_setopt($ch, CURLOPT_URL, "http://appwrite-executor:8080/v1/build/{$buildId}");
|
||||||
|
\curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
\curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
\curl_setopt($ch, CURLOPT_TIMEOUT, 900);
|
||||||
|
\curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
||||||
|
\curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||||
|
'Content-Type: application/json',
|
||||||
|
'x-appwrite-project: '.$project->getId(),
|
||||||
|
'x-appwrite-executor-key: '. App::getEnv('_APP_EXECUTOR_SECRET', '')
|
||||||
|
]);
|
||||||
|
|
||||||
|
$executorResponse = \curl_exec($ch);
|
||||||
|
|
||||||
|
$error = \curl_error($ch);
|
||||||
|
|
||||||
|
if (!empty($error)) {
|
||||||
|
throw new Exception('Curl error: ' . $error, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check status code
|
||||||
|
$statusCode = \curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
if (200 !== $statusCode) {
|
||||||
|
throw new Exception('Executor error: ' . $executorResponse, $statusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
\curl_close($ch);
|
||||||
|
|
||||||
|
$response->noContent();
|
||||||
|
});
|
|
@ -28,6 +28,7 @@ App::init(function ($utopia, $request, $response, $project, $user, $events, $aud
|
||||||
|
|
||||||
Storage::setDevice('files', new Local(APP_STORAGE_UPLOADS.'/app-'.$project->getId()));
|
Storage::setDevice('files', new Local(APP_STORAGE_UPLOADS.'/app-'.$project->getId()));
|
||||||
Storage::setDevice('functions', new Local(APP_STORAGE_FUNCTIONS.'/app-'.$project->getId()));
|
Storage::setDevice('functions', new Local(APP_STORAGE_FUNCTIONS.'/app-'.$project->getId()));
|
||||||
|
Storage::setDevice('builds', new Local(APP_STORAGE_BUILDS.'/app-'.$project->getId()));
|
||||||
|
|
||||||
$route = $utopia->match($request);
|
$route = $utopia->match($request);
|
||||||
|
|
||||||
|
|
219
app/executor.php
219
app/executor.php
|
@ -31,6 +31,7 @@ use Swoole\Coroutine as Co;
|
||||||
use Utopia\Cache\Cache;
|
use Utopia\Cache\Cache;
|
||||||
use Utopia\Database\Query;
|
use Utopia\Database\Query;
|
||||||
use Utopia\Orchestration\Adapter\DockerCLI;
|
use Utopia\Orchestration\Adapter\DockerCLI;
|
||||||
|
use Utopia\Validator\Boolean;
|
||||||
|
|
||||||
require_once __DIR__ . '/init.php';
|
require_once __DIR__ . '/init.php';
|
||||||
|
|
||||||
|
@ -155,6 +156,19 @@ App::post('/v1/cleanup/function')
|
||||||
// Delete the containers of all tags
|
// Delete the containers of all tags
|
||||||
foreach ($results as $tag) {
|
foreach ($results as $tag) {
|
||||||
try {
|
try {
|
||||||
|
// Remove any ongoing builds
|
||||||
|
if ($tag->getAttribute('buildId')) {
|
||||||
|
$build = Authorization::skip(function () use ($dbForInternal, $tag) {
|
||||||
|
return $dbForInternal->getDocument('builds', $tag->getAttribute('buildId'));
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($build->getAttribute('status') == 'building') {
|
||||||
|
// Remove the build
|
||||||
|
$orchestration->remove('build-stage-' . $tag->getAttribute('buildId'), true);
|
||||||
|
Console::info('Removed build for tag ' . $tag['$id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$orchestration->remove('appwrite-function-' . $tag['$id'], true);
|
$orchestration->remove('appwrite-function-' . $tag['$id'], true);
|
||||||
Console::info('Removed container for tag ' . $tag['$id']);
|
Console::info('Removed container for tag ' . $tag['$id']);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
@ -194,6 +208,19 @@ App::post('/v1/cleanup/tag')
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Remove any ongoing builds
|
||||||
|
if ($tag->getAttribute('buildId')) {
|
||||||
|
$build = Authorization::skip(function () use ($dbForInternal, $tag) {
|
||||||
|
return $dbForInternal->getDocument('builds', $tag->getAttribute('buildId'));
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($build->getAttribute('status') == 'building') {
|
||||||
|
// Remove the build
|
||||||
|
$orchestration->remove('build-stage-' . $tag->getAttribute('buildId'), true);
|
||||||
|
Console::info('Removed build for tag ' . $tag['$id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the container of the tag
|
// Remove the container of the tag
|
||||||
$orchestration->remove('appwrite-function-' . $tag['$id'], true);
|
$orchestration->remove('appwrite-function-' . $tag['$id'], true);
|
||||||
Console::info('Removed container for tag ' . $tag['$id']);
|
Console::info('Removed container for tag ' . $tag['$id']);
|
||||||
|
@ -212,10 +239,13 @@ App::post('/v1/tag')
|
||||||
->param('functionId', '', new UID(), 'Function unique ID.')
|
->param('functionId', '', new UID(), 'Function unique ID.')
|
||||||
->param('tagId', '', new UID(), 'Tag unique ID.')
|
->param('tagId', '', new UID(), 'Tag unique ID.')
|
||||||
->param('userId', '', new UID(), 'User unique ID.', true)
|
->param('userId', '', new UID(), 'User unique ID.', true)
|
||||||
|
->param('autoDeploy', false, new Boolean(), '', true)
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->inject('dbForInternal')
|
->inject('dbForInternal')
|
||||||
->inject('projectID')
|
->inject('projectID')
|
||||||
->action(function ($functionId, $tagId, $userId, $response, $dbForInternal, $projectID) {
|
->action(function ($functionId, $tagId, $userId, $autoDeploy, $response, $dbForInternal, $projectID) {
|
||||||
|
global $runtimes;
|
||||||
|
|
||||||
// Get function document
|
// Get function document
|
||||||
$function = Authorization::skip(function () use ($functionId, $dbForInternal) {
|
$function = Authorization::skip(function () use ($functionId, $dbForInternal) {
|
||||||
return $dbForInternal->getDocument('functions', $functionId);
|
return $dbForInternal->getDocument('functions', $functionId);
|
||||||
|
@ -235,48 +265,80 @@ App::post('/v1/tag')
|
||||||
throw new Exception('Tag not found', 404);
|
throw new Exception('Tag not found', 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the schedule
|
$runtime = (isset($runtimes[$function->getAttribute('runtime')]))
|
||||||
$schedule = $function->getAttribute('schedule', '');
|
? $runtimes[$function->getAttribute('runtime')]
|
||||||
$cron = (empty($function->getAttribute('tag')) && !empty($schedule)) ? new CronExpression($schedule) : null;
|
: null;
|
||||||
$next = (empty($function->getAttribute('tag')) && !empty($schedule)) ? $cron->getNextRunDate()->format('U') : 0;
|
|
||||||
|
|
||||||
// Create a new build entry
|
// Create a new build entry
|
||||||
$buildId = $dbForInternal->getId();
|
$buildId = $dbForInternal->getId();
|
||||||
Authorization::skip(function () use ($buildId, $dbForInternal, $tag, $userId) {
|
|
||||||
$dbForInternal->createDocument('builds', new Document([
|
|
||||||
'$id' => $buildId,
|
|
||||||
'$read' => (!empty($userId)) ? ['user:' . $userId] : [],
|
|
||||||
'$write' => [],
|
|
||||||
'dateCreated' => time(),
|
|
||||||
'status' => 'pending',
|
|
||||||
'outputPath' => '',
|
|
||||||
'source' => $tag->getAttribute('path'),
|
|
||||||
'sourceType' => Storage::DEVICE_LOCAL,
|
|
||||||
'stdout' => '',
|
|
||||||
'stderr' => '',
|
|
||||||
'buildTime' => 0,
|
|
||||||
'envVars' => [
|
|
||||||
'APPWRITE_ENTRYPOINT_NAME' => $tag->getAttribute('entrypoint'),
|
|
||||||
]
|
|
||||||
]));
|
|
||||||
|
|
||||||
$tag->setAttribute('buildId', $buildId);
|
if ($tag->getAttribute('buildId')) {
|
||||||
|
$buildId = $tag->getAttribute('buildId');
|
||||||
|
} else {
|
||||||
|
Authorization::skip(function () use ($buildId, $dbForInternal, $tag, $userId, $function, $projectID, $runtime) {
|
||||||
|
$dbForInternal->createDocument('builds', new Document([
|
||||||
|
'$id' => $buildId,
|
||||||
|
'$read' => (!empty($userId)) ? ['user:' . $userId] : [],
|
||||||
|
'$write' => [],
|
||||||
|
'dateCreated' => time(),
|
||||||
|
'status' => 'pending',
|
||||||
|
'runtime' => $function->getAttribute('runtime'),
|
||||||
|
'outputPath' => '',
|
||||||
|
'source' => $tag->getAttribute('path'),
|
||||||
|
'sourceType' => Storage::DEVICE_LOCAL,
|
||||||
|
'stdout' => '',
|
||||||
|
'stderr' => '',
|
||||||
|
'buildTime' => 0,
|
||||||
|
'envVars' => [
|
||||||
|
'APPWRITE_ENTRYPOINT_NAME' => $tag->getAttribute('entrypoint'),
|
||||||
|
'APPWRITE_FUNCTION_ID' => $function->getId(),
|
||||||
|
'APPWRITE_FUNCTION_NAME' => $function->getAttribute('name', ''),
|
||||||
|
'APPWRITE_FUNCTION_RUNTIME_NAME' => $runtime['name'],
|
||||||
|
'APPWRITE_FUNCTION_RUNTIME_VERSION' => $runtime['version'],
|
||||||
|
'APPWRITE_FUNCTION_PROJECT_ID' => $projectID,
|
||||||
|
]
|
||||||
|
]));
|
||||||
|
|
||||||
$dbForInternal->updateDocument('tags', $tag->getId(), $tag);
|
$tag->setAttribute('buildId', $buildId);
|
||||||
});
|
|
||||||
|
|
||||||
// Update the function document setting the tag as the active one
|
$dbForInternal->updateDocument('tags', $tag->getId(), $tag);
|
||||||
$function = Authorization::skip(function () use ($function, $dbForInternal, $tag, $next) {
|
});
|
||||||
return $function = $dbForInternal->updateDocument('functions', $function->getId(), new Document(array_merge($function->getArrayCopy(), [
|
}
|
||||||
'tag' => $tag->getId(),
|
|
||||||
'scheduleNext' => (int)$next,
|
|
||||||
])));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Build Code
|
// Build Code
|
||||||
go(function () use ($dbForInternal, $projectID, $function, $tagId, $buildId, $functionId) {
|
go(function () use ($dbForInternal, $projectID, $tagId, $buildId, $functionId, $function) {
|
||||||
// Build Code
|
// Build Code
|
||||||
runBuildStage($buildId, $function, $projectID, $dbForInternal);
|
runBuildStage($buildId, $projectID, $dbForInternal);
|
||||||
|
|
||||||
|
// Update the schedule
|
||||||
|
$schedule = $function->getAttribute('schedule', '');
|
||||||
|
$cron = (empty($function->getAttribute('tag')) && !empty($schedule)) ? new CronExpression($schedule) : null;
|
||||||
|
$next = (empty($function->getAttribute('tag')) && !empty($schedule)) ? $cron->getNextRunDate()->format('U') : 0;
|
||||||
|
|
||||||
|
// Grab tag
|
||||||
|
$tag = Authorization::skip(function () use ($dbForInternal, $tagId, $next, $buildId) {
|
||||||
|
return $dbForInternal->getDocument('tags', $tagId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Grab build
|
||||||
|
$build = Authorization::skip(function () use ($dbForInternal, $buildId) {
|
||||||
|
return $dbForInternal->getDocument('builds', $buildId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// If the build failed, it won't be possible to deploy
|
||||||
|
if ($build->getAttribute('status') !== 'ready') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tag->getAttribute('automaticDeploy') === true) {
|
||||||
|
// Update the function document setting the tag as the active one
|
||||||
|
$function = Authorization::skip(function () use ($function, $dbForInternal, $tag, $next) {
|
||||||
|
return $function = $dbForInternal->updateDocument('functions', $function->getId(), new Document(array_merge($function->getArrayCopy(), [
|
||||||
|
'tag' => $tag->getId(),
|
||||||
|
'scheduleNext' => (int)$next,
|
||||||
|
])));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Deploy Runtime Server
|
// Deploy Runtime Server
|
||||||
createRuntimeServer($functionId, $projectID, $tagId, $dbForInternal);
|
createRuntimeServer($functionId, $projectID, $tagId, $dbForInternal);
|
||||||
|
@ -302,7 +364,56 @@ App::get('/v1/healthz')
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
function runBuildStage(string $buildId, Document $function, string $projectID, Database $database): Document
|
// Build Endpoints
|
||||||
|
App::post('/v1/build/:buildId') // Start a Build
|
||||||
|
->param('buildId', '', new UID(), 'Build unique ID.', false)
|
||||||
|
->inject('response')
|
||||||
|
->inject('dbForInternal')
|
||||||
|
->inject('projectID')
|
||||||
|
->action(function ($buildId, $response, $dbForInternal, $projectID) {
|
||||||
|
/** @var string $buildId */
|
||||||
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
|
/** @var Utopia\Database\Database $dbForInternal */
|
||||||
|
/** @var string $projectID */
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Get build document
|
||||||
|
$build = Authorization::skip(function () use ($buildId, $dbForInternal) {
|
||||||
|
return $dbForInternal->getDocument('builds', $buildId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check if build exists
|
||||||
|
if ($build->isEmpty()) {
|
||||||
|
throw new Exception('Build not found', 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if build is already running
|
||||||
|
if ($build->getAttribute('status') === 'running') {
|
||||||
|
throw new Exception('Build is already running', 409);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if build is already finished
|
||||||
|
if ($build->getAttribute('status') === 'finished') {
|
||||||
|
throw new Exception('Build is already finished', 409);
|
||||||
|
}
|
||||||
|
|
||||||
|
go(function () use ($buildId, $dbForInternal, $projectID) {
|
||||||
|
// Build Code
|
||||||
|
runBuildStage($buildId, $projectID, $dbForInternal);
|
||||||
|
});
|
||||||
|
|
||||||
|
// return success
|
||||||
|
return $response->json(['success' => true]);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$response
|
||||||
|
->addHeader('Cache-Control', 'no-cache, no-store, must-revalidate')
|
||||||
|
->addHeader('Expires', '0')
|
||||||
|
->addHeader('Pragma', 'no-cache')
|
||||||
|
->json(['error' => $e->getMessage()]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function runBuildStage(string $buildId, string $projectID, Database $database): Document
|
||||||
{
|
{
|
||||||
global $runtimes;
|
global $runtimes;
|
||||||
global $orchestration;
|
global $orchestration;
|
||||||
|
@ -329,19 +440,19 @@ function runBuildStage(string $buildId, Document $function, string $projectID, D
|
||||||
});
|
});
|
||||||
|
|
||||||
// Check if runtime is active
|
// Check if runtime is active
|
||||||
$runtime = (isset($runtimes[$function->getAttribute('runtime', '')]))
|
$runtime = (isset($runtimes[$build->getAttribute('runtime', '')]))
|
||||||
? $runtimes[$function->getAttribute('runtime', '')]
|
? $runtimes[$build->getAttribute('runtime', '')]
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
if (\is_null($runtime)) {
|
if (\is_null($runtime)) {
|
||||||
throw new Exception('Runtime "' . $function->getAttribute('runtime', '') . '" is not supported');
|
throw new Exception('Runtime "' . $build->getAttribute('runtime', '') . '" is not supported');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grab Tag Files
|
// Grab Tag Files
|
||||||
$tagPath = $build->getAttribute('source', '');
|
$tagPath = $build->getAttribute('source', '');
|
||||||
$sourceType = $build->getAttribute('sourceType', '');
|
$sourceType = $build->getAttribute('sourceType', '');
|
||||||
|
|
||||||
$device = Storage::getDevice('functions');
|
$device = Storage::getDevice('builds');
|
||||||
|
|
||||||
$tagPathTarget = '/tmp/project-' . $projectID . '/' . $build->getId() . '/code.tar.gz';
|
$tagPathTarget = '/tmp/project-' . $projectID . '/' . $build->getId() . '/code.tar.gz';
|
||||||
$tagPathTargetDir = \pathinfo($tagPathTarget, PATHINFO_DIRNAME);
|
$tagPathTargetDir = \pathinfo($tagPathTarget, PATHINFO_DIRNAME);
|
||||||
|
@ -370,16 +481,7 @@ function runBuildStage(string $buildId, Document $function, string $projectID, D
|
||||||
throw new Exception('Code is not readable: ' . $build->getAttribute('source', ''));
|
throw new Exception('Code is not readable: ' . $build->getAttribute('source', ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set build container's environment variables
|
$vars = $build->getAttribute('envVars', []);
|
||||||
$vars = \array_merge($function->getAttribute('vars', []), [
|
|
||||||
'APPWRITE_FUNCTION_ID' => $function->getId(),
|
|
||||||
'APPWRITE_FUNCTION_NAME' => $function->getAttribute('name', ''),
|
|
||||||
'APPWRITE_FUNCTION_RUNTIME_NAME' => $runtime['name'],
|
|
||||||
'APPWRITE_FUNCTION_RUNTIME_VERSION' => $runtime['version'],
|
|
||||||
'APPWRITE_FUNCTION_PROJECT_ID' => $projectID,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$vars = \array_merge($vars, $build->getAttribute('envVars', []));
|
|
||||||
|
|
||||||
// Start tracking time
|
// Start tracking time
|
||||||
$buildStart = \microtime(true);
|
$buildStart = \microtime(true);
|
||||||
|
@ -408,7 +510,7 @@ function runBuildStage(string $buildId, Document $function, string $projectID, D
|
||||||
labels: [
|
labels: [
|
||||||
'appwrite-type' => 'function',
|
'appwrite-type' => 'function',
|
||||||
'appwrite-created' => strval($buildTime),
|
'appwrite-created' => strval($buildTime),
|
||||||
'appwrite-runtime' => $function->getAttribute('runtime', ''),
|
'appwrite-runtime' => $build->getAttribute('runtime', ''),
|
||||||
'appwrite-project' => $projectID,
|
'appwrite-project' => $projectID,
|
||||||
'appwrite-build' => $build->getId(),
|
'appwrite-build' => $build->getId(),
|
||||||
],
|
],
|
||||||
|
@ -490,7 +592,7 @@ function runBuildStage(string $buildId, Document $function, string $projectID, D
|
||||||
}
|
}
|
||||||
|
|
||||||
// Upload new code
|
// Upload new code
|
||||||
$device = Storage::getDevice('functions');
|
$device = Storage::getDevice('builds');
|
||||||
|
|
||||||
$path = $device->getPath(\uniqid() . '.' . \pathinfo('code.tar.gz', PATHINFO_EXTENSION));
|
$path = $device->getPath(\uniqid() . '.' . \pathinfo('code.tar.gz', PATHINFO_EXTENSION));
|
||||||
|
|
||||||
|
@ -634,7 +736,7 @@ function createRuntimeServer(string $functionId, string $projectId, string $tagI
|
||||||
$tagPathTargetDir = \pathinfo($tagPathTarget, PATHINFO_DIRNAME);
|
$tagPathTargetDir = \pathinfo($tagPathTarget, PATHINFO_DIRNAME);
|
||||||
$container = 'appwrite-function-' . $tag->getId();
|
$container = 'appwrite-function-' . $tag->getId();
|
||||||
|
|
||||||
$device = Storage::getDevice('functions');
|
$device = Storage::getDevice('builds');
|
||||||
|
|
||||||
if (!\file_exists($tagPathTargetDir)) {
|
if (!\file_exists($tagPathTargetDir)) {
|
||||||
if (!\mkdir($tagPathTargetDir, 0755, true)) {
|
if (!\mkdir($tagPathTargetDir, 0755, true)) {
|
||||||
|
@ -814,7 +916,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
||||||
if ($build->getAttribute('status') !== 'ready') {
|
if ($build->getAttribute('status') !== 'ready') {
|
||||||
// Create a new build entry
|
// Create a new build entry
|
||||||
$buildId = $database->getId();
|
$buildId = $database->getId();
|
||||||
Authorization::skip(function () use ($buildId, $database, $tag, $userId) {
|
Authorization::skip(function () use ($buildId, $database, $tag, $userId, $runtime, $function, $projectId) {
|
||||||
$database->createDocument('builds', new Document([
|
$database->createDocument('builds', new Document([
|
||||||
'$id' => $buildId,
|
'$id' => $buildId,
|
||||||
'$read' => (!$userId == '') ? ['user:' . $userId] : [],
|
'$read' => (!$userId == '') ? ['user:' . $userId] : [],
|
||||||
|
@ -822,13 +924,19 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
||||||
'dateCreated' => time(),
|
'dateCreated' => time(),
|
||||||
'status' => 'pending',
|
'status' => 'pending',
|
||||||
'outputPath' => '',
|
'outputPath' => '',
|
||||||
|
'runtime' => $function->getAttribute('runtime', ''),
|
||||||
'source' => $tag->getAttribute('path'),
|
'source' => $tag->getAttribute('path'),
|
||||||
'sourceType' => Storage::DEVICE_LOCAL,
|
'sourceType' => Storage::DEVICE_LOCAL,
|
||||||
'stdout' => '',
|
'stdout' => '',
|
||||||
'stderr' => '',
|
'stderr' => '',
|
||||||
'buildTime' => 0,
|
'buildTime' => 0,
|
||||||
'envVars' => [
|
'envVars' => [
|
||||||
'APPWRITE_ENTRYPOINT_NAME' => $tag->getAttribute('entrypoint')
|
'APPWRITE_ENTRYPOINT_NAME' => $tag->getAttribute('entrypoint'),
|
||||||
|
'APPWRITE_FUNCTION_ID' => $function->getId(),
|
||||||
|
'APPWRITE_FUNCTION_NAME' => $function->getAttribute('name', ''),
|
||||||
|
'APPWRITE_FUNCTION_RUNTIME_NAME' => $runtime['name'],
|
||||||
|
'APPWRITE_FUNCTION_RUNTIME_VERSION' => $runtime['version'],
|
||||||
|
'APPWRITE_FUNCTION_PROJECT_ID' => $projectId,
|
||||||
]
|
]
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
@ -837,7 +945,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
||||||
$database->updateDocument('tags', $tag->getId(), $tag);
|
$database->updateDocument('tags', $tag->getId(), $tag);
|
||||||
});
|
});
|
||||||
|
|
||||||
runBuildStage($buildId, $function, $projectId, $database);
|
runBuildStage($buildId, $projectId, $database);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
@ -1099,6 +1207,7 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
|
||||||
$projectId = $request->getHeader('x-appwrite-project', '');
|
$projectId = $request->getHeader('x-appwrite-project', '');
|
||||||
|
|
||||||
Storage::setDevice('functions', new Local(APP_STORAGE_FUNCTIONS . '/app-' . $projectId));
|
Storage::setDevice('functions', new Local(APP_STORAGE_FUNCTIONS . '/app-' . $projectId));
|
||||||
|
Storage::setDevice('builds', new Local(APP_STORAGE_BUILDS . '/app-' . $projectId));
|
||||||
|
|
||||||
// Check environment variable key
|
// Check environment variable key
|
||||||
$secretKey = $request->getHeader('x-appwrite-executor-key', '');
|
$secretKey = $request->getHeader('x-appwrite-executor-key', '');
|
||||||
|
|
|
@ -73,6 +73,7 @@ const APP_DATABASE_ATTRIBUTE_FLOAT_RANGE = 'floatRange';
|
||||||
const APP_DATABASE_ATTRIBUTE_STRING_MAX_LENGTH = 1073741824; // 2^32 bits / 4 bits per char
|
const APP_DATABASE_ATTRIBUTE_STRING_MAX_LENGTH = 1073741824; // 2^32 bits / 4 bits per char
|
||||||
const APP_STORAGE_UPLOADS = '/storage/uploads';
|
const APP_STORAGE_UPLOADS = '/storage/uploads';
|
||||||
const APP_STORAGE_FUNCTIONS = '/storage/functions';
|
const APP_STORAGE_FUNCTIONS = '/storage/functions';
|
||||||
|
const APP_STORAGE_BUILDS = '/storage/builds';
|
||||||
const APP_STORAGE_CACHE = '/storage/cache';
|
const APP_STORAGE_CACHE = '/storage/cache';
|
||||||
const APP_STORAGE_CERTIFICATES = '/storage/certificates';
|
const APP_STORAGE_CERTIFICATES = '/storage/certificates';
|
||||||
const APP_STORAGE_CONFIG = '/storage/config';
|
const APP_STORAGE_CONFIG = '/storage/config';
|
||||||
|
|
|
@ -30,7 +30,7 @@ $cli
|
||||||
$production = ($git) ? (Console::confirm('Type "Appwrite" to push code to production git repos') == 'Appwrite') : false;
|
$production = ($git) ? (Console::confirm('Type "Appwrite" to push code to production git repos') == 'Appwrite') : false;
|
||||||
$message = ($git) ? Console::confirm('Please enter your commit message:') : '';
|
$message = ($git) ? Console::confirm('Please enter your commit message:') : '';
|
||||||
|
|
||||||
if(!in_array($version, ['0.6.x', '0.7.x', '0.8.x', '0.9.x', '0.10.x', '0.11.x', '0.12.x'])) {
|
if(!in_array($version, ['0.6.x', '0.7.x', '0.8.x', '0.9.x', '0.10.x', '0.11.x', '0.12.x', '0.13.x'])) {
|
||||||
throw new Exception('Unknown version given');
|
throw new Exception('Unknown version given');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled', true);
|
||||||
<div
|
<div
|
||||||
data-service="functions.get"
|
data-service="functions.get"
|
||||||
data-name="project-function"
|
data-name="project-function"
|
||||||
data-event="load,functions.update,functions.createTag,functions.updateTag,functions.deleteTag"
|
data-event="load,functions.update,functions.createTag,functions.updateTag,functions.deleteTag,functions.retryBuild"
|
||||||
data-param-function-id="{{router.params.id}}"
|
data-param-function-id="{{router.params.id}}"
|
||||||
data-success="trigger"
|
data-success="trigger"
|
||||||
data-success-param-trigger-events="functions.get">
|
data-success-param-trigger-events="functions.get">
|
||||||
|
@ -59,7 +59,7 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled', true);
|
||||||
<div class="margin-bottom"
|
<div class="margin-bottom"
|
||||||
data-service="functions.listTags"
|
data-service="functions.listTags"
|
||||||
data-scope="sdk"
|
data-scope="sdk"
|
||||||
data-event="load,functions.createTag,functions.deleteTag,functions.updateTag"
|
data-event="load,functions.createTag,functions.deleteTag,functions.updateTag,functions.retryBuild"
|
||||||
data-name="project-function-tags"
|
data-name="project-function-tags"
|
||||||
data-param-function-id="{{router.params.id}}"
|
data-param-function-id="{{router.params.id}}"
|
||||||
data-param-limit="<?php echo APP_PAGING_LIMIT; ?>"
|
data-param-limit="<?php echo APP_PAGING_LIMIT; ?>"
|
||||||
|
@ -102,7 +102,7 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled', true);
|
||||||
|
|
||||||
<button data-ui-modal-close="" type="button" class="reverse">Cancel</button>
|
<button data-ui-modal-close="" type="button" class="reverse">Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
<form data-ls-if="{{tag.$id}} !== {{project-function.tag}}" name="functions.updateTag" class="pull-end"
|
<form data-ls-if="({{tag.$id}} !== {{project-function.tag}} && {{tag.status}} == 'ready')" name="functions.updateTag" class="pull-end"
|
||||||
data-analytics
|
data-analytics
|
||||||
data-analytics-activity
|
data-analytics-activity
|
||||||
data-analytics-event="submit"
|
data-analytics-event="submit"
|
||||||
|
@ -120,6 +120,23 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled', true);
|
||||||
<input type="hidden" name="tag" data-ls-bind="{{tag.$id}}">
|
<input type="hidden" name="tag" data-ls-bind="{{tag.$id}}">
|
||||||
<button>Activate</button>
|
<button>Activate</button>
|
||||||
</form>
|
</form>
|
||||||
|
<form data-ls-if="({{tag.$id}} !== {{project-function.tag}} && {{tag.status}} == 'failed')" name="functions.retryBuild" class="pull-end"
|
||||||
|
data-analytics
|
||||||
|
data-analytics-activity
|
||||||
|
data-analytics-event="submit"
|
||||||
|
data-analytics-category="console"
|
||||||
|
data-analytics-label="Retry Build"
|
||||||
|
data-service="functions.retryBuild"
|
||||||
|
data-event="submit"
|
||||||
|
data-success="alert,trigger"
|
||||||
|
data-success-param-alert-text="Build started successfully"
|
||||||
|
data-success-param-trigger-events="functions.retryBuild"
|
||||||
|
data-failure="alert"
|
||||||
|
data-failure-param-alert-text="Failed to retry build"
|
||||||
|
data-failure-param-alert-classname="error">
|
||||||
|
<input type="hidden" name="buildId" data-ls-bind="{{tag.buildId}}">
|
||||||
|
<button>Retry Build</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
<b data-ls-bind="{{tag.$id}}"></b>
|
<b data-ls-bind="{{tag.$id}}"></b>
|
||||||
<span class="text-fade" data-ls-bind="{{tag.entrypoint}}"></span>
|
<span class="text-fade" data-ls-bind="{{tag.entrypoint}}"></span>
|
||||||
|
@ -667,7 +684,9 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled', true);
|
||||||
|
|
||||||
<label for="tag-code">Gzipped Code (tar.gz file)</label>
|
<label for="tag-code">Gzipped Code (tar.gz file)</label>
|
||||||
<input type="file" name="code" id="tag-code" size="1" required accept="application/x-gzip,.gz">
|
<input type="file" name="code" id="tag-code" size="1" required accept="application/x-gzip,.gz">
|
||||||
<div class="text-fade text-size-xs margin-top-negative-small margin-bottom-large">(Max file size allowed: <?php echo $fileLimitHuman; ?>)</div>
|
<div class="text-fade text-size-xs margin-top-negative-small margin-bottom">(Max file size allowed: <?php echo $fileLimitHuman; ?>)</div>
|
||||||
|
|
||||||
|
<label for="tag-automaticDeploy" class="margin-bottom-large">Auto Deploy Tag after build <input type="checkbox" class="margin-start-small" id="tag-automaticDeploy" name="automaticDeploy" /></label>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<button type="submit">Create</button> <button data-ui-modal-close="" type="button" class="reverse">Cancel</button>
|
<button type="submit">Create</button> <button data-ui-modal-close="" type="button" class="reverse">Cancel</button>
|
||||||
|
|
134
public/dist/scripts/app-all.js
vendored
134
public/dist/scripts/app-all.js
vendored
|
@ -106,7 +106,77 @@ if(typeof size!=='undefined'){payload['size']=size;}
|
||||||
if(typeof margin!=='undefined'){payload['margin']=margin;}
|
if(typeof margin!=='undefined'){payload['margin']=margin;}
|
||||||
if(typeof download!=='undefined'){payload['download']=download;}
|
if(typeof download!=='undefined'){payload['download']=download;}
|
||||||
const uri=new URL(this.config.endpoint+path);payload['project']=this.config.project;for(const[key,value]of Object.entries(this.flatten(payload))){uri.searchParams.append(key,value);}
|
const uri=new URL(this.config.endpoint+path);payload['project']=this.config.project;for(const[key,value]of Object.entries(this.flatten(payload))){uri.searchParams.append(key,value);}
|
||||||
return uri;}};this.database={listCollections:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/database/collections';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
return uri;}};this.functions={listBuilds:(limit,offset,search,cursor,cursorDirection)=>__awaiter(this,void 0,void 0,function*(){let path='/builds';let payload={};if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getBuild:(buildId)=>__awaiter(this,void 0,void 0,function*(){if(typeof buildId==='undefined'){throw new AppwriteException('Missing required parameter: "buildId"');}
|
||||||
|
let path='/builds/{buildId}'.replace('{buildId}',buildId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),retryBuild:(buildId)=>__awaiter(this,void 0,void 0,function*(){if(typeof buildId==='undefined'){throw new AppwriteException('Missing required parameter: "buildId"');}
|
||||||
|
let path='/builds/{buildId}'.replace('{buildId}',buildId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/functions';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),create:(functionId,name,execute,runtime,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
||||||
|
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
||||||
|
if(typeof runtime==='undefined'){throw new AppwriteException('Missing required parameter: "runtime"');}
|
||||||
|
let path='/functions';let payload={};if(typeof functionId!=='undefined'){payload['functionId']=functionId;}
|
||||||
|
if(typeof name!=='undefined'){payload['name']=name;}
|
||||||
|
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
||||||
|
if(typeof runtime!=='undefined'){payload['runtime']=runtime;}
|
||||||
|
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
||||||
|
if(typeof events!=='undefined'){payload['events']=events;}
|
||||||
|
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
||||||
|
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),get:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),update:(functionId,name,execute,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
||||||
|
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
||||||
|
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};if(typeof name!=='undefined'){payload['name']=name;}
|
||||||
|
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
||||||
|
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
||||||
|
if(typeof events!=='undefined'){payload['events']=events;}
|
||||||
|
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
||||||
|
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('put',uri,{'content-type':'application/json',},payload);}),delete:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),listExecutions:(functionId,limit,offset,search,cursor,cursorDirection)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createExecution:(functionId,data,async)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof data!=='undefined'){payload['data']=data;}
|
||||||
|
if(typeof async!=='undefined'){payload['async']=async;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),getExecution:(functionId,executionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof executionId==='undefined'){throw new AppwriteException('Missing required parameter: "executionId"');}
|
||||||
|
let path='/functions/{functionId}/executions/{executionId}'.replace('{functionId}',functionId).replace('{executionId}',executionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),updateTag:(functionId,tag)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof tag==='undefined'){throw new AppwriteException('Missing required parameter: "tag"');}
|
||||||
|
let path='/functions/{functionId}/tag'.replace('{functionId}',functionId);let payload={};if(typeof tag!=='undefined'){payload['tag']=tag;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('patch',uri,{'content-type':'application/json',},payload);}),listTags:(functionId,search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createTag:(functionId,entrypoint,code,automaticDeploy)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof entrypoint==='undefined'){throw new AppwriteException('Missing required parameter: "entrypoint"');}
|
||||||
|
if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');}
|
||||||
|
if(typeof automaticDeploy==='undefined'){throw new AppwriteException('Missing required parameter: "automaticDeploy"');}
|
||||||
|
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof entrypoint!=='undefined'){payload['entrypoint']=entrypoint;}
|
||||||
|
if(typeof code!=='undefined'){payload['code']=code;}
|
||||||
|
if(typeof automaticDeploy!=='undefined'){payload['automaticDeploy']=automaticDeploy;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'multipart/form-data',},payload);}),getTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
||||||
|
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),deleteTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
||||||
|
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),getUsage:(functionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/usage'.replace('{functionId}',functionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.database={listCollections:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/database/collections';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
@ -248,66 +318,6 @@ if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getUsage:(range)=>__awaiter(this,void 0,void 0,function*(){let path='/database/usage';let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getUsage:(range)=>__awaiter(this,void 0,void 0,function*(){let path='/database/usage';let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCollectionUsage:(collectionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');}
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCollectionUsage:(collectionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');}
|
||||||
let path='/database/{collectionId}/usage'.replace('{collectionId}',collectionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
let path='/database/{collectionId}/usage'.replace('{collectionId}',collectionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.functions={list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/functions';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
|
||||||
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
|
||||||
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),create:(functionId,name,execute,runtime,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
|
||||||
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
|
||||||
if(typeof runtime==='undefined'){throw new AppwriteException('Missing required parameter: "runtime"');}
|
|
||||||
let path='/functions';let payload={};if(typeof functionId!=='undefined'){payload['functionId']=functionId;}
|
|
||||||
if(typeof name!=='undefined'){payload['name']=name;}
|
|
||||||
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
|
||||||
if(typeof runtime!=='undefined'){payload['runtime']=runtime;}
|
|
||||||
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
|
||||||
if(typeof events!=='undefined'){payload['events']=events;}
|
|
||||||
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
|
||||||
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),get:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),update:(functionId,name,execute,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
|
||||||
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
|
||||||
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};if(typeof name!=='undefined'){payload['name']=name;}
|
|
||||||
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
|
||||||
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
|
||||||
if(typeof events!=='undefined'){payload['events']=events;}
|
|
||||||
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
|
||||||
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('put',uri,{'content-type':'application/json',},payload);}),delete:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),listExecutions:(functionId,limit,offset,search,cursor,cursorDirection)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof limit!=='undefined'){payload['limit']=limit;}
|
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
|
||||||
if(typeof search!=='undefined'){payload['search']=search;}
|
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
|
||||||
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createExecution:(functionId,data)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof data!=='undefined'){payload['data']=data;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),getExecution:(functionId,executionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof executionId==='undefined'){throw new AppwriteException('Missing required parameter: "executionId"');}
|
|
||||||
let path='/functions/{functionId}/executions/{executionId}'.replace('{functionId}',functionId).replace('{executionId}',executionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),updateTag:(functionId,tag)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof tag==='undefined'){throw new AppwriteException('Missing required parameter: "tag"');}
|
|
||||||
let path='/functions/{functionId}/tag'.replace('{functionId}',functionId);let payload={};if(typeof tag!=='undefined'){payload['tag']=tag;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('patch',uri,{'content-type':'application/json',},payload);}),listTags:(functionId,search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
|
||||||
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
|
||||||
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createTag:(functionId,entrypoint,code)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof entrypoint==='undefined'){throw new AppwriteException('Missing required parameter: "entrypoint"');}
|
|
||||||
if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');}
|
|
||||||
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof entrypoint!=='undefined'){payload['entrypoint']=entrypoint;}
|
|
||||||
if(typeof code!=='undefined'){payload['code']=code;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'multipart/form-data',},payload);}),getTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
|
||||||
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),deleteTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
|
||||||
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),getUsage:(functionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/usage'.replace('{functionId}',functionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.health={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/health';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getAntiVirus:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/anti-virus';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCache:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/cache';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getDB:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/db';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueCertificates:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/certificates';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueFunctions:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/functions';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueLogs:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/logs';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueUsage:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/usage';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueWebhooks:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/webhooks';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getStorageLocal:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/storage/local';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getTime:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/time';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.locale={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getContinents:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/continents';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountries:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesEU:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/eu';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesPhones:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/phones';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCurrencies:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/currencies';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getLanguages:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/languages';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.projects={list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/projects';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.health={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/health';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getAntiVirus:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/anti-virus';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCache:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/cache';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getDB:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/db';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueCertificates:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/certificates';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueFunctions:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/functions';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueLogs:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/logs';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueUsage:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/usage';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueWebhooks:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/webhooks';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getStorageLocal:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/storage/local';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getTime:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/time';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.locale={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getContinents:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/continents';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountries:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesEU:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/eu';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesPhones:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/phones';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCurrencies:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/currencies';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getLanguages:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/languages';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.projects={list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/projects';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
@ -3595,7 +3605,7 @@ return value+" "+unit+" "+direction;}).add("ms2hum",function($value){let temp=$v
|
||||||
(hours?hours+"h ":"")+
|
(hours?hours+"h ":"")+
|
||||||
(minutes?minutes+"m ":"")+
|
(minutes?minutes+"m ":"")+
|
||||||
Number.parseFloat(seconds).toFixed(0)+"s");}
|
Number.parseFloat(seconds).toFixed(0)+"s");}
|
||||||
return"< 1s";}).add("seconds2hum",function($value){var miliseconds=Math.ceil($value*1000);var seconds=($value).toFixed(3);var minutes=($value/(60)).toFixed(1);var hours=($value/(60*60)).toFixed(1);var days=($value/(60*60*24)).toFixed(1);if(miliseconds<1000){return miliseconds+"ms";}else if(seconds<60){return seconds+"s";}else if(minutes<60){return minutes+"m";}else if(hours<24){return hours+"h";}else{return days+"d"}}).add("markdown",function($value,markdown){return markdown.render($value);}).add("pageCurrent",function($value,env){return Math.ceil(parseInt($value||0)/env.PAGING_LIMIT)+1;}).add("pageTotal",function($value,env){let total=Math.ceil(parseInt($value||0)/env.PAGING_LIMIT);return total?total:1;}).add("humanFileSize",function($value){if(!$value){return 0;}
|
return"< 1s";}).add("seconds2hum",function($value){var seconds=($value).toFixed(3);var minutes=($value/(60)).toFixed(1);var hours=($value/(60*60)).toFixed(1);var days=($value/(60*60*24)).toFixed(1);if(seconds<60){return seconds+"s";}else if(minutes<60){return minutes+"m";}else if(hours<24){return hours+"h";}else{return days+"d"}}).add("markdown",function($value,markdown){return markdown.render($value);}).add("pageCurrent",function($value,env){return Math.ceil(parseInt($value||0)/env.PAGING_LIMIT)+1;}).add("pageTotal",function($value,env){let total=Math.ceil(parseInt($value||0)/env.PAGING_LIMIT);return total?total:1;}).add("humanFileSize",function($value){if(!$value){return 0;}
|
||||||
let thresh=1000;if(Math.abs($value)<thresh){return $value;}
|
let thresh=1000;if(Math.abs($value)<thresh){return $value;}
|
||||||
let units=["kB","MB","GB","TB","PB","EB","ZB","YB"];let u=-1;do{$value/=thresh;++u;}while(Math.abs($value)>=thresh&&u<units.length-1);return $value.toFixed(1);}).add("humanFileUnit",function($value){if(!$value){return'';}
|
let units=["kB","MB","GB","TB","PB","EB","ZB","YB"];let u=-1;do{$value/=thresh;++u;}while(Math.abs($value)>=thresh&&u<units.length-1);return $value.toFixed(1);}).add("humanFileUnit",function($value){if(!$value){return'';}
|
||||||
let thresh=1000;if(Math.abs($value)<thresh){return'B';}
|
let thresh=1000;if(Math.abs($value)<thresh){return'B';}
|
||||||
|
|
132
public/dist/scripts/app-dep.js
vendored
132
public/dist/scripts/app-dep.js
vendored
|
@ -106,7 +106,77 @@ if(typeof size!=='undefined'){payload['size']=size;}
|
||||||
if(typeof margin!=='undefined'){payload['margin']=margin;}
|
if(typeof margin!=='undefined'){payload['margin']=margin;}
|
||||||
if(typeof download!=='undefined'){payload['download']=download;}
|
if(typeof download!=='undefined'){payload['download']=download;}
|
||||||
const uri=new URL(this.config.endpoint+path);payload['project']=this.config.project;for(const[key,value]of Object.entries(this.flatten(payload))){uri.searchParams.append(key,value);}
|
const uri=new URL(this.config.endpoint+path);payload['project']=this.config.project;for(const[key,value]of Object.entries(this.flatten(payload))){uri.searchParams.append(key,value);}
|
||||||
return uri;}};this.database={listCollections:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/database/collections';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
return uri;}};this.functions={listBuilds:(limit,offset,search,cursor,cursorDirection)=>__awaiter(this,void 0,void 0,function*(){let path='/builds';let payload={};if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getBuild:(buildId)=>__awaiter(this,void 0,void 0,function*(){if(typeof buildId==='undefined'){throw new AppwriteException('Missing required parameter: "buildId"');}
|
||||||
|
let path='/builds/{buildId}'.replace('{buildId}',buildId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),retryBuild:(buildId)=>__awaiter(this,void 0,void 0,function*(){if(typeof buildId==='undefined'){throw new AppwriteException('Missing required parameter: "buildId"');}
|
||||||
|
let path='/builds/{buildId}'.replace('{buildId}',buildId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/functions';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),create:(functionId,name,execute,runtime,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
||||||
|
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
||||||
|
if(typeof runtime==='undefined'){throw new AppwriteException('Missing required parameter: "runtime"');}
|
||||||
|
let path='/functions';let payload={};if(typeof functionId!=='undefined'){payload['functionId']=functionId;}
|
||||||
|
if(typeof name!=='undefined'){payload['name']=name;}
|
||||||
|
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
||||||
|
if(typeof runtime!=='undefined'){payload['runtime']=runtime;}
|
||||||
|
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
||||||
|
if(typeof events!=='undefined'){payload['events']=events;}
|
||||||
|
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
||||||
|
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),get:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),update:(functionId,name,execute,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
||||||
|
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
||||||
|
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};if(typeof name!=='undefined'){payload['name']=name;}
|
||||||
|
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
||||||
|
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
||||||
|
if(typeof events!=='undefined'){payload['events']=events;}
|
||||||
|
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
||||||
|
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('put',uri,{'content-type':'application/json',},payload);}),delete:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),listExecutions:(functionId,limit,offset,search,cursor,cursorDirection)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createExecution:(functionId,data,async)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof data!=='undefined'){payload['data']=data;}
|
||||||
|
if(typeof async!=='undefined'){payload['async']=async;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),getExecution:(functionId,executionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof executionId==='undefined'){throw new AppwriteException('Missing required parameter: "executionId"');}
|
||||||
|
let path='/functions/{functionId}/executions/{executionId}'.replace('{functionId}',functionId).replace('{executionId}',executionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),updateTag:(functionId,tag)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof tag==='undefined'){throw new AppwriteException('Missing required parameter: "tag"');}
|
||||||
|
let path='/functions/{functionId}/tag'.replace('{functionId}',functionId);let payload={};if(typeof tag!=='undefined'){payload['tag']=tag;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('patch',uri,{'content-type':'application/json',},payload);}),listTags:(functionId,search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
||||||
|
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createTag:(functionId,entrypoint,code,automaticDeploy)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof entrypoint==='undefined'){throw new AppwriteException('Missing required parameter: "entrypoint"');}
|
||||||
|
if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');}
|
||||||
|
if(typeof automaticDeploy==='undefined'){throw new AppwriteException('Missing required parameter: "automaticDeploy"');}
|
||||||
|
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof entrypoint!=='undefined'){payload['entrypoint']=entrypoint;}
|
||||||
|
if(typeof code!=='undefined'){payload['code']=code;}
|
||||||
|
if(typeof automaticDeploy!=='undefined'){payload['automaticDeploy']=automaticDeploy;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'multipart/form-data',},payload);}),getTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
||||||
|
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),deleteTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
||||||
|
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),getUsage:(functionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
||||||
|
let path='/functions/{functionId}/usage'.replace('{functionId}',functionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
||||||
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.database={listCollections:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/database/collections';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
||||||
|
@ -248,66 +318,6 @@ if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getUsage:(range)=>__awaiter(this,void 0,void 0,function*(){let path='/database/usage';let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getUsage:(range)=>__awaiter(this,void 0,void 0,function*(){let path='/database/usage';let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCollectionUsage:(collectionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');}
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCollectionUsage:(collectionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');}
|
||||||
let path='/database/{collectionId}/usage'.replace('{collectionId}',collectionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
let path='/database/{collectionId}/usage'.replace('{collectionId}',collectionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.functions={list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/functions';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
|
||||||
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
|
||||||
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),create:(functionId,name,execute,runtime,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
|
||||||
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
|
||||||
if(typeof runtime==='undefined'){throw new AppwriteException('Missing required parameter: "runtime"');}
|
|
||||||
let path='/functions';let payload={};if(typeof functionId!=='undefined'){payload['functionId']=functionId;}
|
|
||||||
if(typeof name!=='undefined'){payload['name']=name;}
|
|
||||||
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
|
||||||
if(typeof runtime!=='undefined'){payload['runtime']=runtime;}
|
|
||||||
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
|
||||||
if(typeof events!=='undefined'){payload['events']=events;}
|
|
||||||
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
|
||||||
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),get:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),update:(functionId,name,execute,vars,events,schedule,timeout)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');}
|
|
||||||
if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');}
|
|
||||||
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};if(typeof name!=='undefined'){payload['name']=name;}
|
|
||||||
if(typeof execute!=='undefined'){payload['execute']=execute;}
|
|
||||||
if(typeof vars!=='undefined'){payload['vars']=vars;}
|
|
||||||
if(typeof events!=='undefined'){payload['events']=events;}
|
|
||||||
if(typeof schedule!=='undefined'){payload['schedule']=schedule;}
|
|
||||||
if(typeof timeout!=='undefined'){payload['timeout']=timeout;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('put',uri,{'content-type':'application/json',},payload);}),delete:(functionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),listExecutions:(functionId,limit,offset,search,cursor,cursorDirection)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof limit!=='undefined'){payload['limit']=limit;}
|
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
|
||||||
if(typeof search!=='undefined'){payload['search']=search;}
|
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
|
||||||
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createExecution:(functionId,data)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/executions'.replace('{functionId}',functionId);let payload={};if(typeof data!=='undefined'){payload['data']=data;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'application/json',},payload);}),getExecution:(functionId,executionId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof executionId==='undefined'){throw new AppwriteException('Missing required parameter: "executionId"');}
|
|
||||||
let path='/functions/{functionId}/executions/{executionId}'.replace('{functionId}',functionId).replace('{executionId}',executionId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),updateTag:(functionId,tag)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof tag==='undefined'){throw new AppwriteException('Missing required parameter: "tag"');}
|
|
||||||
let path='/functions/{functionId}/tag'.replace('{functionId}',functionId);let payload={};if(typeof tag!=='undefined'){payload['tag']=tag;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('patch',uri,{'content-type':'application/json',},payload);}),listTags:(functionId,search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
|
||||||
if(typeof cursor!=='undefined'){payload['cursor']=cursor;}
|
|
||||||
if(typeof cursorDirection!=='undefined'){payload['cursorDirection']=cursorDirection;}
|
|
||||||
if(typeof orderType!=='undefined'){payload['orderType']=orderType;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),createTag:(functionId,entrypoint,code)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof entrypoint==='undefined'){throw new AppwriteException('Missing required parameter: "entrypoint"');}
|
|
||||||
if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');}
|
|
||||||
let path='/functions/{functionId}/tags'.replace('{functionId}',functionId);let payload={};if(typeof entrypoint!=='undefined'){payload['entrypoint']=entrypoint;}
|
|
||||||
if(typeof code!=='undefined'){payload['code']=code;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('post',uri,{'content-type':'multipart/form-data',},payload);}),getTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
|
||||||
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),deleteTag:(functionId,tagId)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
if(typeof tagId==='undefined'){throw new AppwriteException('Missing required parameter: "tagId"');}
|
|
||||||
let path='/functions/{functionId}/tags/{tagId}'.replace('{functionId}',functionId).replace('{tagId}',tagId);let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('delete',uri,{'content-type':'application/json',},payload);}),getUsage:(functionId,range)=>__awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');}
|
|
||||||
let path='/functions/{functionId}/usage'.replace('{functionId}',functionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;}
|
|
||||||
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.health={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/health';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getAntiVirus:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/anti-virus';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCache:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/cache';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getDB:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/db';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueCertificates:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/certificates';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueFunctions:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/functions';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueLogs:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/logs';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueUsage:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/usage';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueWebhooks:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/webhooks';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getStorageLocal:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/storage/local';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getTime:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/time';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.locale={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getContinents:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/continents';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountries:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesEU:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/eu';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesPhones:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/phones';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCurrencies:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/currencies';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getLanguages:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/languages';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.projects={list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/projects';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.health={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/health';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getAntiVirus:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/anti-virus';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCache:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/cache';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getDB:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/db';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueCertificates:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/certificates';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueFunctions:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/functions';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueLogs:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/logs';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueUsage:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/usage';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getQueueWebhooks:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/queue/webhooks';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getStorageLocal:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/storage/local';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getTime:()=>__awaiter(this,void 0,void 0,function*(){let path='/health/time';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.locale={get:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getContinents:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/continents';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountries:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesEU:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/eu';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCountriesPhones:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/countries/phones';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getCurrencies:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/currencies';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);}),getLanguages:()=>__awaiter(this,void 0,void 0,function*(){let path='/locale/languages';let payload={};const uri=new URL(this.config.endpoint+path);return yield this.call('get',uri,{'content-type':'application/json',},payload);})};this.projects={list:(search,limit,offset,cursor,cursorDirection,orderType)=>__awaiter(this,void 0,void 0,function*(){let path='/projects';let payload={};if(typeof search!=='undefined'){payload['search']=search;}
|
||||||
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
if(typeof limit!=='undefined'){payload['limit']=limit;}
|
||||||
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
if(typeof offset!=='undefined'){payload['offset']=offset;}
|
||||||
|
|
2
public/dist/scripts/app.js
vendored
2
public/dist/scripts/app.js
vendored
|
@ -661,7 +661,7 @@ return value+" "+unit+" "+direction;}).add("ms2hum",function($value){let temp=$v
|
||||||
(hours?hours+"h ":"")+
|
(hours?hours+"h ":"")+
|
||||||
(minutes?minutes+"m ":"")+
|
(minutes?minutes+"m ":"")+
|
||||||
Number.parseFloat(seconds).toFixed(0)+"s");}
|
Number.parseFloat(seconds).toFixed(0)+"s");}
|
||||||
return"< 1s";}).add("seconds2hum",function($value){var miliseconds=Math.ceil($value*1000);var seconds=($value).toFixed(3);var minutes=($value/(60)).toFixed(1);var hours=($value/(60*60)).toFixed(1);var days=($value/(60*60*24)).toFixed(1);if(miliseconds<1000){return miliseconds+"ms";}else if(seconds<60){return seconds+"s";}else if(minutes<60){return minutes+"m";}else if(hours<24){return hours+"h";}else{return days+"d"}}).add("markdown",function($value,markdown){return markdown.render($value);}).add("pageCurrent",function($value,env){return Math.ceil(parseInt($value||0)/env.PAGING_LIMIT)+1;}).add("pageTotal",function($value,env){let total=Math.ceil(parseInt($value||0)/env.PAGING_LIMIT);return total?total:1;}).add("humanFileSize",function($value){if(!$value){return 0;}
|
return"< 1s";}).add("seconds2hum",function($value){var seconds=($value).toFixed(3);var minutes=($value/(60)).toFixed(1);var hours=($value/(60*60)).toFixed(1);var days=($value/(60*60*24)).toFixed(1);if(seconds<60){return seconds+"s";}else if(minutes<60){return minutes+"m";}else if(hours<24){return hours+"h";}else{return days+"d"}}).add("markdown",function($value,markdown){return markdown.render($value);}).add("pageCurrent",function($value,env){return Math.ceil(parseInt($value||0)/env.PAGING_LIMIT)+1;}).add("pageTotal",function($value,env){let total=Math.ceil(parseInt($value||0)/env.PAGING_LIMIT);return total?total:1;}).add("humanFileSize",function($value){if(!$value){return 0;}
|
||||||
let thresh=1000;if(Math.abs($value)<thresh){return $value;}
|
let thresh=1000;if(Math.abs($value)<thresh){return $value;}
|
||||||
let units=["kB","MB","GB","TB","PB","EB","ZB","YB"];let u=-1;do{$value/=thresh;++u;}while(Math.abs($value)>=thresh&&u<units.length-1);return $value.toFixed(1);}).add("humanFileUnit",function($value){if(!$value){return'';}
|
let units=["kB","MB","GB","TB","PB","EB","ZB","YB"];let u=-1;do{$value/=thresh;++u;}while(Math.abs($value)>=thresh&&u<units.length-1);return $value.toFixed(1);}).add("humanFileUnit",function($value){if(!$value){return'';}
|
||||||
let thresh=1000;if(Math.abs($value)<thresh){return'B';}
|
let thresh=1000;if(Math.abs($value)<thresh){return'B';}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -35,10 +35,10 @@ class Tag extends Model
|
||||||
'example' => 'enabled',
|
'example' => 'enabled',
|
||||||
])
|
])
|
||||||
->addRule('size', [
|
->addRule('size', [
|
||||||
'type' => self::TYPE_STRING,
|
'type' => self::TYPE_INTEGER,
|
||||||
'description' => 'The code size in bytes.',
|
'description' => 'The code size in bytes.',
|
||||||
'default' => '',
|
'default' => 0,
|
||||||
'example' => 'python-3.8',
|
'example' => 128,
|
||||||
])
|
])
|
||||||
->addRule('status', [
|
->addRule('status', [
|
||||||
'type' => self::TYPE_STRING,
|
'type' => self::TYPE_STRING,
|
||||||
|
@ -46,6 +46,12 @@ class Tag extends Model
|
||||||
'default' => '',
|
'default' => '',
|
||||||
'example' => 'ready',
|
'example' => 'ready',
|
||||||
])
|
])
|
||||||
|
->addRule('buildId', [
|
||||||
|
'type' => self::TYPE_STRING,
|
||||||
|
'description' => 'The current build ID.',
|
||||||
|
'default' => '',
|
||||||
|
'example' => '5e5ea5c16897e',
|
||||||
|
])
|
||||||
->addRule('buildStdout', [
|
->addRule('buildStdout', [
|
||||||
'type' => self::TYPE_STRING,
|
'type' => self::TYPE_STRING,
|
||||||
'description' => 'The stdout of the build.',
|
'description' => 'The stdout of the build.',
|
||||||
|
@ -58,6 +64,12 @@ class Tag extends Model
|
||||||
'default' => '',
|
'default' => '',
|
||||||
'example' => '',
|
'example' => '',
|
||||||
])
|
])
|
||||||
|
->addRule('automaticDeploy', [
|
||||||
|
'type' => self::TYPE_BOOLEAN,
|
||||||
|
'description' => 'Whether the tag should be automatically deployed.',
|
||||||
|
'default' => false,
|
||||||
|
'example' => true,
|
||||||
|
])
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue