From 510fdfdf6d2c414527957481732bb23d192d8cc2 Mon Sep 17 00:00:00 2001 From: William Allen Date: Sun, 18 Jan 2026 12:50:09 -0500 Subject: [PATCH] Revamp project creation page --- .../Controllers/CreateProjectController.php | 20 ++ app/cdash/app/Model/Project.php | 2 +- app/cdash/tests/CMakeLists.txt | 2 + config/cdash.php | 1 + ...18_161331_nullable_project_description.php | 16 ++ graphql/schema.graphql | 4 +- resources/js/vue/app.js | 2 + .../js/vue/components/CreateProjectPage.vue | 239 ++++++++++++++++++ routes/web.php | 3 +- tests/Browser/Pages/CreateProjectPageTest.php | 164 ++++++++++++ 10 files changed, 449 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/CreateProjectController.php create mode 100644 database/migrations/2026_01_18_161331_nullable_project_description.php create mode 100644 resources/js/vue/components/CreateProjectPage.vue create mode 100644 tests/Browser/Pages/CreateProjectPageTest.php diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php new file mode 100644 index 0000000000..e6fd4cf30c --- /dev/null +++ b/app/Http/Controllers/CreateProjectController.php @@ -0,0 +1,20 @@ +vue('create-project-page', 'Create Project', [ + 'max-project-visibility' => $request->user()->admin ?? false ? 'PUBLIC' : config('cdash.max_project_visibility'), + ]); + } +} diff --git a/app/cdash/app/Model/Project.php b/app/cdash/app/Model/Project.php index 713b903bf9..0a22968019 100644 --- a/app/cdash/app/Model/Project.php +++ b/app/cdash/app/Model/Project.php @@ -114,7 +114,7 @@ public function Save(): bool $project = EloquentProject::findOrNew($this->Id); $project->fill([ 'name' => $this->Name ?? '', - 'description' => $this->Description ?? '', + 'description' => $this->Description, 'homeurl' => $this->HomeUrl ?? '', 'cvsurl' => $this->CvsUrl ?? '', 'documentationurl' => $this->DocumentationUrl ?? '', diff --git a/app/cdash/tests/CMakeLists.txt b/app/cdash/tests/CMakeLists.txt index e8ba0debca..4ae7a27844 100644 --- a/app/cdash/tests/CMakeLists.txt +++ b/app/cdash/tests/CMakeLists.txt @@ -332,6 +332,8 @@ add_browser_test(/Browser/Pages/ProjectMembersPageTest) add_browser_test(/Browser/Pages/ProjectBuildsPageTest) +add_browser_test(/Browser/Pages/CreateProjectPageTest) + add_browser_test(/Browser/Pages/ProjectsPageTest) set_property(TEST /Browser/Pages/ProjectsPageTest APPEND PROPERTY RUN_SERIAL TRUE) diff --git a/config/cdash.php b/config/cdash.php index 55014656f5..2ab98b606e 100755 --- a/config/cdash.php +++ b/config/cdash.php @@ -61,6 +61,7 @@ 'allow_submit_only_tokens' => env('ALLOW_SUBMIT_ONLY_TOKENS', true), 'unlimited_projects' => $unlimited_projects, 'user_create_projects' => env('USER_CREATE_PROJECTS', false), + // Options: PUBLIC, PROTECTED, PRIVATE // Defaults to public. Only meaningful if USER_CREATE_PROJECT=true. 'max_project_visibility' => env('MAX_PROJECT_VISIBILITY', 'PUBLIC'), 'require_authenticated_submissions' => env('REQUIRE_AUTHENTICATED_SUBMISSIONS', false), diff --git a/database/migrations/2026_01_18_161331_nullable_project_description.php b/database/migrations/2026_01_18_161331_nullable_project_description.php new file mode 100644 index 0000000000..b15995f02d --- /dev/null +++ b/database/migrations/2026_01_18_161331_nullable_project_description.php @@ -0,0 +1,16 @@ + import('./components/Bui const BuildCommandsPage = Vue.defineAsyncComponent(() => import('./components/BuildCommandsPage.vue')); const CoverageFilePage = Vue.defineAsyncComponent(() => import('./components/CoverageFilePage.vue')); const BuildCoveragePage = Vue.defineAsyncComponent(() => import('./components/BuildCoveragePage.vue')); +const CreateProjectPage = Vue.defineAsyncComponent(() => import('./components/CreateProjectPage.vue')); const cdash_components = { BuildConfigure, @@ -59,6 +60,7 @@ const cdash_components = { BuildCommandsPage, CoverageFilePage, BuildCoveragePage, + CreateProjectPage, }; const app = Vue.createApp({ diff --git a/resources/js/vue/components/CreateProjectPage.vue b/resources/js/vue/components/CreateProjectPage.vue new file mode 100644 index 0000000000..d8a9d57184 --- /dev/null +++ b/resources/js/vue/components/CreateProjectPage.vue @@ -0,0 +1,239 @@ +