Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions app/controllers/api/vcs.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Vcs\Comment;
use Swoole\Coroutine\WaitGroup;
use Utopia\App;
use Utopia\CLI\Console;
use Utopia\Config\Config;
Expand Down Expand Up @@ -963,6 +964,46 @@
throw new Exception(Exception::FUNCTION_RUNTIME_NOT_DETECTED);
}
}

$wg = new WaitGroup();
$envs = [];
foreach ($files as $file) {
if (!(\str_starts_with($file, '.env'))) {
continue;
}

$wg->add();
go(function () use ($github, $owner, $repositoryName, $providerRootDirectory, $file, $wg, &$envs) {
try {
$contentResponse = $github->getRepositoryContent($owner, $repositoryName, \rtrim($providerRootDirectory, '/') . '/' . $file);
$envFile = $contentResponse['content'] ?? '';

$envLines = \explode("\n", $envFile);
foreach ($envLines as $line) {
$parts = \explode('=', $line, 2);
$envName = \trim($parts[0] ?? '');
$envValue = \trim($parts[1] ?? '');
if (!empty($envName)) {
$envs[$envName] = $envValue;
}
}
} finally {
$wg->done();
}
});
}
$wg->wait();

$variables = [];
foreach ($envs as $key => $value) {
$variables[] = [
'name' => $key,
'value' => $value,
];
}

$output->setAttribute('variables', $variables);
Comment thread
Meldiron marked this conversation as resolved.

$response->dynamic($output, $type === 'framework' ? Response::MODEL_DETECTION_FRAMEWORK : Response::MODEL_DETECTION_RUNTIME);
});

Expand Down Expand Up @@ -1137,6 +1178,44 @@
$repo['runtime'] = $runtimeWithVersion ?? '';
}
}

$wg = new WaitGroup();
$envs = [];
foreach ($files as $file) {
if (!(\str_starts_with($file, '.env'))) {
continue;
}

$wg->add();
go(function () use ($github, $repo, $file, $wg, &$envs) {
try {
$contentResponse = $github->getRepositoryContent($repo['organization'], $repo['name'], $file);
$envFile = $contentResponse['content'] ?? '';

$envLines = \explode("\n", $envFile);
foreach ($envLines as $line) {
$parts = \explode('=', $line, 2);
$envName = \trim($parts[0] ?? '');
$envValue = \trim($parts[1] ?? '');
if (!empty($envName)) {
$envs[$envName] = $envValue;
}
}
} finally {
$wg->done();
}
});
}
$wg->wait();

$repo['variables'] = [];
foreach ($envs as $key => $value) {
$repo['variables'][] = [
'name' => $key,
'value' => $value,
];
}

return $repo;
};
}, $repos));
Expand Down
54 changes: 27 additions & 27 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/Appwrite/Utopia/Response.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
use Appwrite\Utopia\Response\Model\Deployment;
use Appwrite\Utopia\Response\Model\DetectionFramework;
use Appwrite\Utopia\Response\Model\DetectionRuntime;
use Appwrite\Utopia\Response\Model\DetectionVariable;
use Appwrite\Utopia\Response\Model\DevKey;
use Appwrite\Utopia\Response\Model\Document as ModelDocument;
use Appwrite\Utopia\Response\Model\Error;
Expand Down Expand Up @@ -316,6 +317,7 @@ class Response extends SwooleResponse
public const MODEL_BRANCH = 'branch';
public const MODEL_BRANCH_LIST = 'branchList';
public const MODEL_DETECTION_FRAMEWORK = 'detectionFramework';
public const MODEL_DETECTION_VARIABLE = 'detectionVariable';
public const MODEL_DETECTION_RUNTIME = 'detectionRuntime';
public const MODEL_VCS_CONTENT = 'vcsContent';
public const MODEL_VCS_CONTENT_LIST = 'vcsContentList';
Expand Down Expand Up @@ -563,6 +565,7 @@ public function __construct(SwooleHTTPResponse $response)
->setModel(new ProviderRepositoryRuntime())
->setModel(new DetectionFramework())
->setModel(new DetectionRuntime())
->setModel(new DetectionVariable())
->setModel(new VcsContent())
->setModel(new Branch())
->setModel(new Runtime())
Expand Down
22 changes: 22 additions & 0 deletions src/Appwrite/Utopia/Response/Model/Detection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Appwrite\Utopia\Response\Model;

use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;

abstract class Detection extends Model
{
public function __construct()
{
$this
->addRule('variables', [
'type' => Response::MODEL_DETECTION_VARIABLE,
'description' => 'Environment variables found in .env files',
'required' => false,
'default' => [],
'example' => new \stdClass(),
'array' => true,
]);
}
}
5 changes: 3 additions & 2 deletions src/Appwrite/Utopia/Response/Model/DetectionFramework.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
namespace Appwrite\Utopia\Response\Model;

use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;

class DetectionFramework extends Model
class DetectionFramework extends Detection
{
public function __construct()
{
parent::__construct();

$this
->addRule('framework', [
'type' => self::TYPE_STRING,
Expand Down
5 changes: 3 additions & 2 deletions src/Appwrite/Utopia/Response/Model/DetectionRuntime.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
namespace Appwrite\Utopia\Response\Model;

use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;

class DetectionRuntime extends Model
class DetectionRuntime extends Detection
{
public function __construct()
{
parent::__construct();

$this
->addRule('runtime', [
'type' => self::TYPE_STRING,
Expand Down
46 changes: 46 additions & 0 deletions src/Appwrite/Utopia/Response/Model/DetectionVariable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

namespace Appwrite\Utopia\Response\Model;

use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;

class DetectionVariable extends Model
{
public function __construct()
{
$this
->addRule('name', [
'type' => self::TYPE_STRING,
'description' => 'Name of environment variable',
'default' => '',
'example' => 'NODE_ENV',
])
->addRule('value', [
'type' => self::TYPE_STRING,
'description' => 'Value of environment variable',
'default' => '',
'example' => 'production',
]);
}

/**
* Get Name
*
* @return string
*/
public function getName(): string
{
return 'DetectionVariable';
}

/**
* Get Type
*
* @return string
*/
public function getType(): string
{
return Response::MODEL_DETECTION_VARIABLE;
}
Comment thread
Meldiron marked this conversation as resolved.
}
Loading