Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
184 commits
Select commit Hold shift + click to select a range
6b9528f
Bump the all-updates group with 15 updates
dependabot[bot] May 22, 2026
5a9a946
Adjustments to github workflows
dkfellows May 26, 2026
875aa48
More changes, including zizmor vulnerability scanner
dkfellows May 27, 2026
469fe24
fix: update timestamp columns to use 'timestamp without time zone' ac…
sjmf May 27, 2026
88ad48c
Some small fixes
dkfellows May 27, 2026
090a825
Bind our own action versions
dkfellows May 27, 2026
180bea5
Trigger rebuild
dkfellows May 27, 2026
d7ba60c
Need newer zizmor revision
dkfellows May 27, 2026
964b09b
Updated contributing file
aharwood2 May 28, 2026
689a6d0
Updated readme
aharwood2 May 28, 2026
a83808c
Added code owners doc
aharwood2 May 28, 2026
29cee1d
Removed the temporary migration tool used for UoM update to v14
aharwood2 May 28, 2026
9f8a828
Add License and Copyright Headers
invalid-email-address May 28, 2026
9ab30da
Merge pull request #1344 from UoMResearchIT/add-license-headers-to-13…
aharwood2 May 28, 2026
01d0cac
Apply suggestions from code review
aharwood2 May 28, 2026
a21b045
Removed serilog
aharwood2 May 28, 2026
1488394
Setup production errors only
aharwood2 May 28, 2026
cf64a8e
Fix suggestions and tidy up triggers
dkfellows May 28, 2026
8ed2d0d
Some more tweaks
aharwood2 May 28, 2026
6c40341
Merge pull request #1337 from UoMResearchIT/dependabot/nuget/dot-conf…
aharwood2 May 28, 2026
f8485a6
Changed send email to just focus on one task, one email.
aharwood2 May 28, 2026
29f3040
Merge branch 'dev' into amend-workflows
dkfellows May 29, 2026
45030c5
fix: adjust date handling to use DateTime.Today for project status ch…
sjmf May 30, 2026
556e16b
fix: update database operations to use asynchronous methods for Postg…
sjmf May 30, 2026
7a3cb7f
Add License and Copyright Headers
invalid-email-address May 30, 2026
a463cc5
Merge pull request #1354 from UoMResearchIT/add-license-headers-to-13…
sjmf May 30, 2026
c8be39a
Merge branch 'dev' into 1340-timezone-pgsql-fix
sjmf May 30, 2026
38f9e6e
fix: retrieve contexts to Lists in SeedHelper before iteration to pre…
sjmf May 30, 2026
2bd5d7f
Fix PgSQL MARS multi access in GetSkillsForProject by calling .ToList()
sjmf Jun 2, 2026
15bd29c
fix: retrieve managed staff numbers as a list in TimesheetService (to…
sjmf Jun 2, 2026
186608e
fix: resolve sync-over-async deadlock in SettingsService.GetAll
sjmf Jun 2, 2026
2e211b3
fix: await service cache initialisation to prevent context disposal r…
sjmf Jun 2, 2026
57c1b5c
Removed creating an email address using username@manchester.ac.uk if …
PhilBradbury Jun 8, 2026
160437d
Fixed some typos
aharwood2 Jun 9, 2026
6a6c56a
Update README.md
aharwood2 Jun 9, 2026
3a895ab
Fixed regex in the rule
aharwood2 Jun 9, 2026
6f489eb
Updated workflow to use the ignore enabled version
aharwood2 Jun 9, 2026
d271dcd
Updated hash
aharwood2 Jun 9, 2026
341e411
And again
aharwood2 Jun 9, 2026
267fbd7
Updated workflow hash
aharwood2 Jun 9, 2026
c2684b3
Merge pull request #1339 from UoMResearchIT/amend-workflows
aharwood2 Jun 9, 2026
25ead13
Bump actions/setup-dotnet from 5.2.0 to 5.3.0
dependabot[bot] Jun 9, 2026
c5431e4
Bump UoMResearchIT/actions/.github/workflows/apply-reuse.yml
dependabot[bot] Jun 9, 2026
99eb977
Bump actions/checkout from 6.0.2 to 6.0.3
dependabot[bot] Jun 9, 2026
07ddcc5
Fixed name
aharwood2 Jun 9, 2026
fc8011d
Merge pull request #1343 from UoMResearchIT/1342-make-documentation-c…
aharwood2 Jun 9, 2026
a9079b9
Merge remote-tracking branch 'origin/dev' into 1347-do-away-with-serilog
aharwood2 Jun 9, 2026
57e3181
Merge remote-tracking branch 'origin/dev' into 1341-not-receiving-emails
aharwood2 Jun 9, 2026
a60bd01
Merge pull request #1348 from UoMResearchIT/1347-do-away-with-serilog
aharwood2 Jun 9, 2026
ac43e48
Potential fix for pull request finding
aharwood2 Jun 9, 2026
3024f15
Potential fix for pull request finding
aharwood2 Jun 9, 2026
5af5bc7
Potential fix for pull request finding
aharwood2 Jun 9, 2026
028e030
Fixed formatting
aharwood2 Jun 9, 2026
7755ab2
Merge pull request #1349 from UoMResearchIT/1341-not-receiving-emails
aharwood2 Jun 9, 2026
efd37ad
Merge remote-tracking branch 'origin/dev' into 1361-service-cache-ini…
aharwood2 Jun 9, 2026
21f2010
Merge remote-tracking branch 'origin/dev' into 1359-sync-over-async-d…
aharwood2 Jun 9, 2026
d18dbcd
Merge pull request #1362 from UoMResearchIT/1361-service-cache-initia…
aharwood2 Jun 9, 2026
b7593b2
Merge pull request #1360 from UoMResearchIT/1359-sync-over-async-dead…
aharwood2 Jun 9, 2026
cc485a8
Added new property to hold the current calculated grde so we can filt…
PhilBradbury Jun 10, 2026
d92f4ee
Altered the filtering for Line Manager to use the Person.LineManager.…
PhilBradbury Jun 10, 2026
bc0f797
Kept the Skilltag filtering as custom but removed similar for Line Ma…
PhilBradbury Jun 10, 2026
a097e1e
Updated the CurrenGrade property to get the grade based on today's da…
PhilBradbury Jun 10, 2026
622b517
Removed population of the CurrentGrade property from the code as it's…
PhilBradbury Jun 10, 2026
15ff715
Adjusted default FilterMode to be simple.
PhilBradbury Jun 10, 2026
7a40ee6
Removed Custom filtering for Faculty/School.
PhilBradbury Jun 10, 2026
34d5767
Added spinner and sorted out mis-mapping from db to FinanceSummaryIte…
PhilBradbury Jun 11, 2026
2cb5993
Slight amendment to code to get Subtasks deeploaded.
PhilBradbury Jun 11, 2026
7243f3e
Formatting fix
PhilBradbury Jun 11, 2026
2e9432c
Merge pull request #1369 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 11, 2026
ea49eb8
Merge pull request #1367 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 11, 2026
09f08e3
Merge pull request #1368 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 11, 2026
b4e8aef
Adjustments from AH review - indenting and also logging error rather …
PhilBradbury Jun 11, 2026
e3faa69
Merge pull request #1373 from UoMResearchIT/1365-summary-button-on-ma…
PhilBradbury Jun 11, 2026
0751533
Merge branch 'dev' into 1366-filtering-on-some-pages-broken
PhilBradbury Jun 11, 2026
431f45b
Merge remote-tracking branch 'origin/dev' into 1340-timezone-pgsql-fix
aharwood2 Jun 11, 2026
f829b1c
Merge remote-tracking branch 'origin/dev' into 1355-seed-readers-pgsql
aharwood2 Jun 11, 2026
5fc9a07
Merge pull request #1356 from UoMResearchIT/1355-seed-readers-pgsql
aharwood2 Jun 11, 2026
6e85917
Merge pull request #1353 from UoMResearchIT/1340-timezone-pgsql-fix
aharwood2 Jun 11, 2026
805d3b0
Merge branch 'dev' into 1366-filtering-on-some-pages-broken
PhilBradbury Jun 11, 2026
d626202
Added filtering back to most columns. Had to adjust the Project class…
PhilBradbury Jun 11, 2026
7aed35d
Merge branch '1366-filtering-on-some-pages-broken' of https://github.…
PhilBradbury Jun 11, 2026
b041340
Formatting fix
PhilBradbury Jun 11, 2026
c9ce58b
Bump UoMResearchIT/actions/.github/workflows/check-ruleset.yaml
dependabot[bot] Jun 12, 2026
62db061
Bump UoMResearchIT/actions/.github/workflows/apply-reuse.yml
dependabot[bot] Jun 12, 2026
89200c8
Added base class
aharwood2 Jun 15, 2026
a4163ed
Added migrations
aharwood2 Jun 15, 2026
ad62222
Added UI switch to data grid and updated active query logic
aharwood2 Jun 15, 2026
4676a8d
Updated the base services so they have access to proper logging and s…
aharwood2 Jun 15, 2026
9923135
Updated migration to set default value to true
aharwood2 Jun 15, 2026
1a54329
Small fixes to CSS and behaviour of switch
aharwood2 Jun 15, 2026
1a49eb0
Can't change task status if the activity is inactive
aharwood2 Jun 15, 2026
3050f43
Trigger task deactivation when deactivating activity
aharwood2 Jun 15, 2026
b0e8295
Added explicit FK and service methods to get codes and task IDs with …
aharwood2 Jun 16, 2026
9e59474
Added disabled conditions to prevent the deleting of codes or task th…
aharwood2 Jun 16, 2026
9f50ded
Fixed up the lambda logic
aharwood2 Jun 16, 2026
fdca85d
Improved tooltip message for disabled delete
aharwood2 Jun 16, 2026
d678575
Fixed a null exception when adding a new item without a parent yet
aharwood2 Jun 16, 2026
b463a6b
Add License and Copyright Headers
invalid-email-address Jun 16, 2026
e8f073a
Merge pull request #1379 from UoMResearchIT/add-license-headers-to-13…
aharwood2 Jun 16, 2026
85e377b
Improved service getter
aharwood2 Jun 17, 2026
c66164f
Added a explicit FK to the timesheet entry to avoid deep loading
aharwood2 Jun 17, 2026
784d296
Swapped out the background load task for a proper await pattern
aharwood2 Jun 17, 2026
8afb475
Potential fix for pull request finding
aharwood2 Jun 17, 2026
fcd001c
Improved the structure of the column and row styling
aharwood2 Jun 17, 2026
3a4f76e
Improved performance of the button check logic
aharwood2 Jun 17, 2026
cb582a7
Apply suggestions from code review
aharwood2 Jun 17, 2026
031c2ce
Merge pull request #1376 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 17, 2026
e98439a
Merge pull request #1377 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 17, 2026
d891473
Potential fix for pull request finding
aharwood2 Jun 17, 2026
e0da64f
Converted the timesheet help URL to a config variable
aharwood2 Jun 17, 2026
f42617e
Only show button if a URL is available
aharwood2 Jun 17, 2026
eff10dd
Added rest if the pipeline from environment to config
aharwood2 Jun 17, 2026
033f044
Revert "Added rest if the pipeline from environment to config"
aharwood2 Jun 17, 2026
b60ba82
Switched from an environment variable to a runtime setting instead as…
aharwood2 Jun 17, 2026
57373b5
Fixed call
aharwood2 Jun 17, 2026
bf5799d
Updated EndDate column to be checking against correct property.
PhilBradbury Jun 17, 2026
0600fcd
Merge branch '1366-filtering-on-some-pages-broken' of https://github.…
PhilBradbury Jun 17, 2026
6363606
Merge branch 'dev' into 1366-filtering-on-some-pages-broken
PhilBradbury Jun 17, 2026
64d5558
Removed old reference
aharwood2 Jun 17, 2026
1762276
Add filter by active on tasks to select
aharwood2 Jun 17, 2026
6639df0
Fixed reference to incorrect field in UI
aharwood2 Jun 17, 2026
e779c17
Unrelated fix to rounding on the invoice status decision
aharwood2 Jun 22, 2026
123c90a
Added some better protection against stale references in the delete m…
aharwood2 Jun 22, 2026
a7b1a02
A few tweaks I noticed as I walked through how this works.
aharwood2 Jun 22, 2026
2314de8
Added in the same gap filler used in the capacity charts with slight …
aharwood2 Jun 22, 2026
eb635e0
Filtered out the leadership assignments from the suggested resources …
aharwood2 Jun 22, 2026
f40a738
Made some adjustments to the method to make it work better for both l…
aharwood2 Jun 22, 2026
7258910
Improved service logic
aharwood2 Jun 22, 2026
909d6eb
Added a program call and service layer wrapper for service layer update
aharwood2 Jun 23, 2026
79b8c1a
Rearrange the startup logic to get the call in the scope
aharwood2 Jun 23, 2026
4855fc2
Actually get the service from the scope not the root provider
aharwood2 Jun 23, 2026
2e9ba87
Fixed up to use the existing GetAll so it deep loads the subtasks and…
aharwood2 Jun 23, 2026
df1fdcc
Merge pull request #1387 from UoMResearchIT/1364-suggested-resources-…
aharwood2 Jun 23, 2026
2c61ed5
Merge pull request #1381 from UoMResearchIT/1357-timesheet-task-categ…
aharwood2 Jun 23, 2026
18e56e7
Merge pull request #1382 from UoMResearchIT/1350-note-completion-date…
aharwood2 Jun 23, 2026
0f16ea4
Merge pull request #1385 from UoMResearchIT/1351-cant-delete-a-resour…
aharwood2 Jun 23, 2026
e7d8df4
Merge pull request #1378 from UoMResearchIT/1345-timesheet-codes-and-…
aharwood2 Jun 24, 2026
aec2988
Bump actions/checkout from 6.0.3 to 7.0.0
dependabot[bot] Jun 26, 2026
5f33dbc
Bump UoMResearchIT/actions/.github/workflows/apply-reuse.yml
dependabot[bot] Jun 26, 2026
375b992
Bump UoMResearchIT/actions/.github/workflows/check-ruleset.yaml
dependabot[bot] Jun 26, 2026
dc277c0
Bump DocX and 19 others
dependabot[bot] Jun 26, 2026
31f68e2
Update check-ruleset.yaml
dkfellows Jun 29, 2026
6348a0b
Added method to update display name given a person model
aharwood2 Jun 30, 2026
e4797d1
Added call to update method after edit of person
aharwood2 Jun 30, 2026
5f16d09
Actually fixed it and added a logging statement
aharwood2 Jun 30, 2026
f90c2b5
Merge pull request #1389 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 30, 2026
cafd404
Merge pull request #1390 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 30, 2026
c370342
Merge pull request #1391 from UoMResearchIT/dependabot/github_actions…
aharwood2 Jun 30, 2026
eb0e390
Merge remote-tracking branch 'origin/dev' into 1375-compute-or-cache-…
aharwood2 Jun 30, 2026
a62e259
Added custom env file path to readme
aharwood2 Jun 30, 2026
25b3456
Merge pull request #1396 from UoMResearchIT/aharwood2-patch-1
aharwood2 Jun 30, 2026
fc96a1b
chore: trigger PR refresh
aharwood2 Jun 30, 2026
c1c545c
Merge pull request #1395 from UoMResearchIT/1394-updating-a-person-na…
aharwood2 Jun 30, 2026
f40ca3b
Merge remote-tracking branch 'origin/dev' into 1366-filtering-on-some…
aharwood2 Jun 30, 2026
7339951
Improved documentation of existing shadow properties
aharwood2 Jul 1, 2026
0cd497d
Refactor of timesheet template shadow property so that it is privatel…
aharwood2 Jul 1, 2026
91d5409
Addressed review comment from co-pilot regarding the DB query complex…
aharwood2 Jul 1, 2026
1f03b90
Addition of manual filtering helpers for Radzen data grids to allow o…
aharwood2 Jul 1, 2026
8879385
Fixed docstring
aharwood2 Jul 1, 2026
483e56c
Switched to use a shadow property instead so at least we are consistent
aharwood2 Jul 1, 2026
efbd04f
Merge pull request #1371 from UoMResearchIT/1366-filtering-on-some-pa…
aharwood2 Jul 1, 2026
9372fb0
Merge remote-tracking branch 'origin/dev' into 1375-compute-or-cache-…
aharwood2 Jul 1, 2026
2c49f35
Fixed incorrect type for indirects setting
aharwood2 Jul 1, 2026
07a6a95
Improved performance of the financial references during meta data update
aharwood2 Jul 1, 2026
b16a9f0
Add exception to logger
aharwood2 Jul 1, 2026
9f79b00
Initial plan
Copilot Jul 1, 2026
59c908e
Optimize project metadata startup update path
Copilot Jul 1, 2026
2d75373
Improve project metadata refresh efficiency at startup
Copilot Jul 1, 2026
de210c3
Trim metadata refresh includes to required minimum
Copilot Jul 1, 2026
b22db45
Merge pull request #1397 from UoMResearchIT/copilot/fix-review-commen…
aharwood2 Jul 2, 2026
feba19b
Added handling for missing school and faculty info which is not requi…
aharwood2 Jul 2, 2026
89ed81d
Merge pull request #1388 from UoMResearchIT/1375-compute-or-cache-pro…
aharwood2 Jul 2, 2026
0ac87cb
Bumped version for next release
aharwood2 Jul 2, 2026
63182ea
Merge pull request #1398 from UoMResearchIT/version-bump
aharwood2 Jul 2, 2026
612ec41
Merge pull request #1383 from UoMResearchIT/dependabot/nuget/dot-conf…
aharwood2 Jul 2, 2026
e77168c
Merge remote-tracking branch 'origin/dev' into 992-add-some-basic-tes…
aharwood2 Jul 2, 2026
9cfe9e4
Finished adding page load tests
aharwood2 Jul 2, 2026
3280cd6
Some improvements based on how the application flow works
aharwood2 Jul 2, 2026
1d13d64
More robust resetting and waiting for readiness
aharwood2 Jul 2, 2026
b4b54cd
Tried adding more handling for dodgy circuit behaviour
aharwood2 Jul 2, 2026
051e63c
Restructuring of timeouts etc.
aharwood2 Jul 2, 2026
009f8a9
Added missing API endpoint tests
aharwood2 Jul 2, 2026
f7fe274
Fix formatting
aharwood2 Jul 2, 2026
399a441
Merge pull request #1400 from UoMResearchIT/992-add-some-basic-tests-…
aharwood2 Jul 2, 2026
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 .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "10.0.7",
"version": "10.0.9",
"commands": [
"dotnet-ef"
]
}
}
}
}
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,12 @@ updates:
all-updates:
patterns:
- "*"
cooldown:
default-days: 7
- package-ecosystem: "github-actions"
directories:
- "/"
schedule:
interval: "weekly"
cooldown:
default-days: 7
47 changes: 13 additions & 34 deletions .github/workflows/check-ruleset.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# GitHub Actions Workflow: Check Repository Ruleset
#
#
# This workflow ensures that the repository's branch protection rules
# match the expected ruleset defined in the template repository.
#
Expand Down Expand Up @@ -28,39 +28,18 @@ name: Check Repository Ruleset

on:
push:
branches: [main]
branches: [dev]
pull_request:

permissions:
contents: read
jobs:
check-ruleset:
if: github.actor != 'dependabot[bot]'
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v5

- name: Create GitHub App token
id: app-token
uses: actions/create-github-app-token@v3
with:
app-id: ${{ vars.ORG_ACTIONS_BOT_APP_ID }}
private-key: ${{ secrets.ORG_ACTIONS_BOT_PRIVATE_KEY }}
owner: UoMResearchIT

- name: Fetch Standard RSE Ruleset
id: expected
uses: UoMResearchIT/actions/get-repo-ruleset@v0.3
with:
repository: UoMResearchIT/RSE-Repository-Template
token: ${{ steps.app-token.outputs.token }}

- name: Fetch This Repository's Ruleset
id: current
uses: UoMResearchIT/actions/get-repo-ruleset@v0.3

- name: Compare Rulesets
uses: UoMResearchIT/actions/check-ruleset-containment@v0.3
with:
current: ${{ steps.current.outputs.filename }}
expected: ${{ steps.expected.outputs.filename }}
check:
if: github.repository_owner == 'UoMResearchIT'
name: Check Ruleset
uses: UoMResearchIT/actions/.github/workflows/check-ruleset.yaml@c1106820e385a14b9cfa3c4682b1a1ac11354968 # main
with:
bot-id: ${{ vars.ORG_ACTIONS_BOT_APP_ID }}
ignore: '["require_code_owner_review"]'
secrets:
bot-key: ${{ secrets.ORG_ACTIONS_BOT_PRIVATE_KEY }}
15 changes: 9 additions & 6 deletions .github/workflows/docker-images-build-health-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ name: Docker Images Build and Health Check

on:
push:
branches:
- dev
branches: [dev]
pull_request:

permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
Expand All @@ -22,17 +23,19 @@ jobs:
SUPERUSER_EMAIL: captain.marvel@manchester.ac.uk
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0

- name: Create state directory for bind mount
run: mkdir -p capx-state

- name: Build Docker images
run: docker compose build

- name: Start container and wait for health checks
run: docker compose up --wait --wait-timeout 120

Expand Down
18 changes: 11 additions & 7 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ name: C# .NET

on:
push:
branches: ["dev"]
branches: [dev]
pull_request:
branches: ["dev"]

jobs:
format-check:
Expand All @@ -16,26 +15,31 @@ jobs:
defaults:
run:
working-directory: ./PPMTool
permissions:
contents: read

steps:
- name: Create GitHub App token
id: app-token
uses: actions/create-github-app-token@v3
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
app-id: ${{ vars.ORG_ACTIONS_BOT_APP_ID }}
client-id: ${{ vars.ORG_ACTIONS_BOT_APP_ID }}
private-key: ${{ secrets.ORG_ACTIONS_BOT_PRIVATE_KEY }}
owner: UoMResearchIT
# NB: No current submodules; the .gitmodules file is empty
repositories: CapX
permission-contents: read

- uses: actions/checkout@v5
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
submodules: 'true'
token: ${{ steps.app-token.outputs.token }}
persist-credentials: false

- name: Setup .NET
uses: actions/setup-dotnet@v5
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0
with:
dotnet-version: 10.0.x

- name: Format
run: dotnet format PPMTool.sln --exclude ../Blazor-ApexCharts/src/Blazor-ApexCharts.csproj --verify-no-changes --no-restore --verbosity detailed
run: dotnet format PPMTool.sln --verify-no-changes --no-restore --verbosity detailed
5 changes: 2 additions & 3 deletions .github/workflows/license-copyright-add.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@

name: Add Licence and Copyright Headers

on:
pull_request
on: pull_request

jobs:
add-headers:
permissions:
pull-requests: write
contents: write
uses: UoMResearchIT/actions/.github/workflows/apply-reuse.yml@main
uses: UoMResearchIT/actions/.github/workflows/apply-reuse.yml@c1106820e385a14b9cfa3c4682b1a1ac11354968 # main
18 changes: 12 additions & 6 deletions .github/workflows/naming-conventions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
pull_request:
branches:
- '**'
permissions: {}

jobs:
check-repo-name-conventions:
Expand All @@ -14,26 +15,31 @@ jobs:
steps:
- name: Check repository name
run: |
REPO_NAME=${{ github.repository }}
REPO_NAME=${REPO_NAME##*/}
if [[ ! "$REPO_NAME" =~ ^([A-Z][A-Za-z0-9]*)(-[A-Z][A-Za-z0-9]*)*$ ]]; then
echo "Repository name '$REPO_NAME' does not follow the naming convention established in the RSE Agile Method Handbook."
exit 1
fi

env:
REPO_NAME: ${{ github.repository }}

check-branch-name-conventions:
if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Check out repository
uses: actions/checkout@v5
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Check branch name
run: |
BRANCH_NAME=${{ github.event.pull_request.head.ref }}
if [[ ! "$BRANCH_NAME" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
if [[ ! "$BRANCH_NAME" =~ ^(copilot\/)?[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
echo "Branch name '$BRANCH_NAME' does not follow the naming convention established in the RSE Agile Method Handbook."
exit 1
fi

env:
BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
37 changes: 37 additions & 0 deletions .github/workflows/run-zizmor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright (c) 2026 The University of Manchester
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: GitHub Actions Security Analysis with zizmor 🌈

on:
push:
branches: [dev]
pull_request:

permissions: {}

jobs:
zizmor:
name: Scan with Zizmor
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Run zizmor 🌈
uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6
with:
advanced-security: false
6 changes: 6 additions & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# SPDX-FileCopyrightText: 2026 University of Manchester
#
# SPDX-License-Identifier: apache-2.0

# Everything
* @aharwood2 @PhilBradbury @sjmf @philiptharrison @gdonval
34 changes: 15 additions & 19 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ By contributing to this repository, you agree that your contributions will be li

This project is open source and welcomes contributions from the wider community. However, its development and release process follows a structured governance model.

- The software is owned and licensed by **The University of Manchester**.
- Strategic direction, release planning, and final decisions on what is included in the codebase are managed by the **dRTP Operational Management Community of Practice**.
- The software was originally developed by **The University of Manchester** and is licensed under an open-source licence.
- Strategic direction, release planning, and final decisions on what is included in the codebase are managed by the **dRTP Operational Management Community of Practice** funded by the UKRI Digital Research Infrastructure Programme via the DisCouRSE Network Plus flexible fund.

This means that while the repository is open to contributions, inclusion in official releases is determined collectively by this group.
This means that while the repository is open to contributions, inclusion in official releases is determined collectively by this group. There is no funded development team to address issues but members of the **dRTP Operational Management Community of Practice** will progress priority items on a best-efforts basis.

## How Contributions Work

Expand All @@ -48,31 +48,27 @@ If you wish to contribute code:

All pull requests:

- Must pass any configured checks
- Must be reviewed and approved by members of the Community of Practice before merging
- May be discussed or refined collaboratively
- Must pass any configured checks.
- Must be reviewed and approved by members of the **dRTP Operational Management Community of Practice** before merging.
- May be discussed or refined collaboratively.

## Decision Making and Releases

The **dRTP Operational Management Community of Practice**:

- Reviews proposed changes
- Prioritises development work
- Determines what changes are accepted
- Decides when releases are made
- Reviews proposed changes from the perspective of deployed instances.
- Prioritises development work based on urgency and impact.
- Determines what changes are accepted based on a proportionate review process.
- Decides when releases are made and how they are grouped.

This is similar to governance models used by large open source ecosystems (e.g., .NET), where:

- The project is open and community-driven
- A defined group maintains responsibility for quality, direction, and release cadence
This is similar to governance models used by large open-source ecosystems (e.g., .NET), where the project is open and community-driven but defined group maintains responsibility for quality, direction, and release cadence. This review and ratification process will happen at least once a month.

## Expectations

Please note:

- Not all contributions will be accepted
- Feature requests may be deferred or declined based on priorities
- Timelines for review and release are determined by the governing community
- Not all contributions will be accepted.
- Feature requests may be deferred based on priorities or declined.
- Timelines for review and release are determined by the **dRTP Operational Management Community of Practice**.
- Backwards compatibility should be preserved unless the **dRTP Operational Management Community of Practice** decides otherwise.

## Code of Conduct

Expand Down
16 changes: 16 additions & 0 deletions PPMTool.Data/Context/PPMToolContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,22 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

// Npgsql v6+ maps DateTime -> timestamptz and rejects Kind=Unspecified.
// The codebase uses DateTime.Today/DateTime.Now throughout, which produce
// Kind=Unspecified. Map all DateTime columns to timestamp without time zone
// so Npgsql treats them as local/unspecified rather than requiring UTC.
if (Database.ProviderName == "Npgsql.EntityFrameworkCore.PostgreSQL")
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
foreach (var property in entityType.GetProperties()
.Where(p => p.ClrType == typeof(DateTime) || p.ClrType == typeof(DateTime?)))
{
property.SetColumnType("timestamp without time zone");
}
}
}
}

/// <summary>
Expand Down
25 changes: 25 additions & 0 deletions PPMTool.Data/Entities/BaseBookableItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// SPDX-FileCopyrightText: 2026 University of Manchester
//
// SPDX-License-Identifier: apache-2.0

using PPMTool.Data.Interfaces;

namespace PPMTool.Data.Entities
{
/// <summary>
/// An abstract base class for timesheet codes or tasks
/// </summary>
public abstract class BaseBookableItem : ILoggableObject
{
/// <summary>
/// Whether this item is active and can be booked to
/// </summary>
public bool IsActive { get; set; } = true;

/// <summary>
/// Pass the interface on to the concrete classes
/// </summary>
/// <returns></returns>
public abstract string GetSensibleObjectName();
}
}
Loading
Loading