Add Deck workflow automation Nextcloud app
Lint info.xml / xml-lint (push) Successful in 30s
Lint PHP / php-lint (8.2) (push) Successful in 55s
Lint PHP / php-lint (8.3) (push) Successful in 44s
Lint PHP / php-lint (8.4) (push) Successful in 41s
PHPUnit / unit-tests (push) Failing after 41s

Ports the standalone due-date cron script into a proper Nextcloud 34
app with a personal-settings UI, per-user workflow configuration
(source/target stack, assigned-user and label filters, email
notification), a TimedJob background runner, and Gitea CI pipelines.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Patrick Niebeling
2026-08-13 10:13:05 +02:00
co-authored by Claude Sonnet 5
commit 300acde27e
34 changed files with 1918 additions and 0 deletions
@@ -0,0 +1,66 @@
<?php
declare(strict_types=1);
namespace OCA\WorkflowDeckAutomation\Migration;
use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\DB\Types;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
class Version1000Date20260813120000 extends SimpleMigrationStep {
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();
if (!$schema->hasTable('wfda_workflows')) {
$table = $schema->createTable('wfda_workflows');
$table->addColumn('id', Types::INTEGER, [
'autoincrement' => true,
'notnull' => true,
]);
$table->addColumn('user_id', Types::STRING, [
'notnull' => true,
'length' => 64,
]);
$table->addColumn('title', Types::STRING, [
'notnull' => true,
'length' => 255,
]);
$table->addColumn('board_id', Types::INTEGER, [
'notnull' => true,
]);
$table->addColumn('source_stack_id', Types::INTEGER, [
'notnull' => true,
]);
$table->addColumn('target_stack_id', Types::INTEGER, [
'notnull' => true,
]);
$table->addColumn('filter_user_ids', Types::TEXT, [
'notnull' => false,
]);
$table->addColumn('filter_label_ids', Types::TEXT, [
'notnull' => false,
]);
$table->addColumn('notify_email', Types::BOOLEAN, [
'notnull' => true,
'default' => false,
]);
$table->addColumn('enabled', Types::BOOLEAN, [
'notnull' => true,
'default' => true,
]);
$table->addColumn('last_run', Types::DATETIME, [
'notnull' => false,
]);
$table->setPrimaryKey(['id']);
$table->addIndex(['user_id'], 'wfda_workflows_uid_idx');
$table->addIndex(['enabled'], 'wfda_workflows_enabled_idx');
}
return $schema;
}
}