Auto-Expand Rows
+ Auto-Expand Rows
{% endif %}
@@ -308,7 +308,7 @@
{% set total = total + component_score %}
el.clientHeight) ? (el.scrollHeight)+"px" : "30px";
+function adjustHeight(el) {
+ el.style.height = (el.scrollHeight > el.clientHeight) ? `${el.scrollHeight}px` : '30px';
}
function minimizeHeight(el) {
el.style.height = '30px';
From a362c308b07f6f549aca6b035f93d9f7b9c3fa2d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 31 Jan 2026 16:45:03 -0500
Subject: [PATCH 03/28] [DevDependency] Bump phpunit/phpunit from 10.5.46 to
10.5.62 in /site in the composer group across 1 directory (#12356)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps the composer group with 1 update in the /site directory:
[phpunit/phpunit](https://github.com/sebastianbergmann/phpunit).
Updates `phpunit/phpunit` from 10.5.46 to 10.5.62
Release notes
Sourced from phpunit/phpunit's
releases .
PHPUnit 10.5.62
Changed
To prevent Poisoned Pipeline Execution (PPE) attacks using prepared
.coverage files in pull requests, a PHPT test will no
longer be run if the temporary file for writing code coverage
information already exists before the test runs
Learn how to install or update PHPUnit 10.5 in the documentation .
Keep up to date with PHPUnit:
You can follow @phpunit@phpc.social
to stay up to date with PHPUnit's development.
You can subscribe to the PHPUnit Updates newsletter to
receive updates about and tips for PHPUnit.
PHPUnit 10.5.61
Changed
PHPUnit\Framework\MockObject exceptions are now
subtypes of PHPUnit\Exception
Learn how to install or update PHPUnit 10.5 in the documentation .
Keep up to date with PHPUnit:
You can follow @phpunit@phpc.social
to stay up to date with PHPUnit's development.
You can subscribe to the PHPUnit Updates newsletter to
receive updates about and tips for PHPUnit.
PHPUnit 10.5.60
No changes; phpunit.phar rebuilt with PHP 8.4 to work
around PHP-Scoper issue #1139
Learn how to install or update PHPUnit 10.5 in the documentation .
Keep up to date with PHPUnit:
You can follow @phpunit@phpc.social
to stay up to date with PHPUnit's development.
You can subscribe to the PHPUnit Updates newsletter to
receive updates about and tips for PHPUnit.
PHPUnit 10.5.59
Changed
#6338 :
Removed code from PHPUnit\Runner\TestSuiteSorter that was
only used in the tests for this class
Updated list of deprecated PHP configuration settings for PHP 8.4,
PHP 8.5, and PHP 8.6
Learn how to install or update PHPUnit 10.5 in the documentation .
... (truncated)
Changelog
Sourced from phpunit/phpunit's
changelog .
[10.5.62] - 2026-01-27
Changed
To prevent Poisoned Pipeline Execution (PPE) attacks using prepared
.coverage files in pull requests, a PHPT test will no
longer be run if the temporary file for writing code coverage
information already exists before the test runs
[10.5.61] - 2026-01-24
Changed
PHPUnit\Framework\MockObject exceptions are now
subtypes of PHPUnit\Exception
[10.5.60] - 2025-12-06
No changes; phpunit.phar rebuilt with PHP 8.4 to work
around PHP-Scoper issue #1139
[10.5.59] - 2025-12-01
Changed
#6338 :
Removed code from PHPUnit\Runner\TestSuiteSorter that was
only used in the tests for this class
Updated list of deprecated PHP configuration settings for PHP 8.4,
PHP 8.5, and PHP 8.6
[10.5.58] - 2025-09-28
Fixed
#6368 :
failOnPhpunitWarning="false" has no effect
[10.5.57] - 2025-09-24
No changes; phpunit.phar rebuilt with updated
dependencies
[10.5.56] - 2025-09-23
No changes; phpunit.phar rebuilt with updated
dependencies
[10.5.55] - 2025-09-14
Changed
#6366 :
Exclude __sleep() and __wakeup() from test
double code generation on PHP >= 8.5
[10.5.54] - 2025-09-11
Changed
Do not use __sleep() method (which will be deprecated
in PHP 8.5)
[10.5.53] - 2025-08-20
... (truncated)
Commits
3f7dd50
Prepare release
9c95cf0
Merge branch '9.6' into 10.5
fea0625
Prepare release
1a677f6
Merge branch '8.5' into 9.6
1015741
Prepare release
e5cda18
Fix bad merge
a8b932b
Merge branch '9.6' into 10.5
1cce5f3
Merge branch '8.5' into 9.6
3141742
Do not run PHPT test when its temporary file for code coverage
information ex...
0b3170a
We do not need to unserialize() objects here
Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore ` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/Submitty/Submitty/network/alerts).
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/composer.json | 2 +-
site/composer.lock | 34 +++++++++++++++++-----------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/site/composer.json b/site/composer.json
index 63b396b9905..d51803b40d0 100644
--- a/site/composer.json
+++ b/site/composer.json
@@ -46,7 +46,7 @@
"phpstan/phpstan-deprecation-rules": "2.0.3",
"phpstan/phpstan-doctrine": "2.0.12",
"phpstan/phpstan-strict-rules": "2.0.6",
- "phpunit/phpunit": "10.5.46",
+ "phpunit/phpunit": "10.5.62",
"submitty/php-codesniffer": "3.0.1",
"symfony/finder": "^6.4",
"symfony/twig-bundle": "^6.4"
diff --git a/site/composer.lock b/site/composer.lock
index 41de1693f6e..305ab719744 100644
--- a/site/composer.lock
+++ b/site/composer.lock
@@ -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": "1b985d833400469a41d58ebedc35e5f2",
+ "content-hash": "554f548035694ab5dcb3a94b806ab449",
"packages": [
{
"name": "brick/math",
@@ -6788,16 +6788,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.46",
+ "version": "10.5.62",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d"
+ "reference": "3f7dd5066ebde5809296a81f0b19e8b00e5aab49"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8080be387a5be380dda48c6f41cee4a13aadab3d",
- "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3f7dd5066ebde5809296a81f0b19e8b00e5aab49",
+ "reference": "3f7dd5066ebde5809296a81f0b19e8b00e5aab49",
"shasum": ""
},
"require": {
@@ -6807,7 +6807,7 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.13.1",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.1",
@@ -6818,13 +6818,13 @@
"phpunit/php-timer": "^6.0.0",
"sebastian/cli-parser": "^2.0.1",
"sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.3",
+ "sebastian/comparator": "^5.0.5",
"sebastian/diff": "^5.1.1",
"sebastian/environment": "^6.1.0",
- "sebastian/exporter": "^5.1.2",
+ "sebastian/exporter": "^5.1.4",
"sebastian/global-state": "^6.0.2",
"sebastian/object-enumerator": "^5.0.0",
- "sebastian/recursion-context": "^5.0.0",
+ "sebastian/recursion-context": "^5.0.1",
"sebastian/type": "^4.0.0",
"sebastian/version": "^4.0.1"
},
@@ -6869,7 +6869,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.46"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.62"
},
"funding": [
{
@@ -6893,7 +6893,7 @@
"type": "tidelift"
}
],
- "time": "2025-05-02T06:46:24+00:00"
+ "time": "2026-01-27T05:32:38+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -7065,16 +7065,16 @@
},
{
"name": "sebastian/comparator",
- "version": "5.0.4",
+ "version": "5.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e"
+ "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e",
- "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
+ "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
"shasum": ""
},
"require": {
@@ -7130,7 +7130,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5"
},
"funding": [
{
@@ -7150,7 +7150,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-07T05:25:07+00:00"
+ "time": "2026-01-24T09:25:16+00:00"
},
{
"name": "sebastian/complexity",
From 185cfabafe8c376f416f76343df0337a2b1ba000 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 13:52:00 -0500
Subject: [PATCH 04/28] [Dependency] Bump doctrine/orm from 3.6.0 to 3.6.2 in
/site (#12364)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [doctrine/orm](https://github.com/doctrine/orm) from 3.6.0 to
3.6.2.
Release notes
Sourced from doctrine/orm's
releases .
3.6.2
Release Notes for 3.6.2
3.6.x bugfix release (patch)
3.6.2
Total issues resolved: 0
Total pull requests resolved: 2
Total contributors: 2
Bugfix
Improvement
3.6.1
Release Notes for 3.6.1
3.6.x bugfix release (patch)
3.6.1
Total issues resolved: 0
Total pull requests resolved: 5
Total contributors: 4
Bugfixes
Documentation
Commits
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/composer.json | 2 +-
site/composer.lock | 58 +++++++++++++++++++++++-----------------------
2 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/site/composer.json b/site/composer.json
index d51803b40d0..4c6c9c5c464 100644
--- a/site/composer.json
+++ b/site/composer.json
@@ -23,7 +23,7 @@
"browscap/browscap-php": "7.6.0",
"cboden/ratchet": "0.4.4",
"doctrine/dbal": "3.8.3",
- "doctrine/orm": "3.6.0",
+ "doctrine/orm": "3.6.2",
"egulias/email-validator": "4.0.4",
"lcobucci/jwt": "5.3.0",
"league/commonmark": "2.8.0",
diff --git a/site/composer.lock b/site/composer.lock
index 305ab719744..6df20db3b29 100644
--- a/site/composer.lock
+++ b/site/composer.lock
@@ -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": "554f548035694ab5dcb3a94b806ab449",
+ "content-hash": "a08b1eba14c95d83c250ccfd4bf23ff6",
"packages": [
{
"name": "brick/math",
@@ -380,16 +380,16 @@
},
{
"name": "doctrine/collections",
- "version": "2.4.0",
+ "version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
- "reference": "9acfeea2e8666536edff3d77c531261c63680160"
+ "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/9acfeea2e8666536edff3d77c531261c63680160",
- "reference": "9acfeea2e8666536edff3d77c531261c63680160",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2",
+ "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2",
"shasum": ""
},
"require": {
@@ -446,7 +446,7 @@
],
"support": {
"issues": "https://github.com/doctrine/collections/issues",
- "source": "https://github.com/doctrine/collections/tree/2.4.0"
+ "source": "https://github.com/doctrine/collections/tree/2.6.0"
},
"funding": [
{
@@ -462,7 +462,7 @@
"type": "tidelift"
}
],
- "time": "2025-10-25T09:18:13+00:00"
+ "time": "2026-01-15T10:01:58+00:00"
},
{
"name": "doctrine/dbal",
@@ -627,16 +627,16 @@
},
{
"name": "doctrine/event-manager",
- "version": "2.0.1",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
- "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e"
+ "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e",
- "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/dda33921b198841ca8dbad2eaa5d4d34769d18cf",
+ "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf",
"shasum": ""
},
"require": {
@@ -646,10 +646,10 @@
"doctrine/common": "<2.9"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
- "phpstan/phpstan": "^1.8.8",
- "phpunit/phpunit": "^10.5",
- "vimeo/psalm": "^5.24"
+ "doctrine/coding-standard": "^14",
+ "phpdocumentor/guides-cli": "^1.4",
+ "phpstan/phpstan": "^2.1.32",
+ "phpunit/phpunit": "^10.5.58"
},
"type": "library",
"autoload": {
@@ -698,7 +698,7 @@
],
"support": {
"issues": "https://github.com/doctrine/event-manager/issues",
- "source": "https://github.com/doctrine/event-manager/tree/2.0.1"
+ "source": "https://github.com/doctrine/event-manager/tree/2.1.1"
},
"funding": [
{
@@ -714,7 +714,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-22T20:47:39+00:00"
+ "time": "2026-01-29T07:11:08+00:00"
},
{
"name": "doctrine/inflector",
@@ -955,16 +955,16 @@
},
{
"name": "doctrine/orm",
- "version": "3.6.0",
+ "version": "3.6.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
- "reference": "d4e9276e79602b1eb4c4029c6c999b0d93478e2f"
+ "reference": "4262eb495b4d2a53b45de1ac58881e0091f2970f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/orm/zipball/d4e9276e79602b1eb4c4029c6c999b0d93478e2f",
- "reference": "d4e9276e79602b1eb4c4029c6c999b0d93478e2f",
+ "url": "https://api.github.com/repos/doctrine/orm/zipball/4262eb495b4d2a53b45de1ac58881e0091f2970f",
+ "reference": "4262eb495b4d2a53b45de1ac58881e0091f2970f",
"shasum": ""
},
"require": {
@@ -1037,9 +1037,9 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
- "source": "https://github.com/doctrine/orm/tree/3.6.0"
+ "source": "https://github.com/doctrine/orm/tree/3.6.2"
},
- "time": "2025-12-19T20:36:14+00:00"
+ "time": "2026-01-30T21:41:41+00:00"
},
{
"name": "doctrine/persistence",
@@ -4141,16 +4141,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.31",
+ "version": "v6.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "f9f8a889f54c264f9abac3fc0f7a371ffca51997"
+ "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/f9f8a889f54c264f9abac3fc0f7a371ffca51997",
- "reference": "f9f8a889f54c264f9abac3fc0f7a371ffca51997",
+ "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3",
+ "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3",
"shasum": ""
},
"require": {
@@ -4215,7 +4215,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.31"
+ "source": "https://github.com/symfony/console/tree/v6.4.32"
},
"funding": [
{
@@ -4235,7 +4235,7 @@
"type": "tidelift"
}
],
- "time": "2025-12-22T08:30:34+00:00"
+ "time": "2026-01-13T08:45:59+00:00"
},
{
"name": "symfony/deprecation-contracts",
From 01202b3b869e5683862c64701d0d558d8f9cb633 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 17:11:42 -0500
Subject: [PATCH 05/28] [DevDependency] Bump phpstan/phpstan-strict-rules from
2.0.6 to 2.0.8 in /site (#12368)
Bumps
[phpstan/phpstan-strict-rules](https://github.com/phpstan/phpstan-strict-rules)
from 2.0.6 to 2.0.8.
Release notes
Sourced from phpstan/phpstan-strict-rules's
releases .
2.0.8
1ed9e62
- Allow literal string dynamic property
7493a9f
- Update dessant/lock-threads action to v6
796f9c9
- Update actions/checkout action to v6
3dcd0b8
- Remove duplicate rules in Readme
2.0.7
d6211c4
- enable checkStrictPrintfPlaceholderTypes
6b78d53
- Update README.md
0435aeb
- Consolidate overwriteVariablesWithLoop rule details
e861638
- Simplify tests in which checkNullables is always true
11b6403
- Simplify tests in which treatPhpDocTypesAsCertain is always true
b043bd8
- Simplify RequireParentConstructCallRule
9f76a17
- Update actions/checkout action to v5
2b69ec5
- Update Eomm/why-don-t-you-tweet action to v2
Commits
1ed9e62
Allow literal string dynamic property
7493a9f
Update dessant/lock-threads action to v6
796f9c9
Update actions/checkout action to v6
3dcd0b8
Remove duplicate rules in Readme
d6211c4
enable checkStrictPrintfPlaceholderTypes
6b78d53
Update README.md
0435aeb
Consolidate overwriteVariablesWithLoop rule details
e861638
Simplify tests in which checkNullables is always true
11b6403
Simplify tests in which treatPhpDocTypesAsCertain is always true
b043bd8
Simplify RequireParentConstructCallRule
Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
---------
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Chris Reed <55092742+cjreed121@users.noreply.github.com>
---
site/composer.json | 2 +-
site/composer.lock | 16 ++++++++--------
site/phpstan-baseline.neon | 26 +-------------------------
3 files changed, 10 insertions(+), 34 deletions(-)
diff --git a/site/composer.json b/site/composer.json
index 4c6c9c5c464..8dd3c46a999 100644
--- a/site/composer.json
+++ b/site/composer.json
@@ -45,7 +45,7 @@
"phpstan/phpstan": "2.1.33",
"phpstan/phpstan-deprecation-rules": "2.0.3",
"phpstan/phpstan-doctrine": "2.0.12",
- "phpstan/phpstan-strict-rules": "2.0.6",
+ "phpstan/phpstan-strict-rules": "2.0.8",
"phpunit/phpunit": "10.5.62",
"submitty/php-codesniffer": "3.0.1",
"symfony/finder": "^6.4",
diff --git a/site/composer.lock b/site/composer.lock
index 6df20db3b29..1cafec1cb86 100644
--- a/site/composer.lock
+++ b/site/composer.lock
@@ -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": "a08b1eba14c95d83c250ccfd4bf23ff6",
+ "content-hash": "52cbf1761cc1fe03367b55578d392391",
"packages": [
{
"name": "brick/math",
@@ -6419,21 +6419,21 @@
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "2.0.6",
+ "version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094"
+ "reference": "1ed9e626a37f7067b594422411539aa807190573"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/f9f77efa9de31992a832ff77ea52eb42d675b094",
- "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/1ed9e626a37f7067b594422411539aa807190573",
+ "reference": "1ed9e626a37f7067b594422411539aa807190573",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.0.4"
+ "phpstan/phpstan": "^2.1.29"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
@@ -6461,9 +6461,9 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.6"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.8"
},
- "time": "2025-07-21T12:19:29+00:00"
+ "time": "2026-01-27T08:10:25+00:00"
},
{
"name": "phpunit/php-code-coverage",
diff --git a/site/phpstan-baseline.neon b/site/phpstan-baseline.neon
index 02c5c17970d..b63ac9b0310 100644
--- a/site/phpstan-baseline.neon
+++ b/site/phpstan-baseline.neon
@@ -9804,7 +9804,7 @@ parameters:
-
rawMessage: 'Variable property access on $this(app\models\Config).'
identifier: property.dynamicName
- count: 10
+ count: 1
path: app/models/Config.php
-
@@ -11223,12 +11223,6 @@ parameters:
count: 1
path: app/models/gradeable/AutoGradedVersion.php
- -
- rawMessage: 'Variable property access on $this(app\models\gradeable\AutoGradedVersion).'
- identifier: property.dynamicName
- count: 1
- path: app/models/gradeable/AutoGradedVersion.php
-
-
rawMessage: 'Method app\models\gradeable\AutoGradedVersionHistory::__construct() has parameter $details with no value type specified in iterable type array.'
identifier: missingType.iterableValue
@@ -11793,12 +11787,6 @@ parameters:
count: 1
path: app/models/gradeable/Component.php
- -
- rawMessage: 'Variable property access on $this(app\models\gradeable\Component).'
- identifier: property.dynamicName
- count: 1
- path: app/models/gradeable/Component.php
-
-
rawMessage: 'Call to function in_array() requires parameter #3 to be set.'
identifier: function.strict
@@ -12363,12 +12351,6 @@ parameters:
count: 1
path: app/models/gradeable/Gradeable.php
- -
- rawMessage: 'Variable property access on $this(app\models\gradeable\Gradeable).'
- identifier: property.dynamicName
- count: 5
- path: app/models/gradeable/Gradeable.php
-
-
rawMessage: 'Loose comparison via "==" is not allowed.'
identifier: equal.notAllowed
@@ -12381,12 +12363,6 @@ parameters:
count: 4
path: app/models/gradeable/GradeableList.php
- -
- rawMessage: 'Variable property access on $this(app\models\gradeable\GradeableList).'
- identifier: property.dynamicName
- count: 1
- path: app/models/gradeable/GradeableList.php
-
-
rawMessage: 'Method app\models\gradeable\GradeableUtils::getAllGradeableListFromUserId() has parameter $calendar_messages with no value type specified in iterable type array.'
identifier: missingType.iterableValue
From 6c5e2c534a6ca579508730cea635fa62149f44e2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 19:49:26 -0500
Subject: [PATCH 06/28] [DevDependency] Bump cypress from 15.8.1 to 15.9.0 in
/site (#12367)
Bumps [cypress](https://github.com/cypress-io/cypress) from 15.8.1 to
15.9.0.
Release notes
Sourced from cypress's
releases .
v15.9.0
Changelog: https://docs.cypress.io/app/references/changelog#15-9-0
v15.8.2
Changelog: https://docs.cypress.io/app/references/changelog#15-8-2
Commits
2b07fd1
chore: prepare 15.9.0 release (#33227 )
9a8e52e
chore: correct grammar & typos in CHANGELOG linting (#33225 )
e0a7eec
chore: enforce CHANGELOG release date MM/DD/YYYY format (#33224 )
3de32cf
chore: Remove unused exports/type exports + remove export from internal
types...
b6ccf40
chore: Update v8 snapshot cache - darwin (#33223 )
562be94
chore: Update v8 snapshot cache - windows (#33222 )
a478a87
chore: Update v8 snapshot cache - linux (#33221 )
5ea6549
chore(deps): update dependency fast-xml-parser to ^4.5.3 (#33216 )
f25153a
feat: experimentalRunAllSpecs for component testing (#32926 )
530b0dd
chore: Remove unused exports + remove 'export' from internal functions +
fix ...
Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/package-lock.json | 28 +++++++++++++++-------------
site/package.json | 2 +-
2 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/site/package-lock.json b/site/package-lock.json
index 20a37eb041c..5a5ac82054a 100644
--- a/site/package-lock.json
+++ b/site/package-lock.json
@@ -66,7 +66,7 @@
"@vue/eslint-config-typescript": "^14.6.0",
"@vue/tsconfig": "^0.8.1",
"babel-jest": "^30.0.5",
- "cypress": "^15.8.1",
+ "cypress": "^15.9.0",
"cypress-browser-permissions": "^1.1.0",
"cypress-file-upload": "^5.0.8",
"esbuild": "^0.27.2",
@@ -2642,9 +2642,9 @@
}
},
"node_modules/@cypress/request": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz",
- "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==",
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz",
+ "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -2661,7 +2661,7 @@
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"performance-now": "^2.1.0",
- "qs": "6.14.0",
+ "qs": "~6.14.1",
"safe-buffer": "^5.1.2",
"tough-cookie": "^5.0.0",
"tunnel-agent": "^0.6.0",
@@ -7410,14 +7410,14 @@
"license": "MIT"
},
"node_modules/cypress": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.8.1.tgz",
- "integrity": "sha512-ogc62stTQGh1395ipKxfCE5hQuSApTzeH5e0d9U6m7wYO9HQeCpgnkYtBtd0MbkN2Fnch5Od2mX9u4hoTlrH4Q==",
+ "version": "15.9.0",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.9.0.tgz",
+ "integrity": "sha512-Ks6Bdilz3TtkLZtTQyqYaqtL/WT3X3APKaSLhTV96TmTyudzSjc6EJsJCHmBb7DxO+3R12q3Jkbjgm/iPgmwfg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@cypress/request": "^3.0.9",
+ "@cypress/request": "^3.0.10",
"@cypress/xvfb": "^1.2.4",
"@types/sinonjs__fake-timers": "8.1.1",
"@types/sizzle": "^2.3.2",
@@ -12141,9 +12141,9 @@
}
},
"node_modules/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
+ "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -12491,6 +12491,7 @@
},
"node_modules/safe-buffer": {
"version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true,
"funding": [
@@ -12506,7 +12507,8 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/safer-buffer": {
"version": "2.1.2",
diff --git a/site/package.json b/site/package.json
index a6819a2083e..1c4951b2114 100644
--- a/site/package.json
+++ b/site/package.json
@@ -70,7 +70,7 @@
"@vue/eslint-config-typescript": "^14.6.0",
"@vue/tsconfig": "^0.8.1",
"babel-jest": "^30.0.5",
- "cypress": "^15.8.1",
+ "cypress": "^15.9.0",
"cypress-browser-permissions": "^1.1.0",
"cypress-file-upload": "^5.0.8",
"esbuild": "^0.27.2",
From 515d162ef5a51bcc7d04be88a559be71ee2b7e77 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 19:52:12 -0500
Subject: [PATCH 07/28] [DevDependency] Bump phpstan/phpstan from 2.1.33 to
2.1.38 in /site (#12365)
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/composer.json | 2 +-
site/composer.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/site/composer.json b/site/composer.json
index 8dd3c46a999..1342b6f19ff 100644
--- a/site/composer.json
+++ b/site/composer.json
@@ -42,7 +42,7 @@
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "1.2.0",
"php-mock/php-mock-phpunit": "2.14.0",
- "phpstan/phpstan": "2.1.33",
+ "phpstan/phpstan": "2.1.38",
"phpstan/phpstan-deprecation-rules": "2.0.3",
"phpstan/phpstan-doctrine": "2.0.12",
"phpstan/phpstan-strict-rules": "2.0.8",
diff --git a/site/composer.lock b/site/composer.lock
index 1cafec1cb86..e5622f47115 100644
--- a/site/composer.lock
+++ b/site/composer.lock
@@ -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": "52cbf1761cc1fe03367b55578d392391",
+ "content-hash": "cce0332cdc459135fdab11dd07b90ad7",
"packages": [
{
"name": "brick/math",
@@ -6246,11 +6246,11 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.33",
+ "version": "2.1.38",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f",
- "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dfaf1f530e1663aa167bc3e52197adb221582629",
+ "reference": "dfaf1f530e1663aa167bc3e52197adb221582629",
"shasum": ""
},
"require": {
@@ -6295,7 +6295,7 @@
"type": "github"
}
],
- "time": "2025-12-05T10:24:31+00:00"
+ "time": "2026-01-30T17:12:46+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",
From 421b544a21e61ac3396e523cf37d4afe82894752 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 19:55:31 -0500
Subject: [PATCH 08/28] [Dependency] Bump psutil from 7.2.1 to 7.2.2 in
/.setup/pip (#12400)
Bumps [psutil](https://github.com/giampaolo/psutil) from 7.2.1 to 7.2.2.
Changelog
Sourced from psutil's
changelog .
7.2.2
2026-01-28
Enhancements
2705_: [Linux]: Process.wait()_ now uses
pidfd_open() + poll() for
waiting, resulting in no busy loop and faster response times. Requires
Linux >= 5.3 and Python >= 3.9. Falls back to traditional polling
if
unavailable.
2705_: [macOS], [BSD]: Process.wait()_ now uses
kqueue() for waiting,
resulting in no busy loop and faster response times.
Bug fixes
2701_, [macOS]: fix compilation error on macOS < 10.7. (patch by
Sergey
Fedorov)
2707_, [macOS]: fix potential memory leaks in error paths of
Process.memory_full_info() and
Process.threads().
2708_, [macOS]: Process.cmdline()_ and
Process.environ()_ may fail with ``OSError: [Errno 0]
Undefined error`` (from ``sysctl(KERN_PROCARGS2)``). They now raise
AccessDenied`_ instead.
Commits
9eea97d
Pre-release
938ac64
Rm sphinxcontrib.googleanalytics; override layout.html
9dcbb7e
Add sphinxcontrib-googleanalytics to requirements.txt
76eaf9a
Try to add google analytics to doc
de1cafa
Update doc mentioning Process.wait() internal details
bb30943
Refact can_use_pidfd_open() and can_use_kqueue()
a571717
#2708 ,
macos / cmdline / environ; raise AD instead of OSError(0) (#2709 )
8b98c3e
Pre-release
700b7e6
[macOS] fix potential leaks in error paths (#2707 )
7cc7923
Windows / cmdline(): be more defensive in free()ing in case of
error
Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.setup/pip/system_requirements.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.setup/pip/system_requirements.txt b/.setup/pip/system_requirements.txt
index 76c8357908e..88e9a3f6616 100644
--- a/.setup/pip/system_requirements.txt
+++ b/.setup/pip/system_requirements.txt
@@ -17,7 +17,7 @@ python-pam==2.0.2
ruamel.yaml==0.19.1
psycopg2-binary==2.9.11
sqlalchemy==2.0.45
-psutil==7.2.1
+psutil==7.2.2
python-dateutil==2.9.0.post0
watchdog==6.0.0
xlsx2csv==0.8.4
From d14c780134651848f1c0c243613b41e14d03ee8d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 19:57:39 -0500
Subject: [PATCH 09/28] [Dependency] Bump jsonschema from 4.25.1 to 4.26.0 in
/python_submitty_utils (#12401)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from
4.25.1 to 4.26.0.
Release notes
Sourced from jsonschema's
releases .
v4.26.0
What's Changed
New Contributors
Full Changelog : https://github.com/python-jsonschema/jsonschema/compare/v4.25.1...v4.26.0
Changelog
Sourced from jsonschema's
changelog .
v4.26.0
Decrease import time by delaying importing of
urllib.request (#1416 ).
Commits
a727743
Add a changelog entry for 4.26.
6d28c13
Update the lockfile.
739499e
Update pre-commit hooks.
cb2d779
Merge pull request #1443
from python-jsonschema/pre-commit-ci-update-config
e6bbbb7
[pre-commit.ci] pre-commit autoupdate
d56037a
Merge pull request #1442
from python-jsonschema/dependabot/github_actions/ast...
e54ce13
Bump astral-sh/setup-uv from 7.1.4 to 7.1.6
1f7c9fb
Partially update docs requirements.
241aec9
Merge pull request #1441
from python-jsonschema/pre-commit-ci-update-config
2818efb
Apache-2.0 -> nongpl
Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
python_submitty_utils/requirements.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/python_submitty_utils/requirements.txt b/python_submitty_utils/requirements.txt
index fcb85418a04..03a9e0c5412 100644
--- a/python_submitty_utils/requirements.txt
+++ b/python_submitty_utils/requirements.txt
@@ -1,3 +1,3 @@
-jsonschema==4.25.1
+jsonschema==4.26.0
jsonref==1.1.0
tzlocal==5.3.1
From ce342dda40edbe941b3cacbd8b208b5f962422d4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 20:09:59 -0500
Subject: [PATCH 10/28] [DevDependency] Bump cypress-io/github-action from 6 to
7 (#12392)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps
[cypress-io/github-action](https://github.com/cypress-io/github-action)
from 6 to 7.
Release notes
Sourced from cypress-io/github-action's
releases .
v7.0.0
7.0.0
(2026-01-21)
Features
BREAKING CHANGES
deps: Update action from node20 to node24
cypress-io/github-action@v6, using node20, is deprecated
v6.10.9
6.10.9
(2026-01-20)
Bug Fixes
v6.10.8
6.10.8
(2025-12-15)
Bug Fixes
v6.10.7
6.10.7
(2025-12-15)
Bug Fixes
deps: update GitHub actions/toolkit dependencies
(#1612 )
(fa1d27a )
v6.10.6
6.10.6
(2025-12-12)
Bug Fixes
v6.10.5
6.10.5
(2025-12-10)
... (truncated)
Changelog
Sourced from cypress-io/github-action's
changelog .
Changelog
This document gives an overview of changes to the Cypress GitHub
JavaScript Action cypress-io/github-action .
See Releases
for full details of changes.
Version
Changes
v7.1.0
Add parameter package-manager-cache
v7.0.0
Action runs under Node.js 24 instead of Node.js 20
v6.10.0
Examples remove Node.js 23. End of support for Node.js 23.
v6.9.0
Add parameter validation for command
v6.8.0
Examples remove Node.js 18. End of support for Node.js 18.
v6.7.10
Examples updated to Cypress 14
v6.7.9
Migrate to @actions/cache@4.0.0 for continued access to
GitHub Actions caching services
v6.7.0
Examples remove Node.js 21. End of support for Node.js 21.
v6.6.0
Add parameter summary-title
v6.5.0
Examples remove Node.js 16. End of support for Node.js 16.
v6.4.0
Action adds PR number and URL if available when recording
v6.3.0
v6 is recommended action version
v6.2.0
Examples updated to Cypress 13
v6.1.0
Examples for Cypress 9 archived in action's v5
branch
v6.0.0
Action runs under Node.js 20 instead of Node.js 16
v5.8.1
Examples remove Node.js 19. End of support for Node.js 19
v5.8.0
Add GitHub step output resultsUrl. Deprecate
dashboardUrl.
v5.7.0
Add basic Yarn Modern Plug'n'Play support
v5.6.2
Examples add Node.js 20. End of support and removal of Node.js 14
examples.
v5.6.0
Add check for lockfile presence
v5.5.0
Examples add Yarn Modern
v5.4.0
Examples add Yarn Classic
v5.3.0
Add parameter publish-summary (default
true)
v5.2.0
Examples add Node.js 19
v5.1.0
Add parameter auto-cancel-after-failures
v5.0.0
Examples add Node.js 18 and remove Node.js 12
v4.2.2
Dependency on GitHub set-output workflow command
removed
v4.2.0
Support for pnpm added
v4.0.0
Support for Cypress 10 and later versions added
v3
Action runs under Node.js 16 instead of Node.js 12
v2
Cypress runs using the Module API
v1
This version is no longer runnable in GitHub due to security
changes.
Commits
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/ci.yml | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 061d6f5bfaa..edbe66f1e53 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -683,7 +683,7 @@ jobs:
run: sudo sed -ie "s/Database/Pam/g" ${SUBMITTY_INSTALL_DIR}/config/authentication.json
- name: Run accessibility test
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-System/accessibility.spec.js
@@ -702,7 +702,7 @@ jobs:
sudo systemctl stop submitty_autograding_shipper
- name: Run autograding status test
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-System/autograding_status_1.spec.js
@@ -715,7 +715,7 @@ jobs:
sudo systemctl restart submitty_autograding_shipper
- name: Run autograding status test
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-System/autograding_status_2.spec.js
@@ -728,7 +728,7 @@ jobs:
sudo systemctl restart submitty_autograding_worker
- name: Run cypress e2e login tests with PAM auth
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost,chromeWebSecurity=false
spec: cypress/e2e/Cypress-System/login.spec.js
@@ -739,7 +739,7 @@ jobs:
run: sudo sed -ie "s/Pam/Database/g" ${SUBMITTY_INSTALL_DIR}/config/authentication.json
- name: Run cypress e2e login tests with database auth
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-System/login.spec.js
@@ -747,7 +747,7 @@ jobs:
browser: chrome
- name: Run self-account-creation tests.
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-System/self_account_creation.spec.js
@@ -758,7 +758,7 @@ jobs:
run: sudo sed -ie "s/Database/Ldap/g" ${SUBMITTY_INSTALL_DIR}/config/authentication.json
- name: Run cypress e2e login tests with LDAP auth
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-System/login.spec.js
@@ -774,7 +774,7 @@ jobs:
run: sudo sed -ie "s/Ldap/Saml/g" ${SUBMITTY_INSTALL_DIR}/config/authentication.json
- name: Run cypress e2e login tests with SAML auth
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost,chromeWebSecurity=false
spec: cypress/e2e/Cypress-System/login.spec.js
@@ -879,7 +879,7 @@ jobs:
npm ci
- name: Run cypress e2e tests with pam auth
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
working-directory: ${{env.SUBMITTY_REPOSITORY}}/site
@@ -987,7 +987,7 @@ jobs:
curl --show-error --fail --include http://localhost/authentication/login
- name: Run Ansible cypress test
- uses: cypress-io/github-action@v6
+ uses: cypress-io/github-action@v7
with:
config: baseUrl=http://localhost
spec: cypress/e2e/Cypress-Ansible/ansible-course.spec.js
From 6fc2abd551b293cd521aa37b35adda583f6edc32 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 20:16:52 -0500
Subject: [PATCH 11/28] [Dependency] Bump @codemirror/view from 6.39.8 to
6.39.12 in /site (#12374)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [@codemirror/view](https://github.com/codemirror/view) from 6.39.8
to 6.39.12.
Changelog
Sourced from @codemirror/view's
changelog .
6.39.12 (2026-01-30)
Bug fixes
Fix a bug where the visual selection drawn by
drawSelection could fail to update properly in some
circumstances.
Fix a bug where PageUp/PageDown near the edge of the viewport might
completely skip to the start/end of the document.
Fix a regression that caused mark decorations to be split on text
node chunk boundaries again.
6.39.11 (2026-01-14)
Bug fixes
Avoid handling copy events for parent editors.
6.39.10 (2026-01-13)
Bug fixes
Fix a regression in the way widget are reused when content next to
them changes.
Make sure font metrics get recomputed on fonts.ready
even if the line height doesn't change.
Fix an issue where compositions next to a widget that create a new
text node could get needlessly interrupted during an editor update.
6.39.9 (2026-01-06)
Bug fixes
Fix a bug where EditorSelection.cursor() with a non-zero
assoc value would not be visually respected at soft-wrap
boundaries on initial view creation.
Fix error caused by hover tooltips running a scheduled timeout after
their editor has been destroyed.
Fix a bug that caused EditorView.outerDecorations to not
affect the content height map.
Fix an issue where composition near a widget could get unnecessarily
interrupted.
Commits
f14dcd5
Mark version 6.39.12
16a0c29
Fix another issue around chunked large text nodes
4b908ab
Fix poor handling of vertical motion exiting the viewport
e147626
Fix negative computed width in RectangleMarker.forRange
6fcf2e1
Mark version 6.39.11
95fd570
Use a custom selection comparison when only the position should be
compared
4c56500
Remove a loop that never loops anymore
01fbc42
Avoid handling copy events for parent elements
74c9e9b
Mark version 6.39.10
9656641
Fix another way widgets could be reused across a composition
Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/package-lock.json | 8 ++++----
site/package.json | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/site/package-lock.json b/site/package-lock.json
index 5a5ac82054a..fc1196fc4df 100644
--- a/site/package-lock.json
+++ b/site/package-lock.json
@@ -20,7 +20,7 @@
"@codemirror/search": "6.5.11",
"@codemirror/state": "6.5.3",
"@codemirror/theme-one-dark": "6.1.3",
- "@codemirror/view": "6.39.8",
+ "@codemirror/view": "6.39.12",
"@fortawesome/fontawesome-free": "7.1.0",
"@highlightjs/cdn-assets": "11.11.1",
"bootstrap": "4.6.0",
@@ -2472,9 +2472,9 @@
}
},
"node_modules/@codemirror/view": {
- "version": "6.39.8",
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.8.tgz",
- "integrity": "sha512-1rASYd9Z/mE3tkbC9wInRlCNyCkSn+nLsiQKZhEDUUJiUfs/5FHDpCUDaQpoTIaNGeDc6/bhaEAyLmeEucEFPw==",
+ "version": "6.39.12",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.12.tgz",
+ "integrity": "sha512-f+/VsHVn/kOA9lltk/GFzuYwVVAKmOnNjxbrhkk3tPHntFqjWeI2TbIXx006YkBkqC10wZ4NsnWXCQiFPeAISQ==",
"license": "MIT",
"dependencies": {
"@codemirror/state": "^6.5.0",
diff --git a/site/package.json b/site/package.json
index 1c4951b2114..3fc04171085 100644
--- a/site/package.json
+++ b/site/package.json
@@ -24,7 +24,7 @@
"@codemirror/search": "6.5.11",
"@codemirror/state": "6.5.3",
"@codemirror/theme-one-dark": "6.1.3",
- "@codemirror/view": "6.39.8",
+ "@codemirror/view": "6.39.12",
"@fortawesome/fontawesome-free": "7.1.0",
"@highlightjs/cdn-assets": "11.11.1",
"bootstrap": "4.6.0",
From 53c30422049de3427be003b51751b9bfea07d1f3 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 20:22:30 -0500
Subject: [PATCH 12/28] [DevDependency] Bump globals from 17.0.0 to 17.3.0 in
/site (#12376)
Bumps [globals](https://github.com/sindresorhus/globals) from 17.0.0 to
17.3.0.
Release notes
Sourced from globals's
releases .
v17.3.0
Update globals (2026-02-01) (#336 )
295fba9
https://github.com/sindresorhus/globals/compare/v17.2.0...v17.3.0
v17.2.0
jasmine: Add throwUnless and
throwUnlessAsync globals (#335 )
97f23a7
https://github.com/sindresorhus/globals/compare/v17.1.0...v17.2.0
v17.1.0
Add webpack and rspack globals (#333 )
65cae73
https://github.com/sindresorhus/globals/compare/v17.0.0...v17.1.0
Commits
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/package-lock.json | 8 ++++----
site/package.json | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/site/package-lock.json b/site/package-lock.json
index fc1196fc4df..8aba01327c8 100644
--- a/site/package-lock.json
+++ b/site/package-lock.json
@@ -75,7 +75,7 @@
"eslint-plugin-jest": "^29.12.0",
"eslint-plugin-no-unsanitized": "^4.1.4",
"eslint-plugin-vue": "^10.6.2",
- "globals": "^17.0.0",
+ "globals": "^17.3.0",
"jest": "^30.2.0",
"jest-environment-jsdom": "^30.2.0",
"node-fetch": "^2.7.0",
@@ -9391,9 +9391,9 @@
}
},
"node_modules/globals": {
- "version": "17.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.0.0.tgz",
- "integrity": "sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==",
+ "version": "17.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz",
+ "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==",
"dev": true,
"license": "MIT",
"engines": {
diff --git a/site/package.json b/site/package.json
index 3fc04171085..7101e5a6dbf 100644
--- a/site/package.json
+++ b/site/package.json
@@ -79,7 +79,7 @@
"eslint-plugin-jest": "^29.12.0",
"eslint-plugin-no-unsanitized": "^4.1.4",
"eslint-plugin-vue": "^10.6.2",
- "globals": "^17.0.0",
+ "globals": "^17.3.0",
"jest": "^30.2.0",
"jest-environment-jsdom": "^30.2.0",
"node-fetch": "^2.7.0",
From 164bb7fb7814db659148c616a574a9460eef0d91 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 20:58:08 -0500
Subject: [PATCH 13/28] [Dependency] Bump twig/markdown-extra from 3.22.0 to
3.23.0 in /site (#12366)
Bumps [twig/markdown-extra](https://github.com/twigphp/markdown-extra)
from 3.22.0 to 3.23.0.
Commits
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/composer.json | 2 +-
site/composer.lock | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/site/composer.json b/site/composer.json
index 1342b6f19ff..fb2758d6055 100644
--- a/site/composer.json
+++ b/site/composer.json
@@ -36,7 +36,7 @@
"symfony/http-foundation": "6.4.14",
"symfony/routing": "6.1.11",
"textalk/websocket": "1.6.3",
- "twig/markdown-extra": "^3.22",
+ "twig/markdown-extra": "^3.23",
"twig/twig": "3.22.2"
},
"require-dev": {
diff --git a/site/composer.lock b/site/composer.lock
index e5622f47115..05e54e302e5 100644
--- a/site/composer.lock
+++ b/site/composer.lock
@@ -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": "cce0332cdc459135fdab11dd07b90ad7",
+ "content-hash": "2244977ed4737ffdf0c88b0627f3bd51",
"packages": [
{
"name": "brick/math",
@@ -5507,16 +5507,16 @@
},
{
"name": "twig/markdown-extra",
- "version": "v3.22.0",
+ "version": "v3.23.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/markdown-extra.git",
- "reference": "fb6f952082e3a7d62a75c8be2c8c47242d3925fb"
+ "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/fb6f952082e3a7d62a75c8be2c8c47242d3925fb",
- "reference": "fb6f952082e3a7d62a75c8be2c8c47242d3925fb",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/faf069b259e2d3930c73c2f53e2dec8440bd90a2",
+ "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2",
"shasum": ""
},
"require": {
@@ -5563,7 +5563,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/markdown-extra/tree/v3.22.0"
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.23.0"
},
"funding": [
{
@@ -5575,7 +5575,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-15T05:57:37+00:00"
+ "time": "2025-12-02T14:45:16+00:00"
},
{
"name": "twig/twig",
From e06c22512eeb2a57ae62b4456db16674e483e786 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 21:01:14 -0500
Subject: [PATCH 14/28] [Dependency] Bump sqlalchemy from 2.0.45 to 2.0.46 in
/.setup/pip (#12397)
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.45
to 2.0.46.
Release notes
Sourced from sqlalchemy's
releases .
2.0.46
Released: January 21, 2026
typing
[typing] [bug] Fixed typing issues where ORM mapped
classes and aliased entities could not
be used as keys in result row mappings or as join targets in select
statements. Patterns such as row._mapping[User],
row._mapping[aliased(User)],
row._mapping[with_polymorphic(...)]
(rejected by both mypy and Pylance), and
.join(aliased(User))
(rejected by Pylance) are documented and fully supported at runtime but
were previously rejected by type checkers. The type definitions for
_KeyType and _FromClauseArgument have been
updated to
accept these ORM entity types.
References: #13075
postgresql
[postgresql] [bug] Fixed issue where PostgreSQL
JSONB operators
_postgresql.JSONB.Comparator.path_match() and
_postgresql.JSONB.Comparator.path_exists() were applying
incorrect
VARCHAR casts to the right-hand side operand when used with
newer
PostgreSQL drivers such as psycopg. The operators now indicate the
right-hand type as JSONPATH, which currently results in no
casting
taking place, but is also compatible with explicit casts if the
implementation were require it at a later point.
References: #13059
[postgresql] [bug] Fixed regression in PostgreSQL
dialect where JSONB subscription syntax
would generate incorrect SQL for cast() expressions
returning JSONB,
causing syntax errors. The dialect now properly wraps cast expressions
in
parentheses when using the [] subscription syntax,
generating
(CAST(...))[index] instead of CAST(...)[index]
to comply with
PostgreSQL syntax requirements. This extends the fix from #12778
which addressed the same issue for function calls.
References: #13067
[postgresql] [bug] Improved the foreign key
reflection regular expression pattern used by the
PostgreSQL dialect to be more permissive in matching identifier
characters,
allowing it to correctly handle unicode characters in table and column
names. This change improves compatibility with PostgreSQL variants such
as
CockroachDB that may use different quoting patterns in combination with
unicode characters in their identifiers. Pull request courtesy Gord
Thompson.
... (truncated)
Commits
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.setup/pip/system_requirements.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.setup/pip/system_requirements.txt b/.setup/pip/system_requirements.txt
index 88e9a3f6616..ddc524cbfc9 100644
--- a/.setup/pip/system_requirements.txt
+++ b/.setup/pip/system_requirements.txt
@@ -16,7 +16,7 @@ requests==2.32.5
python-pam==2.0.2
ruamel.yaml==0.19.1
psycopg2-binary==2.9.11
-sqlalchemy==2.0.45
+sqlalchemy==2.0.46
psutil==7.2.2
python-dateutil==2.9.0.post0
watchdog==6.0.0
From 35028b0c405b2e1d7a8e824807fe6b39a937d3f6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 21:20:51 -0500
Subject: [PATCH 15/28] [Dependency] Bump @codemirror/state from 6.5.3 to 6.5.4
in /site (#12371)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [@codemirror/state](https://github.com/codemirror/state) from
6.5.3 to 6.5.4.
Changelog
Sourced from @codemirror/state's
changelog .
6.5.4 (2026-01-14)
Bug fixes
Make SelectionRange.eq return false when the ranges have
different goal columns.
Commits
8897323
Mark version 6.5.4
75518c0
Include goal column when comparing selection ranges
a0889f8
Use git+https format for package.json repository field
See full diff in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
site/package-lock.json | 8 ++++----
site/package.json | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/site/package-lock.json b/site/package-lock.json
index 8aba01327c8..8eb47a88004 100644
--- a/site/package-lock.json
+++ b/site/package-lock.json
@@ -18,7 +18,7 @@
"@codemirror/legacy-modes": "6.5.2",
"@codemirror/lint": "6.9.2",
"@codemirror/search": "6.5.11",
- "@codemirror/state": "6.5.3",
+ "@codemirror/state": "6.5.4",
"@codemirror/theme-one-dark": "6.1.3",
"@codemirror/view": "6.39.12",
"@fortawesome/fontawesome-free": "7.1.0",
@@ -2452,9 +2452,9 @@
}
},
"node_modules/@codemirror/state": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.3.tgz",
- "integrity": "sha512-MerMzJzlXogk2fxWFU1nKp36bY5orBG59HnPiz0G9nLRebWa0zXuv2siH6PLIHBvv5TH8CkQRqjBs0MlxCZu+A==",
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.4.tgz",
+ "integrity": "sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw==",
"license": "MIT",
"dependencies": {
"@marijn/find-cluster-break": "^1.0.0"
diff --git a/site/package.json b/site/package.json
index 7101e5a6dbf..2a881abf254 100644
--- a/site/package.json
+++ b/site/package.json
@@ -22,7 +22,7 @@
"@codemirror/legacy-modes": "6.5.2",
"@codemirror/lint": "6.9.2",
"@codemirror/search": "6.5.11",
- "@codemirror/state": "6.5.3",
+ "@codemirror/state": "6.5.4",
"@codemirror/theme-one-dark": "6.1.3",
"@codemirror/view": "6.39.12",
"@fortawesome/fontawesome-free": "7.1.0",
From 58420f0efcbb4fea620f9b8f37a9a03f24278afb Mon Sep 17 00:00:00 2001
From: IDzyre
Date: Tue, 3 Feb 2026 12:34:29 -0800
Subject: [PATCH 16/28] Working to add defaults
---
.setup/CONFIGURE_SUBMITTY.py | 115 +++++++++++++----------------------
.setup/defaults.json | 35 +++++++++++
.setup/install_system.sh | 24 +-------
.setup/testing/setup.sh | 27 +-------
4 files changed, 79 insertions(+), 122 deletions(-)
create mode 100644 .setup/defaults.json
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index f39ff38d631..2615af3721b 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -9,7 +9,6 @@
import secrets
import shutil
import string
-import tzlocal
import tempfile
@@ -28,7 +27,9 @@ def get_ids(user):
raise SystemExit("ERROR: Could not find user: " + user)
-def get_input(question, default=""):
+def get_input(question, default="", use_default = False):
+ if use_default:
+ return default
add = "[{}] ".format(default) if default != "" else ""
user = input("{}: {}".format(question, add)).strip()
if user == "":
@@ -61,9 +62,8 @@ def __call__(self, parser, namespace, values, option_string=None):
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--debug', action='store_true', default=False, help='Configure Submitty to be in debug mode. '
'This should not be used in production!')
-parser.add_argument('--setup-for-sample-courses', action='store_true', default=False,
- help="Sets up Submitty for use with the sample courses. This is a Vagrant convenience "
- "flag and should not be used in production!")
+parser.add_argument('--dev-vm', action='store_true', default=False,
+ help="Sets up submitty for use with Vagrant for developers, not to be used for production")
parser.add_argument('--worker', action='store_true', default=False, help='Configure Submitty with autograding only')
parser.add_argument('--install-dir', default='/usr/local/submitty', help='Set the install directory for Submitty')
parser.add_argument('--data-dir', default='/var/local/submitty', help='Set the data directory for Submitty')
@@ -157,6 +157,7 @@ def __call__(self, parser, namespace, values, option_string=None):
SETUP_INSTALL_DIR = os.path.join(SUBMITTY_INSTALL_DIR, '.setup')
SETUP_REPOSITORY_DIR = os.path.join(SUBMITTY_REPOSITORY, '.setup')
+DEFAULTS_FILE = os.path.join(SETUP_REPOSITORY_DIR, 'defaults.json')
INSTALL_FILE = os.path.join(SETUP_INSTALL_DIR, 'INSTALL_SUBMITTY.sh')
CONFIGURATION_JSON = os.path.join(SETUP_INSTALL_DIR, 'submitty_conf.json')
SITE_CONFIG_DIR = os.path.join(SUBMITTY_INSTALL_DIR, "site", "config")
@@ -174,41 +175,9 @@ def __call__(self, parser, namespace, values, option_string=None):
'SamlAuthentication'
]
-defaults = {
- 'database_host': 'localhost',
- 'database_port': 5432,
- 'database_user': 'submitty_dbuser',
- 'database_course_user': 'submitty_course_dbuser',
- 'submission_url': '',
- 'supervisor_user': 'submitty',
- 'vcs_url': '',
- 'authentication_method': 0,
- 'institution_name' : '',
- 'institution_homepage' : '',
- 'user_create_account' : False,
- 'timezone' : str(tzlocal.get_localzone()),
- 'submitty_admin_username': '',
- 'email_user': '',
- 'email_password': '',
- 'email_sender': 'submitty@myuniversity.edu',
- 'email_reply_to': 'submitty_do_not_reply@myuniversity.edu',
- 'email_server_hostname': 'mail.myuniversity.edu',
- 'email_server_port': 25,
- 'email_internal_domain': 'example.com',
- 'course_code_requirements': "Please follow your school's convention for course code.",
- 'sys_admin_email': '',
- 'sys_admin_url': '',
- 'ldap_options': {
- 'url': '',
- 'uid': '',
- 'bind_dn': ''
- },
- 'saml_options': {
- 'name': '',
- 'username_attribute': ''
- },
- 'course_material_file_upload_limit_mb': 100
-}
+defaults = {}
+with open(DEFAULTS_FILE, 'r') as defaults_file:
+ defaults = json.load(defaults_file)
loaded_defaults = {}
if os.path.isfile(CONFIGURATION_JSON):
@@ -249,73 +218,73 @@ def __call__(self, parser, namespace, values, option_string=None):
print('Hit enter to use default in []')
print()
-
+USE_DEFAULT = args.dev_vm
if args.worker:
- SUPERVISOR_USER = get_input('What is the id for your submitty user?', defaults['supervisor_user'])
+ SUPERVISOR_USER = get_input('What is the id for your submitty user?', defaults['supervisor_user'], USE_DEFAULT)
print('SUPERVISOR USER : {}'.format(SUPERVISOR_USER))
else:
- DATABASE_HOST = get_input('What is the database host?', defaults['database_host'])
+ DATABASE_HOST = get_input('What is the database host?', defaults['database_host'], USE_DEFAULT)
print()
if not os.path.isdir(DATABASE_HOST):
- DATABASE_PORT = int(get_input('What is the database port?', defaults['database_port']))
+ DATABASE_PORT = int(get_input('What is the database port?', defaults['database_port']), USE_DEFAULT)
print()
else:
DATABASE_PORT = defaults['database_port']
- DATABASE_USER = get_input('What is the global database user/role?', defaults['database_user'])
+ DATABASE_USER = get_input('What is the global database user/role?', defaults['database_user'], USE_DEFAULT)
print()
default = ''
if 'database_password' in defaults and DATABASE_USER == defaults['database_user']:
default = '(Leave blank to use same password)'
- DATABASE_PASS = get_input('What is the password for the global database user/role {}? {}'.format(DATABASE_USER, default))
+ DATABASE_PASS = get_input('What is the password for the global database user/role {}? {}'.format(DATABASE_USER, default), USE_DEFAULT)
if DATABASE_PASS == '' and DATABASE_USER == defaults['database_user'] and 'database_password' in defaults:
DATABASE_PASS = defaults['database_password']
print()
- DATABASE_COURSE_USER = get_input('What is the course database user/role?', defaults['database_course_user'])
+ DATABASE_COURSE_USER = get_input('What is the course database user/role?', defaults['database_course_user'], USE_DEFAULT)
print()
default = ''
if 'database_course_password' in defaults and DATABASE_COURSE_USER == defaults['database_course_user']:
default = '(Leave blank to use same password)'
- DATABASE_COURSE_PASSWORD = get_input('What is the password for the course database user/role {}? {}'.format(DATABASE_COURSE_USER, default))
+ DATABASE_COURSE_PASSWORD = get_input('What is the password for the course database user/role {}? {}'.format(DATABASE_COURSE_USER, default), USE_DEFAULT)
if DATABASE_COURSE_PASSWORD == '' and DATABASE_COURSE_USER == defaults['database_course_user'] and 'database_course_password' in defaults:
DATABASE_COURSE_PASSWORD = defaults['database_course_password']
print()
- TIMEZONE = get_input('What timezone should Submitty use? (for a full list of supported timezones see http://php.net/manual/en/timezones.php)', defaults['timezone'])
+ TIMEZONE = get_input('What timezone should Submitty use? (for a full list of supported timezones see http://php.net/manual/en/timezones.php)', defaults['timezone'], USE_DEFAULT)
print()
DEFAULT_LOCALE = get_input('What default language should the Submitty site use?', 'en_US')
print()
- COURSE_MATERIAL_UPLOAD_LIMIT_MB = get_input('What is the maximum file upload size for course materials (in MB)?', defaults['course_material_file_upload_limit_mb'])
+ COURSE_MATERIAL_UPLOAD_LIMIT_MB = get_input('What is the maximum file upload size for course materials (in MB)?', defaults['course_material_file_upload_limit_mb'], USE_DEFAULT)
print()
SUBMISSION_URL = get_input('What is the url for submission? (ex: http://192.168.56.101 or '
- 'https://submitty.cs.rpi.edu)', defaults['submission_url']).rstrip('/')
+ 'https://submitty.cs.rpi.edu)', defaults['submission_url'], USE_DEFAULT).rstrip('/')
print()
- VCS_URL = get_input('What is the url for VCS? (Leave blank to default to submission url + {$vcs_type}) (ex: http://192.168.56.101/{$vcs_type} or https://submitty-vcs.cs.rpi.edu/{$vcs_type}', defaults['vcs_url']).rstrip('/')
+ VCS_URL = get_input('What is the url for VCS? (Leave blank to default to submission url + {$vcs_type}) (ex: http://192.168.56.101/{$vcs_type} or https://submitty-vcs.cs.rpi.edu/{$vcs_type}', defaults['vcs_url'], USE_DEFAULT).rstrip('/')
print()
INSTITUTION_NAME = get_input('What is the name of your institution? (Leave blank/type "none" if not desired)',
- defaults['institution_name'])
+ defaults['institution_name'], USE_DEFAULT)
print()
if INSTITUTION_NAME == '' or INSTITUTION_NAME.isspace():
INSTITUTION_HOMEPAGE = ''
else:
INSTITUTION_HOMEPAGE = get_input("What is the url of your institution\'s homepage? "
- '(Leave blank/type "none" if not desired)', defaults['institution_homepage'])
+ '(Leave blank/type "none" if not desired)', defaults['institution_homepage'], USE_DEFAULT)
if INSTITUTION_HOMEPAGE.lower() == "none":
INSTITUTION_HOMEPAGE = ''
print()
- SYS_ADMIN_EMAIL = get_input("What is the email for system administration?", defaults['sys_admin_email'])
- SYS_ADMIN_URL = get_input("Where to report problems with Submitty (url for help link)?", defaults['sys_admin_url'])
+ SYS_ADMIN_EMAIL = get_input("What is the email for system administration?", defaults['sys_admin_email'], USE_DEFAULT)
+ SYS_ADMIN_URL = get_input("Where to report problems with Submitty (url for help link)?", defaults['sys_admin_url'], USE_DEFAULT)
print('What authentication method to use:')
for i in range(len(authentication_methods)):
@@ -323,7 +292,7 @@ def __call__(self, parser, namespace, values, option_string=None):
while True:
try:
- auth = int(get_input('Enter number?', defaults['authentication_method'])) - 1
+ auth = int(get_input('Enter number?', defaults['authentication_method']), USE_DEFAULT) - 1
except ValueError:
auth = -1
if auth in range(len(authentication_methods)):
@@ -341,13 +310,13 @@ def __call__(self, parser, namespace, values, option_string=None):
}
USER_CREATE_ACCOUNT = False
if AUTHENTICATION_METHOD == 'DatabaseAuthentication':
- user_create_account = get_input("Allow users to create their own accounts? [y/n]", 'n')
+ user_create_account = get_input("Allow users to create their own accounts? [y/n]", 'n', USE_DEFAULT)
USER_CREATE_ACCOUNT = user_create_account.lower() in ['yes', 'y']
print()
if AUTHENTICATION_METHOD == 'LdapAuthentication':
- LDAP_OPTIONS['url'] = get_input('Enter LDAP url?', LDAP_OPTIONS['url'])
- LDAP_OPTIONS['uid'] = get_input('Enter LDAP UID?', LDAP_OPTIONS['uid'])
- LDAP_OPTIONS['bind_dn'] = get_input('Enter LDAP bind_dn?', LDAP_OPTIONS['bind_dn'])
+ LDAP_OPTIONS['url'] = get_input('Enter LDAP url?', LDAP_OPTIONS['url'], USE_DEFAULT)
+ LDAP_OPTIONS['uid'] = get_input('Enter LDAP UID?', LDAP_OPTIONS['uid'], USE_DEFAULT)
+ LDAP_OPTIONS['bind_dn'] = get_input('Enter LDAP bind_dn?', LDAP_OPTIONS['bind_dn'], USE_DEFAULT)
default_auth_options = defaults.get('saml_options', dict())
SAML_OPTIONS = {
@@ -356,28 +325,28 @@ def __call__(self, parser, namespace, values, option_string=None):
}
if AUTHENTICATION_METHOD == 'SamlAuthentication':
- SAML_OPTIONS['name'] = get_input('Enter name you would like shown to user for authentication?', SAML_OPTIONS['name'])
- SAML_OPTIONS['username_attribute'] = get_input('Enter SAML username attribute?', SAML_OPTIONS['username_attribute'])
+ SAML_OPTIONS['name'] = get_input('Enter name you would like shown to user for authentication?', SAML_OPTIONS['name'], USE_DEFAULT)
+ SAML_OPTIONS['username_attribute'] = get_input('Enter SAML username attribute?', SAML_OPTIONS['username_attribute'], USE_DEFAULT)
CGI_URL = SUBMISSION_URL + '/cgi-bin'
- SUBMITTY_ADMIN_USERNAME = get_input("What is the submitty admin username (optional)?", defaults['submitty_admin_username'])
+ SUBMITTY_ADMIN_USERNAME = get_input("What is the submitty admin username (optional)?", defaults['submitty_admin_username'], USE_DEFAULT)
while True:
- is_email_enabled = get_input("Will Submitty use email notifications? [y/n]", 'y')
+ is_email_enabled = get_input("Will Submitty use email notifications? [y/n]", 'y', USE_DEFAULT)
if (is_email_enabled.lower() in ['yes', 'y']):
EMAIL_ENABLED = True
- EMAIL_USER = get_input("What is the email user?", defaults['email_user'])
- EMAIL_PASSWORD = get_input("What is the email password",defaults['email_password'])
- EMAIL_SENDER = get_input("What is the email sender address (the address that will appear in the From: line)?",defaults['email_sender'])
- EMAIL_REPLY_TO = get_input("What is the email reply to address?", defaults['email_reply_to'])
- EMAIL_SERVER_HOSTNAME = get_input("What is the email server hostname?", defaults['email_server_hostname'])
+ EMAIL_USER = get_input("What is the email user?", defaults['email_user'], USE_DEFAULT)
+ EMAIL_PASSWORD = get_input("What is the email password",defaults['email_password'], USE_DEFAULT)
+ EMAIL_SENDER = get_input("What is the email sender address (the address that will appear in the From: line)?",defaults['email_sender'], USE_DEFAULT)
+ EMAIL_REPLY_TO = get_input("What is the email reply to address?", defaults['email_reply_to'], USE_DEFAULT)
+ EMAIL_SERVER_HOSTNAME = get_input("What is the email server hostname?", defaults['email_server_hostname'], USE_DEFAULT)
try:
- EMAIL_SERVER_PORT = int(get_input("What is the email server port?", defaults['email_server_port']))
+ EMAIL_SERVER_PORT = int(get_input("What is the email server port?", defaults['email_server_port']), USE_DEFAULT)
except ValueError:
EMAIL_SERVER_PORT = defaults['email_server_port']
- EMAIL_INTERNAL_DOMAIN = get_input("What is the internal email address format?", defaults['email_internal_domain'])
+ EMAIL_INTERNAL_DOMAIN = get_input("What is the internal email address format?", defaults['email_internal_domain'], USE_DEFAULT)
break
elif (is_email_enabled.lower() in ['no', 'n']):
@@ -541,7 +510,7 @@ def write(x=''):
if not args.worker:
if not os.path.isfile(WORKERS_JSON):
capabilities = ["default"]
- if args.setup_for_sample_courses:
+ if args.dev_vm:
capabilities.extend(["cpp", "python", "et-cetera", "notebook", "unsupported"])
worker_dict = {
diff --git a/.setup/defaults.json b/.setup/defaults.json
new file mode 100644
index 00000000000..fff700e0804
--- /dev/null
+++ b/.setup/defaults.json
@@ -0,0 +1,35 @@
+{
+ "database_host": "localhost",
+ "database_port": 5432,
+ "database_user": "submitty_dbuser",
+ "database_course_user": "submitty_course_dbuser",
+ "submission_url": "",
+ "supervisor_user": "submitty",
+ "vcs_url": "",
+ "authentication_method": 0,
+ "institution_name" : "",
+ "institution_homepage" : "",
+ "user_create_account" : false,
+ "timezone" : "America/New_York",
+ "submitty_admin_username": "",
+ "email_user": "",
+ "email_password": "",
+ "email_sender": "submitty@myuniversity.edu",
+ "email_reply_to": "submitty_do_not_reply@myuniversity.edu",
+ "email_server_hostname": "mail.myuniversity.edu",
+ "email_server_port": 25,
+ "email_internal_domain": "example.com",
+ "course_code_requirements": "Please follow your school's convention for course code.",
+ "sys_admin_email": "",
+ "sys_admin_url": "",
+ "ldap_options": {
+ "url": "",
+ "uid": "",
+ "bind_dn": ""
+ },
+ "saml_options": {
+ "name": "",
+ "username_attribute": ""
+ },
+ "course_material_file_upload_limit_mb": 100
+}
\ No newline at end of file
diff --git a/.setup/install_system.sh b/.setup/install_system.sh
index 2263d1373c2..f29676ec616 100644
--- a/.setup/install_system.sh
+++ b/.setup/install_system.sh
@@ -687,29 +687,7 @@ else
if [ -z "${SUBMISSION_URL}" ]; then
SUBMISSION_URL='http://192.168.56.101'
fi
- echo -e "/var/run/postgresql
-${DB_USER}
-${DATABASE_PASSWORD}
-${DB_COURSE_USER}
-${DB_COURSE_PASSWORD}
-America/New_York
-en_US
-100
-${SUBMISSION_URL}
-
-
-sysadmin@example.com
-https://example.com
-1
-submitty-admin
-y
-
-
-submitty@vagrant
-do-not-reply@vagrant
-localhost
-25
-" | python3 ${SUBMITTY_REPOSITORY}/.setup/CONFIGURE_SUBMITTY.py --debug --setup-for-sample-courses --websocket-port ${WEBSOCKET_PORT}
+ python3 ${SUBMITTY_REPOSITORY}/.setup/CONFIGURE_SUBMITTY.py --debug --dev-vm --websocket-port ${WEBSOCKET_PORT}
# Set these manually as they're not asked about during CONFIGURE_SUBMITTY.py
sed -i -e 's/"url": ""/"url": "ldap:\/\/localhost"/g' ${SUBMITTY_INSTALL_DIR}/config/authentication.json
diff --git a/.setup/testing/setup.sh b/.setup/testing/setup.sh
index e488d4cab22..b05505ff8c6 100644
--- a/.setup/testing/setup.sh
+++ b/.setup/testing/setup.sh
@@ -47,32 +47,7 @@ chown ${PHP_USER}:${PHP_GROUP} ${SUBMITTY_DATA_DIR}
chmod -R 777 ${SUBMITTY_INSTALL_DIR}
chmod -R 777 ${SUBMITTY_DATA_DIR}
-echo -e "localhost
-5432
-submitty_dbuser
-submitty_dbuser
-submitty_course_dbuser
-submitty_course_dbuser
-America/New_York
-en_US
-100
-http://localhost
-
-
-sysadmin@example.com
-https://example.com
-2
-y
-
-
-y
-
-
-submitty@vagrant
-do-not-reply@vagrant
-localhost
-25
-" | python3 ${SUBMITTY_REPOSITORY}/.setup/CONFIGURE_SUBMITTY.py --debug --setup-for-sample-courses --install-dir $SUBMITTY_INSTALL_DIR --data-dir $SUBMITTY_DATA_DIR
+python3 ${SUBMITTY_REPOSITORY}/.setup/CONFIGURE_SUBMITTY.py --debug --dev-vm --install-dir $SUBMITTY_INSTALL_DIR --data-dir $SUBMITTY_DATA_DIR
bash -c "echo 'export PATH=${PATH}' >> /home/${PHP_USER}/.profile"
bash -c "echo 'export PATH=${PATH}' >> /home/${PHP_USER}/.bashrc"
From 3938f554fb3731342748652f8962ea6e017549ac Mon Sep 17 00:00:00 2001
From: IDzyre
Date: Tue, 3 Feb 2026 12:52:15 -0800
Subject: [PATCH 17/28] Fix boolean
---
.setup/CONFIGURE_SUBMITTY.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index 2615af3721b..c7857283b97 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -8,6 +8,7 @@
import pwd
import secrets
import shutil
+import tzlocal
import string
import tempfile
@@ -178,7 +179,9 @@ def __call__(self, parser, namespace, values, option_string=None):
defaults = {}
with open(DEFAULTS_FILE, 'r') as defaults_file:
defaults = json.load(defaults_file)
+ defaults['timezone'] = str(tzlocal.get_localzone())
+print(defaults)
loaded_defaults = {}
if os.path.isfile(CONFIGURATION_JSON):
with open(CONFIGURATION_JSON) as conf_file:
@@ -218,7 +221,7 @@ def __call__(self, parser, namespace, values, option_string=None):
print('Hit enter to use default in []')
print()
-USE_DEFAULT = args.dev_vm
+USE_DEFAULT = args.dev_vm is True
if args.worker:
SUPERVISOR_USER = get_input('What is the id for your submitty user?', defaults['supervisor_user'], USE_DEFAULT)
print('SUPERVISOR USER : {}'.format(SUPERVISOR_USER))
From 43043af30ac5a8b96db0c8c4936a686666859bb6 Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 13:02:14 -0800
Subject: [PATCH 18/28] Add debugging statements
---
.setup/CONFIGURE_SUBMITTY.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index c7857283b97..00832e1f2f6 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -181,7 +181,6 @@ def __call__(self, parser, namespace, values, option_string=None):
defaults = json.load(defaults_file)
defaults['timezone'] = str(tzlocal.get_localzone())
-print(defaults)
loaded_defaults = {}
if os.path.isfile(CONFIGURATION_JSON):
with open(CONFIGURATION_JSON) as conf_file:
@@ -222,6 +221,8 @@ def __call__(self, parser, namespace, values, option_string=None):
print('Hit enter to use default in []')
print()
USE_DEFAULT = args.dev_vm is True
+print(args)
+print(args.dev_vm)
if args.worker:
SUPERVISOR_USER = get_input('What is the id for your submitty user?', defaults['supervisor_user'], USE_DEFAULT)
print('SUPERVISOR USER : {}'.format(SUPERVISOR_USER))
From 639a70c79775d8d3ca90781fe180c6ec1b886c45 Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 13:10:18 -0800
Subject: [PATCH 19/28] Add more debugging statements
---
.setup/CONFIGURE_SUBMITTY.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index 00832e1f2f6..a8d28a23a08 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -28,7 +28,8 @@ def get_ids(user):
raise SystemExit("ERROR: Could not find user: " + user)
-def get_input(question, default="", use_default = False):
+def get_input(question, default="", use_default=False):
+ print(use_default)
if use_default:
return default
add = "[{}] ".format(default) if default != "" else ""
From 893f97f40c26cf520d91cee7bad9cafa82c35b09 Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 13:20:03 -0800
Subject: [PATCH 20/28] Fix incorrect location of UseDefault
---
.setup/CONFIGURE_SUBMITTY.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index a8d28a23a08..a0930305b00 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -222,8 +222,6 @@ def __call__(self, parser, namespace, values, option_string=None):
print('Hit enter to use default in []')
print()
USE_DEFAULT = args.dev_vm is True
-print(args)
-print(args.dev_vm)
if args.worker:
SUPERVISOR_USER = get_input('What is the id for your submitty user?', defaults['supervisor_user'], USE_DEFAULT)
print('SUPERVISOR USER : {}'.format(SUPERVISOR_USER))
@@ -232,7 +230,7 @@ def __call__(self, parser, namespace, values, option_string=None):
print()
if not os.path.isdir(DATABASE_HOST):
- DATABASE_PORT = int(get_input('What is the database port?', defaults['database_port']), USE_DEFAULT)
+ DATABASE_PORT = int(get_input('What is the database port?', defaults['database_port'], USE_DEFAULT))
print()
else:
DATABASE_PORT = defaults['database_port']
From 76e3fe56e7403f4f272551d7362e1740579961f3 Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 13:35:14 -0800
Subject: [PATCH 21/28] specify defaults for those that don't
---
.setup/CONFIGURE_SUBMITTY.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index a0930305b00..1ec6c0eb5f4 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -241,7 +241,7 @@ def __call__(self, parser, namespace, values, option_string=None):
default = ''
if 'database_password' in defaults and DATABASE_USER == defaults['database_user']:
default = '(Leave blank to use same password)'
- DATABASE_PASS = get_input('What is the password for the global database user/role {}? {}'.format(DATABASE_USER, default), USE_DEFAULT)
+ DATABASE_PASS = get_input('What is the password for the global database user/role {}? {}'.format(DATABASE_USER, default), "", USE_DEFAULT)
if DATABASE_PASS == '' and DATABASE_USER == defaults['database_user'] and 'database_password' in defaults:
DATABASE_PASS = defaults['database_password']
print()
@@ -252,7 +252,7 @@ def __call__(self, parser, namespace, values, option_string=None):
default = ''
if 'database_course_password' in defaults and DATABASE_COURSE_USER == defaults['database_course_user']:
default = '(Leave blank to use same password)'
- DATABASE_COURSE_PASSWORD = get_input('What is the password for the course database user/role {}? {}'.format(DATABASE_COURSE_USER, default), USE_DEFAULT)
+ DATABASE_COURSE_PASSWORD = get_input('What is the password for the course database user/role {}? {}'.format(DATABASE_COURSE_USER, default), "", USE_DEFAULT)
if DATABASE_COURSE_PASSWORD == '' and DATABASE_COURSE_USER == defaults['database_course_user'] and 'database_course_password' in defaults:
DATABASE_COURSE_PASSWORD = defaults['database_course_password']
print()
@@ -260,7 +260,7 @@ def __call__(self, parser, namespace, values, option_string=None):
TIMEZONE = get_input('What timezone should Submitty use? (for a full list of supported timezones see http://php.net/manual/en/timezones.php)', defaults['timezone'], USE_DEFAULT)
print()
- DEFAULT_LOCALE = get_input('What default language should the Submitty site use?', 'en_US')
+ DEFAULT_LOCALE = get_input('What default language should the Submitty site use?', 'en_US', USE_DEFAULT)
print()
COURSE_MATERIAL_UPLOAD_LIMIT_MB = get_input('What is the maximum file upload size for course materials (in MB)?', defaults['course_material_file_upload_limit_mb'], USE_DEFAULT)
From 1b3d333dae53f934bd39d54781f12d8e60bf1a9e Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 13:41:37 -0800
Subject: [PATCH 22/28] More fixes for use_default
---
.setup/CONFIGURE_SUBMITTY.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index 1ec6c0eb5f4..2db1b14e0b1 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -295,7 +295,7 @@ def __call__(self, parser, namespace, values, option_string=None):
while True:
try:
- auth = int(get_input('Enter number?', defaults['authentication_method']), USE_DEFAULT) - 1
+ auth = int(get_input('Enter number?', defaults['authentication_method'], USE_DEFAULT)) - 1
except ValueError:
auth = -1
if auth in range(len(authentication_methods)):
From fa2104ab2a8944c71158032b16a5f3bb2a2b770b Mon Sep 17 00:00:00 2001
From: IDzyre
Date: Tue, 3 Feb 2026 14:33:35 -0800
Subject: [PATCH 23/28] use file database by default
---
.setup/defaults.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.setup/defaults.json b/.setup/defaults.json
index fff700e0804..9e8095234e9 100644
--- a/.setup/defaults.json
+++ b/.setup/defaults.json
@@ -1,12 +1,12 @@
{
- "database_host": "localhost",
+ "database_host": "/var/run/postgresql",
"database_port": 5432,
"database_user": "submitty_dbuser",
"database_course_user": "submitty_course_dbuser",
"submission_url": "",
"supervisor_user": "submitty",
"vcs_url": "",
- "authentication_method": 0,
+ "authentication_method": 1,
"institution_name" : "",
"institution_homepage" : "",
"user_create_account" : false,
From 16a6f53ae8d80822b2177bd0f116c1e1f80ac0e7 Mon Sep 17 00:00:00 2001
From: IDzyre
Date: Tue, 3 Feb 2026 14:43:57 -0800
Subject: [PATCH 24/28] Final fix of use_default
---
.setup/CONFIGURE_SUBMITTY.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index 2db1b14e0b1..a5c5b79fc2e 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -346,7 +346,7 @@ def __call__(self, parser, namespace, values, option_string=None):
EMAIL_REPLY_TO = get_input("What is the email reply to address?", defaults['email_reply_to'], USE_DEFAULT)
EMAIL_SERVER_HOSTNAME = get_input("What is the email server hostname?", defaults['email_server_hostname'], USE_DEFAULT)
try:
- EMAIL_SERVER_PORT = int(get_input("What is the email server port?", defaults['email_server_port']), USE_DEFAULT)
+ EMAIL_SERVER_PORT = int(get_input("What is the email server port?", defaults['email_server_port'], USE_DEFAULT))
except ValueError:
EMAIL_SERVER_PORT = defaults['email_server_port']
EMAIL_INTERNAL_DOMAIN = get_input("What is the internal email address format?", defaults['email_internal_domain'], USE_DEFAULT)
From a62d991db4addeb2e23eb45aa7a304c1a8f7b36d Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 15:02:13 -0800
Subject: [PATCH 25/28] CI
---
.setup/CONFIGURE_SUBMITTY.py | 4 ++++
.setup/testing/setup.sh | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/.setup/CONFIGURE_SUBMITTY.py b/.setup/CONFIGURE_SUBMITTY.py
index a5c5b79fc2e..374176af183 100644
--- a/.setup/CONFIGURE_SUBMITTY.py
+++ b/.setup/CONFIGURE_SUBMITTY.py
@@ -66,6 +66,8 @@ def __call__(self, parser, namespace, values, option_string=None):
'This should not be used in production!')
parser.add_argument('--dev-vm', action='store_true', default=False,
help="Sets up submitty for use with Vagrant for developers, not to be used for production")
+parser.add_argument('--ci', action='store_true', default=False,
+ help="Sets up Submitty with parameters for CI, This should not be used in production.")
parser.add_argument('--worker', action='store_true', default=False, help='Configure Submitty with autograding only')
parser.add_argument('--install-dir', default='/usr/local/submitty', help='Set the install directory for Submitty')
parser.add_argument('--data-dir', default='/var/local/submitty', help='Set the data directory for Submitty')
@@ -181,6 +183,8 @@ def __call__(self, parser, namespace, values, option_string=None):
with open(DEFAULTS_FILE, 'r') as defaults_file:
defaults = json.load(defaults_file)
defaults['timezone'] = str(tzlocal.get_localzone())
+ if args.ci:
+ defaults['database_host'] = 'localhost'
loaded_defaults = {}
if os.path.isfile(CONFIGURATION_JSON):
diff --git a/.setup/testing/setup.sh b/.setup/testing/setup.sh
index b05505ff8c6..66622d70d2f 100644
--- a/.setup/testing/setup.sh
+++ b/.setup/testing/setup.sh
@@ -47,7 +47,7 @@ chown ${PHP_USER}:${PHP_GROUP} ${SUBMITTY_DATA_DIR}
chmod -R 777 ${SUBMITTY_INSTALL_DIR}
chmod -R 777 ${SUBMITTY_DATA_DIR}
-python3 ${SUBMITTY_REPOSITORY}/.setup/CONFIGURE_SUBMITTY.py --debug --dev-vm --install-dir $SUBMITTY_INSTALL_DIR --data-dir $SUBMITTY_DATA_DIR
+python3 ${SUBMITTY_REPOSITORY}/.setup/CONFIGURE_SUBMITTY.py --debug --dev-vm --ci --install-dir $SUBMITTY_INSTALL_DIR --data-dir $SUBMITTY_DATA_DIR
bash -c "echo 'export PATH=${PATH}' >> /home/${PHP_USER}/.profile"
bash -c "echo 'export PATH=${PATH}' >> /home/${PHP_USER}/.bashrc"
From db027624c2152efe419ef2fc07f1a5f77baf5f45 Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 15:40:52 -0800
Subject: [PATCH 26/28] Use default password CHANGEME
---
.setup/defaults.json | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.setup/defaults.json b/.setup/defaults.json
index 9e8095234e9..cca2bbefd54 100644
--- a/.setup/defaults.json
+++ b/.setup/defaults.json
@@ -2,6 +2,8 @@
"database_host": "/var/run/postgresql",
"database_port": 5432,
"database_user": "submitty_dbuser",
+ "database_password": "CHANGE_ME",
+ "database_course_password": "CHANGE_ME_COURSE",
"database_course_user": "submitty_course_dbuser",
"submission_url": "",
"supervisor_user": "submitty",
From d991e90d8d79507d8a7885de6248ca87c13b282b Mon Sep 17 00:00:00 2001
From: peteca
Date: Tue, 3 Feb 2026 16:04:38 -0800
Subject: [PATCH 27/28] Use original passwords
---
.setup/defaults.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.setup/defaults.json b/.setup/defaults.json
index cca2bbefd54..f2fda8ad544 100644
--- a/.setup/defaults.json
+++ b/.setup/defaults.json
@@ -2,8 +2,8 @@
"database_host": "/var/run/postgresql",
"database_port": 5432,
"database_user": "submitty_dbuser",
- "database_password": "CHANGE_ME",
- "database_course_password": "CHANGE_ME_COURSE",
+ "database_password": "submitty_dbuser",
+ "database_course_password": "submitty_dbuser",
"database_course_user": "submitty_course_dbuser",
"submission_url": "",
"supervisor_user": "submitty",
From d515fa84dccc6b5daba5fd6ba1bfb8884016f126 Mon Sep 17 00:00:00 2001
From: peteca
Date: Mon, 9 Feb 2026 15:54:37 -0800
Subject: [PATCH 28/28] Fix calls
---
.github/workflows/ci.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index edbe66f1e53..309902d1a46 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -508,7 +508,6 @@ jobs:
echo "http://localhost" # submitty url
echo "" # vcs url
echo "" # institution name
- echo "y" # user create account
echo "" # sysadmin email
echo "" # where to report
echo "1" # PamAuth