builds) === 0; } public function addBuild(Document $project, Document $function, string $buildStatus, string $deploymentId, array $action): void { // Unique index $id = $project->getId() . '_' . $function->getId(); $this->builds[$id] = [ 'projectName' => $project->getAttribute('name'), 'projectId' => $project->getId(), 'functionName' => $function->getAttribute('name'), 'functionId' => $function->getId(), 'buildStatus' => $buildStatus, 'deploymentId' => $deploymentId, 'action' => $action, ]; } public function generateComment(): string { $json = \json_encode($this->builds); $text = $this->statePrefix . \base64_encode($json) . "\n\n"; $projects = []; foreach ($this->builds as $id => $build) { if (!\array_key_exists($build['projectId'], $projects)) { $projects[$build['projectId']] = [ 'name' => $build['projectName'], 'functions' => [] ]; } $projects[$build['projectId']]['functions'][$build['functionId']] = [ 'name' => $build['functionName'], 'status' => $build['buildStatus'], 'deploymentId' => $build['deploymentId'], 'action' => $build['action'], ]; } //TODO: Update link to documentation $text .= "**Your function has automatically been deployed.** Learn more about Appwrite Function Deployments in our [documentation](https://appwrite.io/docs/functions).\n\n"; foreach ($projects as $projectId => $project) { $text .= "**{$project['name']}** `{$projectId}`\n\n"; $text .= "| Function | ID | Status | Action |\n"; $text .= "| :- | :- | :- | :- |\n"; $protocol = App::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; $hostname = App::getEnv('_APP_DOMAIN'); foreach ($project['functions'] as $functionId => $function) { $status = match ($function['status']) { 'waiting' => 'Waiting Waiting to build', 'processing' => 'Processing Processing', 'building' => 'Building Building', 'ready' => 'Ready Ready', 'failed' => 'Failed Failed', }; if ($function['action']['type'] === 'logs') { $action = '[View Logs](' . $protocol . '://' . $hostname . '/console/project-' . $projectId . '/functions/function-' . $functionId . '/deployment-' . $function['deploymentId'] . ')'; } else { $action = '[Authorize](' . $function['action']['url'] . ')'; } $text .= "| {$function['name']} | `{$functionId}` | {$status} | {$action} |\n"; } $text .= "\n\n"; } //TODO: Update did you know section $text .= "> **💡 Did you know?** \n Appwrite has a Discord community with over 16 000 members. [Come join us!](https://appwrite.io/discord)\n\n"; return $text; } public function parseComment(string $comment): self { $state = \explode("\n", $comment)[0] ?? ''; $state = substr($state, strlen($this->statePrefix)); $json = \base64_decode($state); $builds = \json_decode($json, true); $this->builds = $builds; return $this; } }