1
0
Fork 0
mirror of synced 2024-09-20 03:17:30 +12:00

Fix manual templates

This commit is contained in:
Matej Bačo 2024-08-13 10:50:58 +00:00
parent 282f5088db
commit 380dc8a106
6 changed files with 156 additions and 62 deletions

View file

@ -80,7 +80,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [],
'scopes' => ["users.read"]
],
@ -106,7 +106,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'UPSTASH_URL',
@ -149,7 +149,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'REDIS_HOST',
@ -191,7 +191,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'NEO4J_URI',
@ -242,7 +242,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'MONGO_URI',
@ -278,7 +278,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'PGHOST',
@ -362,7 +362,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'OPENAI_API_KEY',
@ -416,7 +416,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'DISCORD_PUBLIC_KEY',
@ -466,7 +466,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'PERSPECTIVE_API_KEY',
@ -513,7 +513,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'PANGEA_REDACT_TOKEN',
@ -542,7 +542,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => []
],
[
@ -568,7 +568,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'GITHUB_TOKEN',
@ -610,7 +610,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -673,7 +673,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -766,7 +766,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -865,7 +865,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'VONAGE_API_KEY',
@ -920,7 +920,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'FCM_PROJECT_ID',
@ -987,7 +987,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'SMTP_HOST',
@ -1057,7 +1057,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'STRIPE_SECRET_KEY',
@ -1098,7 +1098,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'STRIPE_SECRET_KEY',
@ -1155,7 +1155,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'HUGGINGFACE_ACCESS_TOKEN',
@ -1188,7 +1188,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'HUGGINGFACE_ACCESS_TOKEN',
@ -1221,7 +1221,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -1279,7 +1279,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -1337,7 +1337,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -1395,7 +1395,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',
@ -1453,7 +1453,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'REPLICATE_API_KEY',
@ -1487,7 +1487,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'TOGETHER_API_KEY',
@ -1529,7 +1529,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'PERPLEXITY_API_KEY',
@ -1569,7 +1569,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'REPLICATE_API_KEY',
@ -1603,7 +1603,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'OPENAI_API_KEY',
@ -1666,7 +1666,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'OPENAI_API_KEY',
@ -1729,7 +1729,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'ELEVENLABS_API_KEY',
@ -1784,7 +1784,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'LMNT_API_KEY',
@ -1825,7 +1825,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'ANYSCALE_API_KEY',
@ -1865,7 +1865,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_BUCKET_ID',
@ -1907,7 +1907,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'FAL_API_KEY',
@ -1941,7 +1941,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'LEMON_SQUEEZY_API_KEY',
@ -1996,7 +1996,7 @@ return [
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerBranch' => 'main',
'providerBranch' => '0.2.*',
'variables' => [
[
'name' => 'APPWRITE_DATABASE_ID',

View file

@ -284,9 +284,34 @@ App::post('/v1/functions')
$function = $dbForProject->updateDocument('functions', $function->getId(), $function);
// Redeploy vcs logic
if (!empty($providerRepositoryId)) {
// Deploy VCS
$redeployVcs($request, $function, $project, $installation, $dbForProject, $queueForBuilds, $template, $github);
} elseif(!$template->isEmpty()) {
// Deploy non-VCS from template
$deploymentId = ID::unique();
$deployment = $dbForProject->createDocument('deployments', new Document([
'$id' => $deploymentId,
'$permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
'resourceId' => $function->getId(),
'resourceInternalId' => $function->getInternalId(),
'resourceType' => 'functions',
'entrypoint' => $function->getAttribute('entrypoint', ''),
'commands' => $function->getAttribute('commands', ''),
'type' => 'manual',
'search' => implode(' ', [$deploymentId, $function->getAttribute('entrypoint', '')]),
'activate' => true,
]));
$queueForBuilds
->setType(BUILD_TYPE_DEPLOYMENT)
->setResource($function)
->setDeployment($deployment)
->setTemplate($template);
}
$functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', '');

View file

@ -69,7 +69,7 @@
"utopia-php/storage": "0.18.*",
"utopia-php/swoole": "0.8.*",
"utopia-php/system": "0.8.*",
"utopia-php/vcs": "0.7.*",
"utopia-php/vcs": "dev-fix-unauthorized-clone as 0.7.99",
"utopia-php/websocket": "0.1.*",
"matomo/device-detector": "6.1.*",
"dragonmantank/cron-expression": "3.3.2",

41
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "349cdb39bce652b164706de8b399b911",
"content-hash": "15ad1b6580df488ad53dee9760b4edde",
"packages": [
{
"name": "adhocore/jwt",
@ -1721,16 +1721,16 @@
},
{
"name": "utopia-php/database",
"version": "0.50.3",
"version": "0.50.4",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "4287e6625c7273411c7322abd151c4285ee7b50f"
"reference": "fd3b856be77bd643bc8a9e3572ee11e4185b9230"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/4287e6625c7273411c7322abd151c4285ee7b50f",
"reference": "4287e6625c7273411c7322abd151c4285ee7b50f",
"url": "https://api.github.com/repos/utopia-php/database/zipball/fd3b856be77bd643bc8a9e3572ee11e4185b9230",
"reference": "fd3b856be77bd643bc8a9e3572ee11e4185b9230",
"shasum": ""
},
"require": {
@ -1771,9 +1771,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/0.50.3"
"source": "https://github.com/utopia-php/database/tree/0.50.4"
},
"time": "2024-08-08T01:40:54+00:00"
"time": "2024-08-13T03:18:26+00:00"
},
{
"name": "utopia-php/domains",
@ -2758,16 +2758,16 @@
},
{
"name": "utopia-php/vcs",
"version": "0.7.0",
"version": "dev-fix-unauthorized-clone",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/vcs.git",
"reference": "4745fcf385cb8f5b645be447cc1631930853c8af"
"reference": "515e796de71982f485aed6b43753ea9eb80c692b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/vcs/zipball/4745fcf385cb8f5b645be447cc1631930853c8af",
"reference": "4745fcf385cb8f5b645be447cc1631930853c8af",
"url": "https://api.github.com/repos/utopia-php/vcs/zipball/515e796de71982f485aed6b43753ea9eb80c692b",
"reference": "515e796de71982f485aed6b43753ea9eb80c692b",
"shasum": ""
},
"require": {
@ -2801,9 +2801,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/vcs/issues",
"source": "https://github.com/utopia-php/vcs/tree/0.7.0"
"source": "https://github.com/utopia-php/vcs/tree/fix-unauthorized-clone"
},
"time": "2024-06-26T09:44:52+00:00"
"time": "2024-08-13T10:33:07+00:00"
},
{
"name": "utopia-php/websocket",
@ -5591,9 +5591,18 @@
"time": "2023-11-21T18:54:41+00:00"
}
],
"aliases": [],
"aliases": [
{
"package": "utopia-php/vcs",
"version": "dev-fix-unauthorized-clone",
"alias": "0.7.99",
"alias_normalized": "0.7.99.0"
}
],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {
"utopia-php/vcs": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
@ -5617,5 +5626,5 @@
"platform-overrides": {
"php": "8.3"
},
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}

View file

@ -195,7 +195,7 @@ services:
appwrite-console:
<<: *x-logging
container_name: appwrite-console
image: appwrite/console:5.0.0-rc14
image: appwrite/console:5.0.0-dev1
restart: unless-stopped
networks:
- appwrite

View file

@ -207,7 +207,66 @@ class Builds extends Action
}
try {
if ($isNewBuild && $isVcsEnabled) {
if($isNewBuild && !$isVcsEnabled) {
// Non-vcs+Template
$templateRepositoryName = $template->getAttribute('repositoryName', '');
$templateOwnerName = $template->getAttribute('ownerName', '');
$templateBranch = $template->getAttribute('branch', '');
$templateRootDirectory = $template->getAttribute('rootDirectory', '');
$templateRootDirectory = \rtrim($templateRootDirectory, '/');
$templateRootDirectory = \ltrim($templateRootDirectory, '.');
$templateRootDirectory = \ltrim($templateRootDirectory, '/');
if (!empty($templateRepositoryName) && !empty($templateOwnerName) && !empty($templateBranch)) {
$stdout = '';
$stderr = '';
// Clone template repo
$tmpTemplateDirectory = '/tmp/builds/' . \escapeshellcmd($buildId) . '-template';
$gitCloneCommandForTemplate = $github->generateCloneCommand($templateOwnerName, $templateRepositoryName, $templateBranch, GitHub::CLONE_TYPE_TAG, $tmpTemplateDirectory, $templateRootDirectory);
$exit = Console::execute($gitCloneCommandForTemplate, '', $stdout, $stderr);
if ($exit !== 0) {
throw new \Exception('Unable to clone code repository: ' . $stderr);
}
// Ensure directories
Console::execute('mkdir -p ' . $tmpTemplateDirectory . '/' . $templateRootDirectory, '', $stdout, $stderr);
$tmpPathFile = $tmpTemplateDirectory . '/code.tar.gz';
$localDevice = new Local();
if (substr($tmpTemplateDirectory, -1) !== '/') {
$tmpTemplateDirectory .= '/';
}
$directorySize = $localDevice->getDirectorySize($tmpTemplateDirectory);
$functionsSizeLimit = (int)System::getEnv('_APP_FUNCTIONS_SIZE_LIMIT', '30000000');
if ($directorySize > $functionsSizeLimit) {
throw new \Exception('Repository directory size should be less than ' . number_format($functionsSizeLimit / 1048576, 2) . ' MBs.');
}
Console::execute('tar --exclude code.tar.gz -czf ' . $tmpPathFile . ' -C /tmp/builds/' . \escapeshellcmd($buildId) . '-template' . (empty($templateRootDirectory) ? '' : '/' . $templateRootDirectory) . ' .', '', $stdout, $stderr);
$path = $deviceForFunctions->getPath($deployment->getId() . '.' . \pathinfo('code.tar.gz', PATHINFO_EXTENSION));
$result = $localDevice->transfer($tmpPathFile, $path, $deviceForFunctions);
if (!$result) {
throw new \Exception("Unable to move file");
}
Console::execute('rm -rf ' . $tmpTemplateDirectory, '', $stdout, $stderr);
$source = $path;
$build = $dbForProject->updateDocument('builds', $build->getId(), $build->setAttribute('source', $source));
$deployment = $dbForProject->updateDocument('deployments', $deployment->getId(), $deployment->setAttribute('path', $source));
}
} elseif ($isNewBuild && $isVcsEnabled) {
// VCS and VCS+Temaplte
$tmpDirectory = '/tmp/builds/' . $buildId . '/code';
$rootDirectory = $function->getAttribute('providerRootDirectory', '');
$rootDirectory = \rtrim($rootDirectory, '/');
@ -222,7 +281,8 @@ class Builds extends Action
$branchName = $deployment->getAttribute('providerBranch');
$commitHash = $deployment->getAttribute('providerCommitHash', '');
$gitCloneCommand = $github->generateCloneCommand($cloneOwner, $cloneRepository, $branchName, $tmpDirectory, $rootDirectory . '/*', $commitHash);
$gitCloneCommandForTemplate = $github->generateCloneCommand($cloneOwner, $cloneRepository, $commitHash, GitHub::CLONE_TYPE_COMMIT, $tmpDirectory, $rootDirectory . '/*');
$stdout = '';
$stderr = '';
@ -233,7 +293,7 @@ class Builds extends Action
return;
}
$exit = Console::execute($gitCloneCommand, '', $stdout, $stderr);
$exit = Console::execute($gitCloneCommandForTemplate, '', $stdout, $stderr);
if ($exit !== 0) {
throw new \Exception('Unable to clone code repository: ' . $stderr);
@ -266,7 +326,7 @@ class Builds extends Action
if (!empty($templateRepositoryName) && !empty($templateOwnerName) && !empty($templateBranch)) {
// Clone template repo
$tmpTemplateDirectory = '/tmp/builds/' . \escapeshellcmd($buildId) . '/template';
$gitCloneCommandForTemplate = $github->generateCloneCommand($templateOwnerName, $templateRepositoryName, $templateBranch, $tmpTemplateDirectory, $templateRootDirectory);
$gitCloneCommandForTemplate = $github->generateCloneCommand($templateOwnerName, $templateRepositoryName, $templateBranch, GitHub::CLONE_TYPE_TAG, $tmpTemplateDirectory, $templateRootDirectory);
$exit = Console::execute($gitCloneCommandForTemplate, '', $stdout, $stderr);
if ($exit !== 0) {