Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1882fc8
workflow to save arm machine
skara9 Sep 30, 2025
ebada1f
[Bugfix:Developer] Fix Sidebar Cypress Test (#12078)
IDzyre Oct 2, 2025
02d3aed
[Bugfix:TAGrading] Show autograding stats before TAGrading (#12085)
lavalleeale Oct 2, 2025
7f32c5b
Merge branch 'main' into save-vm-arm
skara9 Oct 2, 2025
418fa08
[Bugfix:Forum] Fix Markdown Toggle on Forum Replies (#12071)
skara9 Oct 3, 2025
34652ef
[Feature:Notifications] Mark Seen for Home Page (#12007)
JManion32 Oct 3, 2025
58d2ede
[Bugfix:TAGrading] Fix component auto-open (#12127)
lavalleeale Oct 3, 2025
c821d7d
[Feature:TAGrading] Allow changing graders without tagrading (#12066)
lavalleeale Oct 3, 2025
a4c5c0f
[DevDependency] Bump shivammathur/setup-php from 2.35.4 to 2.35.5 in …
dependabot[bot] Oct 6, 2025
f6c236c
[Dependency] Bump luxon from 3.7.1 to 3.7.2 in /site (#12112)
dependabot[bot] Oct 6, 2025
dd4406f
[DevDependency] Bump globals from 16.3.0 to 16.4.0 in /site (#12113)
dependabot[bot] Oct 6, 2025
89582b6
[DevDependency] Bump vue-tsc from 3.0.6 to 3.1.0 in /site (#12114)
dependabot[bot] Oct 6, 2025
2e2066b
[Dependency] Bump @codemirror/view from 6.38.2 to 6.38.4 in /site (#1…
dependabot[bot] Oct 6, 2025
2e891ee
[DevDependency] Bump @types/node from 24.3.0 to 24.6.1 in /site (#12116)
dependabot[bot] Oct 6, 2025
64d6f87
[Dependency] Bump psutil from 7.0.0 to 7.1.0 in /.setup/pip (#12120)
dependabot[bot] Oct 6, 2025
b9e5870
[DevDependency] Bump actions/setup-node from 4 to 5 (#12123)
dependabot[bot] Oct 6, 2025
59403bf
[DevDependency] Bump actions/setup-python from 5 to 6 (#12121)
dependabot[bot] Oct 6, 2025
307f971
[DevDependency] Bump shivammathur/setup-php from 2.35.4 to 2.35.5 (#1…
dependabot[bot] Oct 6, 2025
0eda430
[Dependency] Bump black from 25.1.0 to 25.9.0 in /.setup/pip (#12119)
dependabot[bot] Oct 6, 2025
a12250b
[DevDependency] Bump cypress from 15.1.0 to 15.3.0 in /site (#12118)
dependabot[bot] Oct 6, 2025
77ba55f
[Dependency] Bump jspdf from 3.0.2 to 3.0.3 in /site (#12115)
dependabot[bot] Oct 6, 2025
b2c6db0
[DevDependency] Bump actions/setup-python from 5 to 6 in /.github/act…
dependabot[bot] Oct 6, 2025
cebd603
[Feature:Notifications] Improve Panel Interactivity (#12012)
JManion32 Oct 6, 2025
783ecef
[Bugfix:Submission] Fix download from submissions_processed (#12087)
lavalleeale Oct 6, 2025
b4fa1ef
[Bugfix:Autograding] system calls on pdf_notes_page gradeables (#12077)
bmcutler Oct 6, 2025
6a1d195
[Bugfix:CourseMaterials] Improve Course Materials Editor (#12074)
RyanStyron Oct 9, 2025
88bca84
[Bugfix:Forum] Fix Clear Messages Socket (#12072)
JManion32 Oct 10, 2025
9733059
[Dependency] Bump RainbowGrades from v24.12.00 to v25.10.00 (#12136)
SubmittyBot Oct 10, 2025
40aba07
Merge branch 'main' into save-vm-arm
skara9 Oct 17, 2025
b66cd84
update token and box
skara9 Oct 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/actions/e2e-Setup-Composite/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ runs:
sudo chmod -R a+rwx /tmp/
echo "This file is used to check if Submitty is being run in the Github Actions CI." > ${SUBMITTY_REPOSITORY}/.github_actions_ci_flag
shell: bash
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: shivammathur/setup-php@2.35.4
- uses: shivammathur/setup-php@2.35.5
with:
php-version: ${{ env.PHP_VER }}
extensions: imagick, ldap
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bump_repo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: 3.11
- name: Update version
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
working-directory: site
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache Node Modules
Expand All @@ -71,7 +71,7 @@ jobs:
working-directory: site
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache Node Modules
Expand All @@ -96,7 +96,7 @@ jobs:
working-directory: site
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache Node Modules
Expand Down Expand Up @@ -124,7 +124,7 @@ jobs:
working-directory: site
steps:
- uses: actions/checkout@v5
- uses: shivammathur/setup-php@2.35.4
- uses: shivammathur/setup-php@2.35.5
with:
php-version: ${{ env.PHP_VER }}
- name: Cache Composer
Expand All @@ -151,7 +151,7 @@ jobs:
working-directory: site
steps:
- uses: actions/checkout@v5
- uses: shivammathur/setup-php@2.35.4
- uses: shivammathur/setup-php@2.35.5
with:
php-version: ${{ env.PHP_VER }}
- name: Cache Composer
Expand Down Expand Up @@ -187,7 +187,7 @@ jobs:
working-directory: site
steps:
- uses: actions/checkout@v5
- uses: shivammathur/setup-php@2.35.4
- uses: shivammathur/setup-php@2.35.5
with:
php-version: ${{ env.PHP_VER }}
extensions: imagick
Expand Down Expand Up @@ -220,7 +220,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Cache Pip
Expand All @@ -242,7 +242,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Cache Pip
Expand Down Expand Up @@ -959,7 +959,7 @@ jobs:
sudo chmod -R a+rwx ${SUBMITTY_INSTALL_DIR}
sudo chmod -R a+rwx /tmp/

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
- name: Cache Node Modules
Expand Down
70 changes: 70 additions & 0 deletions .github/workflows/save_vm_mac_arm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Package Cloud VM - macOS ARM

on:
schedule:
- cron: '0 0 * * 0'
workflow_dispatch:

permissions:
contents: read

jobs:
vagrant-up:
runs-on: macos-15-xlarge
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Install Vagrant
run: |
brew tap hashicorp/tap
brew install hashicorp/tap/hashicorp-vagrant

- name: Install VirtualBox
run: brew install --cask virtualbox

- name: Install HCP CLI
run: brew install hashicorp/tap/hcp

- name: Get latest version
id: get-version
run: |
TAG=$(git describe --tags --abbrev=0)
if ! [[ $TAG =~ ^v[0-9]{2}\.[0-9]{2}\.[0-9]{2}$ ]]; then
echo "Invalid tag name: '$TAG'"
exit 1
fi
echo "version=${TAG:1}" >> $GITHUB_OUTPUT

- name: Vagrant Up
run: CI=1 vagrant up

- name: Validate image
run: curl --show-error --fail --include http://localhost:1511

- name: Save image
run: vagrant package --output submitty.box

- name: Get HCP token
id: hcp-token
run: |
hcp auth login --client-id=${{ secrets.HCP_CLIENT_ID }} --client-secret=${{ secrets.HCP_CLIENT_SECRET }}
echo "HCP_TOKEN=$(hcp auth print-access-token)" >> $GITHUB_OUTPUT

- name: Publish image
run: |
export VAGRANT_CLOUD_TOKEN="${{ steps.hcp-token.outputs.HCP_TOKEN }}"
vagrant cloud auth login
vagrant cloud publish skara9/submitty-u22-arm ${{ steps.get-version.outputs.version }}.$(date +"%y%m%d%H%M") virtualbox submitty.box --release --force
vagrant cloud auth logout

- name: Acquire Job ID
if: failure()
id: get-job-id
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
jobs=$(gh api repos/${{ github.repository }}/actions/runs/${{ github.run_id}}/attempts/${{ github.run_attempt }}/jobs)
job_id=$(echo $jobs | jq -r '.jobs[] | select(.runner_name=="${{ runner.name }}") | .id')
echo "job_id=$job_id" >> $GITHUB_OUTPUT
2 changes: 1 addition & 1 deletion .setup/bin/versions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
export AnalysisTools_Version=v22.03.00
export AnalysisToolsTS_Version=v23.10.00
export Lichen_Version=v23.09.00
export RainbowGrades_Version=v24.12.00
export RainbowGrades_Version=v25.10.00
export Tutorial_Version=v25.06.03
export SysadminTools_Version=v25.01.00
export Localization_Version=v23.08.02
Expand Down
2 changes: 1 addition & 1 deletion .setup/pip/dev_requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ flake8-bugbear==24.12.12
flake8==7.3.0

# Code Formatter
black==25.1.0
black==25.9.0
2 changes: 1 addition & 1 deletion .setup/pip/system_requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ python-pam==2.0.2
ruamel.yaml==0.18.15
psycopg2-binary==2.9.10
sqlalchemy==2.0.42
psutil==7.0.0
psutil==7.1.0
python-dateutil==2.9.0.post0
watchdog==6.0.0
xlsx2csv==0.8.4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@

// needed for /usr/bin/mv
"allow_system_calls" : [
"COMMUNICATIONS_AND_NETWORKING_SIGNALS",
"FILE_MANAGEMENT_MOVE_DELETE_RENAME_FILE_DIRECTORY",
"PROCESS_CONTROL_ADVANCED",
"PROCESS_CONTROL_NEW_PROCESS_THREAD"
"ALLOW_ALL_RESTRICTED_SYSTEM_CALLS"
],

"autograding" : {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@

// needed for /usr/bin/mv
"allow_system_calls" : [
"COMMUNICATIONS_AND_NETWORKING_SIGNALS",
"FILE_MANAGEMENT_MOVE_DELETE_RENAME_FILE_DIRECTORY",
"PROCESS_CONTROL_ADVANCED",
"PROCESS_CONTROL_NEW_PROCESS_THREAD"
"ALLOW_ALL_RESTRICTED_SYSTEM_CALLS"
],

"autograding_method": "docker",
Expand Down
12 changes: 4 additions & 8 deletions site/app/controllers/ChatroomController.php
Original file line number Diff line number Diff line change
Expand Up @@ -312,23 +312,19 @@ public function clearMessages(string $chatroom_id): JsonResponse {

// Get message IDs for socket notifications before bulk deletion
$messages = $em->getRepository(Message::class)->findBy(['chatroom' => $chatroom_id, 'is_deleted' => false], ['timestamp' => 'ASC']);
$message_ids = array_map(function ($message) {
return $message->getId();
},
$messages);

// Bulk update to mark all messages as deleted - optimized to avoid N+1 queries
$em->createQuery('UPDATE app\entities\chat\Message m SET m.is_deleted = true WHERE m.chatroom = :chatroom_id AND m.is_deleted = false')
->setParameter('chatroom_id', $chatroom_id)
->execute();

// Send socket messages for each deleted message ID
foreach ($message_ids as $message_id) {
foreach ($messages as $message) {
$msg_array = [];
$msg_array['type'] = 'message_delete';
$msg_array['socket'] = "chatroom_$chatroom_id";
$msg_array['id'] = $message_id;
$this->sendSocketMessage($msg_array);
$msg_array['chatroom_id'] = $message->getChatroom()->getId();
$msg_array['message_id'] = $message->getId();
$this->sendSocketMessage($msg_array, true);
}
return JsonResponse::getSuccessResponse("cleared chatroom $chatroom_id successfully");
}
Expand Down
37 changes: 37 additions & 0 deletions site/app/controllers/HomePageController.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,43 @@ public function getGroups($user_id = null): MultiResponse {
);
}

#[Route("/home/go_to_course_notifications", methods: ["POST"])]
public function goToCourseNotifications(): void {
$courses = $this->courses;
$course_title = $_POST['course'];
foreach ($courses as $course) {
if ($course->getTitle() === $course_title) {
$semester = $course->getTerm();
$this->core->loadCourseConfig($semester, $course_title);
$this->core->loadCourseDatabase();
$url = $this->core->buildCourseUrl(['notifications']);
$this->core->redirect($url);
return;
}
}
$this->core->addErrorMessage("Course not found.");
$this->core->redirect($this->core->buildUrl(['home']));
}

#[Route("/home/mark_seen", methods: ["POST"])]
public function markNotificationsAsSeen(): void {
$courses = $this->courses;
$user_id = $this->core->getUser()->getId();
$original_config = clone $this->core->getConfig();
$course_title = $_POST['course'];
$notification_id = $_POST['notification_id'];
foreach ($courses as $course) {
if ($course->getTitle() === $course_title) {
$semester = $course->getTerm();
$this->core->loadCourseConfig($semester, $course_title);
$this->core->loadCourseDatabase();
$this->core->getQueries()->markNotificationAsSeen($user_id, $notification_id);
break;
}
}
$this->core->setConfig($original_config);
}

/**
* Returns recent notifications for a user
* @return array<int, Notification>
Expand Down
Loading
Loading