Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
479 commits
Select commit Hold shift + click to select a range
f05dda1
fix: Prevent queue_test from overwriting completed test status
cfsmp3 Dec 27, 2025
405b687
chore(deps): bump markdown2 from 2.5.1 to 2.5.4
dependabot[bot] Dec 27, 2025
059618f
Revert "fix: Prevent queue_test from overwriting completed test status"
canihavesomecoffee Dec 28, 2025
bc58955
fix: Prevent queue_test from overwriting completed test status
cfsmp3 Dec 28, 2025
a23b24a
chore(deps): bump gitpython from 3.1.41 to 3.1.45
dependabot[bot] Dec 28, 2025
d03a554
chore(deps): bump gitdb from 4.0.11 to 4.0.12
dependabot[bot] Dec 28, 2025
49fd5c9
chore(deps): bump coverage from 7.3.0 to 7.13.0
dependabot[bot] Dec 28, 2025
27a2341
chore(deps): bump click from 8.1.7 to 8.3.1
dependabot[bot] Dec 28, 2025
50a5034
chore(deps): bump google-cloud-storage from 2.18.2 to 3.7.0
dependabot[bot] Dec 28, 2025
abf0dc1
chore(deps): bump flask-migrate from 4.0.7 to 4.1.0
dependabot[bot] Dec 28, 2025
ae2c3b3
chore(deps): bump isort from 5.12.0 to 7.0.0
dependabot[bot] Dec 28, 2025
199f2b4
chore(deps): bump pymysql from 1.1.1 to 1.1.2
dependabot[bot] Dec 28, 2025
415abd9
fix: Add null check in queue_test to prevent crash when test record m…
cfsmp3 Dec 28, 2025
7177ef7
fix: Address multiple server errors found in production logs
cfsmp3 Dec 28, 2025
4b5e62d
fix: Handle login redirect errors gracefully instead of storing full …
cfsmp3 Dec 28, 2025
a06b6db
test: Update test_upload_type_request for directory creation
cfsmp3 Dec 28, 2025
b031a9d
fix: Remove blocking wait for GCP VM deletion in progress_reporter
cfsmp3 Dec 29, 2025
4be5eee
style: Fix line too long in log message
cfsmp3 Dec 29, 2025
fca1adf
feat: Update deployment workflow with health checks and auto-rollback
cfsmp3 Dec 23, 2025
3d33623
security: Pin appleboy/ssh-action to specific commit SHA
cfsmp3 Dec 23, 2025
d753194
chore(deps): bump mypy from 1.5.1 to 1.19.1
dependabot[bot] Dec 29, 2025
2b2bbd2
fix: Remove remaining blocking wait_for_operation calls
cfsmp3 Dec 30, 2025
bd0909d
feat: Add VM deletion tracking and verification system
cfsmp3 Dec 30, 2025
8b46ef5
fix: Remove unsupported script_stop parameter from deployment workflow
cfsmp3 Jan 3, 2026
1957dc8
fix: Add -L flag to curl to follow HTTP->HTTPS redirects
cfsmp3 Jan 3, 2026
e355d4b
chore(deps): bump xmltodict from 0.13.0 to 1.0.2
dependabot[bot] Jan 3, 2026
d64e650
chore(deps): bump coverage from 7.13.0 to 7.13.1
dependabot[bot] Jan 3, 2026
e5f2209
chore(deps): bump lxml from 5.3.0 to 6.0.2
dependabot[bot] Jan 3, 2026
7a6979e
chore(deps): bump google-api-python-client from 2.154.0 to 2.187.0
dependabot[bot] Jan 3, 2026
91443e2
chore(deps): bump gitpython from 3.1.45 to 3.1.46
dependabot[bot] Jan 3, 2026
ad12db5
Add real-time sample progress indicator during testing stage
NexionisJake Jan 1, 2026
e2f02ce
fix: Replace misleading queue message with accurate VM provisioning info
cfsmp3 Jan 4, 2026
85f9635
test: Update test_data_for_test to match simplified implementation
cfsmp3 Jan 4, 2026
abb8ebe
fix: Show correct sample progress on initial page load
cfsmp3 Jan 4, 2026
d3238af
fix: handle log file permission errors gracefully
cfsmp3 Jan 4, 2026
5f16676
fix: add log directory ownership check to pre_deploy.sh
cfsmp3 Jan 4, 2026
fb0a5c5
chore(deps): upgrade SQLAlchemy from 1.4.41 to 2.0.45
cfsmp3 Jan 4, 2026
90f38d6
fix: restore specific type annotations per review feedback
cfsmp3 Jan 4, 2026
3946b1c
fix: suppress AsyncMock RuntimeWarnings in Python 3.13+
cfsmp3 Jan 4, 2026
b1e9efb
fix: use MockStatus object instead of dict in test_webhook_pr_closed
cfsmp3 Jan 4, 2026
d316b61
fix: verify GCP VM creation before recording gcp_instance
cfsmp3 Jan 11, 2026
00261b3
refactor: extract common test setup to reduce duplication
cfsmp3 Jan 11, 2026
603f340
fix: correct indentation for pycodestyle
cfsmp3 Jan 11, 2026
4f550bb
fix: Include target_url in GitHub status for timed-out tests
cfsmp3 Jan 11, 2026
6daad75
fix: use text() for SQLAlchemy 2.0 compatibility in pre_deploy.sh
cfsmp3 Jan 18, 2026
d8436e4
fix: use text() for SQLAlchemy 2.0 compatibility in pre_deploy.sh
cfsmp3 Jan 18, 2026
3e2dcf1
fix: allow manual workflow_dispatch to trigger deployment
cfsmp3 Jan 18, 2026
3679ea8
fix: allow manual workflow_dispatch to trigger deployment
cfsmp3 Jan 18, 2026
5d92d0f
fix: retry tests on transient GCP errors instead of failing
cfsmp3 Jan 19, 2026
7fb3b73
fix: add retry logic to CI VM status and log upload functions
cfsmp3 Jan 19, 2026
5a7c133
chore(deps): bump werkzeug from 3.1.4 to 3.1.5
dependabot[bot] Jan 19, 2026
1ad9254
chore(deps): bump google-api-python-client from 2.187.0 to 2.188.0
dependabot[bot] Jan 19, 2026
a6f75f1
chore(deps): bump google-cloud-storage from 3.7.0 to 3.8.0
dependabot[bot] Jan 20, 2026
3f9ca9f
chore(deps): bump coverage from 7.13.1 to 7.13.2
dependabot[bot] Jan 26, 2026
d5c36d2
fix: detect when workflow won't run due to path filters
cfsmp3 Feb 1, 2026
a53cddb
style: fix import sorting order
cfsmp3 Feb 1, 2026
7a26366
style: fix docstring format to use Sphinx style
cfsmp3 Feb 1, 2026
ef15bcb
chore(deps): bump google-api-python-client from 2.188.0 to 2.189.0
dependabot[bot] Feb 4, 2026
e03d48c
chore(deps): bump sqlalchemy from 2.0.45 to 2.0.46
dependabot[bot] Feb 4, 2026
6c3ace5
chore(deps): bump pyyaml from 6.0.2 to 6.0.3
dependabot[bot] Feb 4, 2026
da229ae
chore(deps): bump google-cloud-storage from 3.8.0 to 3.9.0
dependabot[bot] Feb 4, 2026
ff83b91
chore(deps): bump coverage from 7.13.2 to 7.13.3
dependabot[bot] Feb 4, 2026
c4d6590
Fix Windows CI tests not running after artifact rename
cfsmp3 Feb 19, 2026
f601abc
Fix Windows CI tests not running after artifact rename
cfsmp3 Feb 19, 2026
3bf022f
Fix typos and formatting in installation guide
canihavesomecoffee Mar 5, 2026
ec8c37a
chore(deps): bump google-api-python-client from 2.189.0 to 2.192.0
dependabot[bot] Mar 5, 2026
8ec24f2
fix: use SQLAlchemy .is_(False) instead of Python identity check
Atul-Chahar Mar 5, 2026
a0e44a7
chore(deps): bump coverage from 7.13.3 to 7.13.4
dependabot[bot] Mar 5, 2026
493878c
chore(deps): bump werkzeug from 3.1.5 to 3.1.6
dependabot[bot] Mar 5, 2026
fb9dfe5
chore(deps): bump flask from 3.1.2 to 3.1.3
dependabot[bot] Mar 7, 2026
75ef2c0
chore(deps): bump xmltodict from 1.0.2 to 1.0.4
dependabot[bot] Mar 7, 2026
3a148a7
chore(deps): bump isort from 7.0.0 to 8.0.1
dependabot[bot] Mar 7, 2026
18064f2
chore(deps): bump sqlalchemy from 2.0.46 to 2.0.48
dependabot[bot] Mar 7, 2026
233cbec
chore(deps): bump markdown2 from 2.5.4 to 2.5.5
dependabot[bot] Mar 7, 2026
6d3781a
chore(deps): bump pytz from 2025.2 to 2026.1.post1
dependabot[bot] Mar 7, 2026
f25d2b6
Revert "fix: use SQLAlchemy .is_(False) instead of Python identity ch…
canihavesomecoffee Mar 7, 2026
6bf2214
Reapply "fix: use SQLAlchemy .is_(False) instead of Python identity c…
canihavesomecoffee Mar 7, 2026
66f057a
fix: Add error display for edge case
canihavesomecoffee Mar 7, 2026
1f20580
chore(db): update SQLAlchemy subquery to scalar_subquery to fix depre…
Mar 7, 2026
c6ba18d
refactor(db): upgrade subqueries to modern SQLAlchemy select() constr…
Mar 8, 2026
5edbdee
fix: category description not shown when no tags available
Hell1213 Mar 12, 2026
d9f0cb3
Fix SQLAlchemy 2.x subquery deprecation warnings in controllers
invalid-email-address Feb 21, 2026
0d6e521
Restore disabled upload controller tests and fix QueuedSampleNotFound…
Mar 5, 2026
513d565
refactor: revert to unit test style using unwrapped and remove verbos…
Mar 6, 2026
32aeb4c
style: auto-format imports with isort to resolve CI failure
Mar 7, 2026
c60825d
refactor: remove orphaned mock_decorator and unused imports
Mar 8, 2026
b304ba3
style: remove trailing whitespace to resolve pycodestyle CI failure
Mar 12, 2026
57dcf6b
ui fix in the UI issue at https://sampleplatform.ccextractor.org/tes…
gaurav-dev02 Feb 11, 2026
0029851
Download full diff button as hyperlink
gaurav-dev02 Mar 15, 2026
e9c855c
fix(auth): replace deprecated passlib encrypt method with hash for Py…
Mar 8, 2026
be97d05
fix(ci): resolve webhook IP cache invalidation bug
Mar 14, 2026
8c76a04
test: bypass webhook IP cache during tests to prevent state pollution
Mar 14, 2026
4099adf
fix(ci): remove fragile current_app context in favor of global config
Mar 14, 2026
86b070d
test: implement foolproof sys modules check to isolate webhook cache
Mar 14, 2026
498207c
style: wrap comment to pass 120 character limit
Mar 14, 2026
2add243
refactor(ci): isolate test cache using mock patch and addCleanup
Mar 15, 2026
d0d322a
style(ci): sort imports in base test class to satisfy isort
Mar 15, 2026
97023eb
refactor(ci): convert cache expiration to pure function per review
Mar 15, 2026
8d5b8a5
fix(ci): restore unittest mock import for existing cloud storage tests
Mar 15, 2026
503cb70
refactor(ci): move datetime import to module level
Mar 16, 2026
1c54b9a
chore(deps): bump coverage from 7.13.4 to 7.13.5
dependabot[bot] Mar 19, 2026
2739014
chore(deps): bump google-api-python-client from 2.192.0 to 2.193.0
dependabot[bot] Mar 19, 2026
e6241be
chore(deps): bump google-cloud-storage from 3.9.0 to 3.10.0
dependabot[bot] Mar 19, 2026
c7fcbf4
refactor(health): replace deprecated datetime.utcnow() with timezone-…
Mar 8, 2026
8dfb72a
style: remove trailing whitespace to resolve pycodestyle CI failure
Mar 12, 2026
2fbe452
refactor(health): simplify timezone aware datetime formatting
Mar 15, 2026
0e32aed
refactor(health): remove remaining timezone stripping hacks
Mar 16, 2026
8e4f6f8
fix: close file handles using with statements
invalid-email-address Mar 18, 2026
c43f54b
chore(deps): bump requests from 2.32.5 to 2.33.0
dependabot[bot] Mar 25, 2026
55e34ca
chore(deps): bump werkzeug from 3.1.6 to 3.1.7
dependabot[bot] Mar 28, 2026
4dfc1f7
chore(deps): bump pygithub from 2.8.1 to 2.9.0
dependabot[bot] Mar 28, 2026
4fdee12
chore(deps): bump google-cloud-storage from 3.10.0 to 3.10.1
dependabot[bot] Mar 28, 2026
1c13293
fix(ci): define tempFolder in Windows CI variables to prevent false-p…
x15sr71 Mar 22, 2026
513f19e
Fix: Guard against negative runtime values in test results
Hell1213 Mar 22, 2026
2aeecfc
chore(deps): bump requests from 2.33.0 to 2.33.1
dependabot[bot] Mar 30, 2026
9c9e24e
chore(deps): bump mypy from 1.19.1 to 1.20.0
dependabot[bot] Apr 4, 2026
1062055
chore(deps): bump werkzeug from 3.1.7 to 3.1.8
dependabot[bot] Apr 4, 2026
9be4c16
chore(deps): bump sqlalchemy from 2.0.48 to 2.0.49
dependabot[bot] Apr 4, 2026
3f0e920
chore(deps): bump click from 8.3.1 to 8.3.2
dependabot[bot] Apr 7, 2026
93e90ad
fix(test_ci): mock requests.get in test_start_ci_empty_token to preve…
x15sr71 Apr 5, 2026
65694c5
chore(deps): bump pygithub from 2.9.0 to 2.9.1
dependabot[bot] Apr 14, 2026
a93359b
chore(deps): bump lxml from 6.0.2 to 6.1.1
dependabot[bot] May 31, 2026
9991573
chore(deps): bump gitpython from 3.1.46 to 3.1.50
dependabot[bot] May 31, 2026
a13f9ba
chore(deps): bump mypy from 1.20.0 to 2.1.0
dependabot[bot] May 31, 2026
9418c30
chore(deps): bump click from 8.3.2 to 8.3.3
dependabot[bot] Apr 22, 2026
046e7d0
chore(deps): bump flask-wtf from 1.2.2 to 1.3.0
dependabot[bot] Apr 23, 2026
433fa7a
chore(deps): bump google-api-python-client from 2.193.0 to 2.197.0
dependabot[bot] May 31, 2026
b880eac
test: add cascade-failure test for nicediff comparison
Hell1213 Apr 2, 2026
ffb138a
chore(deps): bump pymysql from 1.1.2 to 1.2.0
dependabot[bot] May 31, 2026
6c93712
chore(deps): bump pytz from 2026.1.post1 to 2026.2
dependabot[bot] May 31, 2026
a52f7f5
chore(deps): bump wtforms from 3.2.1 to 3.2.2
dependabot[bot] May 31, 2026
4a3b03d
Fixed the logic to predict the duration of a test
pulk17 Apr 7, 2026
987a5c7
fix: replace python with python3 in install scripts and docs
x15sr71 Jun 9, 2026
c1dd234
fix: update shebangs from python to python3
x15sr71 Jun 9, 2026
3bb7988
Fix intermittent 500 errors in get_test_results() from SQLAlchemy laz…
x15sr71 Jun 6, 2026
3ccb56b
Fix import ordering (isort)
x15sr71 Jun 6, 2026
4b2f659
Fix import ordering, use joinedload for scalar relationship, update t…
x15sr71 Jun 6, 2026
4bc2955
Fix file comparison skipped for non-zero expected_rc regression tests
x15sr71 Jun 7, 2026
79015bd
fix: use get_test_results() for commit status to prevent false-positi…
x15sr71 Jun 7, 2026
d599bcb
chore(deps): bump coverage from 7.13.5 to 7.14.3 (#1128)
dependabot[bot] Jun 24, 2026
103b762
chore(deps): bump tzlocal from 5.3.1 to 5.4.3 (#1126)
dependabot[bot] Jun 24, 2026
5020229
chore(deps): bump sqlalchemy from 2.0.49 to 2.0.51 (#1124)
dependabot[bot] Jun 24, 2026
f33ba27
chore(deps): bump google-cloud-storage from 3.10.1 to 3.12.0 (#1123)
dependabot[bot] Jun 24, 2026
4610ccd
chore(deps): bump click from 8.3.3 to 8.4.1 (#1115)
dependabot[bot] Jun 24, 2026
9174e9b
chore(deps): bump requests from 2.33.1 to 2.34.2 (#1113)
dependabot[bot] Jun 24, 2026
e46e091
fix(ci): add --break-system-packages and python3 for PEP 668 on Pytho…
x15sr71 Jun 24, 2026
dda7618
fix: point Artifact_names to (with migrations) builds to restore CEA-…
x15sr71 Jun 24, 2026
b536dd7
fix(template): guard against test.result=None to stop false Pass labe…
x15sr71 Jun 24, 2026
1be4dc3
Replace SysV init with native systemd unit to fix gunicorn duplicate-…
x15sr71 Jun 28, 2026
7d56337
Add trailing newline to bootstrap_gunicorn.py
x15sr71 Jun 28, 2026
1101fb7
refactor(install): template systemd service base directory
x15sr71 Jul 18, 2026
30ecbef
chore(deps): bump gitpython from 3.1.50 to 3.1.55
dependabot[bot] Jul 23, 2026
fc147c7
chore(deps): bump coverage from 7.14.3 to 7.15.2
dependabot[bot] Jul 16, 2026
6eb2937
chore(deps): bump google-cloud-storage from 3.12.0 to 3.13.0
dependabot[bot] Jul 14, 2026
e32fde0
chore(deps): bump mypy from 2.1.0 to 2.3.0
dependabot[bot] Jul 13, 2026
55ce903
chore(deps): bump cffi from 2.0.0 to 2.1.0
dependabot[bot] Jul 25, 2026
2bdcc9a
chore(deps): bump tzlocal from 5.4.3 to 5.4.4
dependabot[bot] Jul 25, 2026
a0fd376
chore(deps): bump click from 8.4.1 to 8.4.2
dependabot[bot] Jul 25, 2026
b5b203e
chore(deps): bump google-api-python-client from 2.197.0 to 2.198.0
dependabot[bot] Jul 25, 2026
5d73401
PR 1: Foundation and scaffolding
pulk17 Jul 20, 2026
1b15183
PR 2: Auth and Token Management Endpoints
pulk17 Jul 20, 2026
1a56cf2
chore(deps): bump marshmallow from 3.25.1 to 3.26.2
dependabot[bot] Jul 26, 2026
42047fe
chore(deps): bump gitpython from 3.1.55 to 3.1.57
dependabot[bot] Jul 27, 2026
97b4740
chore(deps): bump pytz from 2026.2 to 2026.3.post1
dependabot[bot] Jul 27, 2026
e3b43ff
chore(deps): bump marshmallow from 3.26.2 to 4.3.0
dependabot[bot] Jul 27, 2026
241d17e
PR 3: System Routes and Run Execution Endpoints
pulk17 Jul 20, 2026
6a29315
PR 4: Samples Endpoints
pulk17 Jul 20, 2026
f713223
PR 5: Results Data and Baseline Approvals Endpoints
pulk17 Jul 20, 2026
bedd1d8
PR 6: Errors, Logs, and OpenAPI Documentation
pulk17 Jul 20, 2026
a82aa16
PR 7: Test Artifacts
pulk17 Jul 20, 2026
fd0d5b3
PR 8: Administration and Web Console Endpoints
pulk17 Jul 30, 2026
c78b71e
fix(ci): treat ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS as retryable
cfsmp3 Aug 9, 2026
7ad0ee5
fix(ci): give each upload its own temp file so concurrent tests stop …
cfsmp3 Aug 9, 2026
add79de
fix(api): paginate sample history in SQL
gaurav-dev02 Aug 9, 2026
3be3be7
fix(ci): compare against the approved baseline, not the previous run'…
cfsmp3 Aug 15, 2026
3b99d7d
feat(ci): report each failure against master and against the branch p…
cfsmp3 Aug 16, 2026
e26bfbd
chore(deps): bump cffi from 2.1.0 to 2.1.1
dependabot[bot] Aug 7, 2026
4236f94
chore(deps): bump coverage from 7.15.2 to 7.15.4
dependabot[bot] Aug 10, 2026
d7ae08b
chore(deps): bump marshmallow from 4.3.0 to 4.3.1
dependabot[bot] Aug 11, 2026
1e98a8a
chore(deps): bump gitpython from 3.1.57 to 3.1.59
dependabot[bot] Aug 13, 2026
633ff00
chore(deps): bump sqlalchemy from 2.0.51 to 2.0.52
dependabot[bot] Aug 17, 2026
80d7083
chore(deps): bump mypy from 2.3.0 to 2.3.1
dependabot[bot] Aug 18, 2026
d83ff3d
chore(deps): bump google-cloud-storage from 3.13.0 to 3.13.1
dependabot[bot] Aug 22, 2026
b2dbb84
serve sample and baseline files through the api
pulk17 Aug 8, 2026
b59d321
manage accepted output variants and restart a run
pulk17 Aug 8, 2026
a85ad91
sample tags, edits, deletes and the remaining file downloads
pulk17 Aug 10, 2026
1b7f6ad
signup, password reset and self-service account changes
pulk17 Aug 10, 2026
2c85896
accept sample uploads and manage the queue they land in
pulk17 Aug 10, 2026
6eeda7e
ftp credentials, admin reset links and linking uploads to samples
pulk17 Aug 10, 2026
efdae5b
split the sample edit into its tag and upload halves
pulk17 Aug 11, 2026
4a0f4fa
stage each upload under its own name and reject unusable ones
pulk17 Aug 12, 2026
c3e0757
let an account connect and disconnect github from the api
pulk17 Aug 12, 2026
8945a79
stop the github redirect test from calling github
pulk17 Aug 12, 2026
2752cb0
point reset links at the console when one is configured, and tidy sam…
pulk17 Aug 12, 2026
ccac0d6
revoke a deactivated account's tokens and keep ftp credentials behind…
pulk17 Aug 12, 2026
15ac048
Add Docker setup for local development
pulk17 Aug 1, 2026
e0554d7
chore(deps): bump pygithub from 2.9.1 to 2.10.0
dependabot[bot] Aug 24, 2026
8b12775
chore(deps): bump lxml from 6.1.1 to 6.1.2
dependabot[bot] Aug 24, 2026
7934c23
chore(deps): bump click from 8.4.2 to 8.5.0
dependabot[bot] Sep 6, 2026
76231da
chore(deps): bump gitpython from 3.1.59 to 3.1.61
dependabot[bot] Sep 6, 2026
27b3f91
chore(deps): bump isort from 8.0.1 to 9.0.1
dependabot[bot] Sep 6, 2026
74c014f
chore(deps): bump coverage from 7.15.4 to 7.16.0
dependabot[bot] Sep 6, 2026
4e0d7f8
chore(deps): bump google-api-python-client from 2.198.0 to 2.200.0
dependabot[bot] Sep 6, 2026
fe2b4a4
fix(api): treat incomplete sample runs as error, not pass
aryanorastar Aug 16, 2026
53e661f
[FIX] Record the SHA that CI actually built for PR runs
NaitikVerma6776 Sep 8, 2026
3dd0d31
[FIX] Scan PR logs in chunks when recording built_commit
NaitikVerma6776 Sep 8, 2026
c1a9e09
[FIX] Narrow merge SHA type before strip for mypy
NaitikVerma6776 Sep 9, 2026
3a98e16
[FIX] Avoid detached ORM access in built commit test
NaitikVerma6776 Sep 10, 2026
c9a74f7
[FIX] Do not open mocked log paths as file descriptors
NaitikVerma6776 Sep 14, 2026
ce55255
chore(deps): bump lxml from 6.1.2 to 6.1.3
dependabot[bot] Sep 7, 2026
dfd3a02
chore(deps): bump gitpython from 3.1.61 to 3.1.62
dependabot[bot] Sep 10, 2026
e933e52
chore(deps): bump google-cloud-storage from 3.13.1 to 3.14.1
dependabot[bot] Sep 14, 2026
420cc04
chore(deps): bump coverage from 7.16.0 to 7.16.1
dependabot[bot] Sep 17, 2026
f2c3a82
chore(deps): bump sqlalchemy from 2.0.52 to 2.0.53
dependabot[bot] Sep 18, 2026
ad1dc52
Web-Scaffold
pulk17 Sep 14, 2026
49de4f2
Web-Api
pulk17 Sep 14, 2026
46a3ddb
Web-Auth
pulk17 Sep 14, 2026
5c646a5
Web-Runs
pulk17 Sep 14, 2026
21a15ca
Web-Tests
pulk17 Sep 14, 2026
26475df
Web-Samples
pulk17 Sep 14, 2026
539bac6
Web-Admin
pulk17 Sep 14, 2026
f6cb412
Web-Shell
pulk17 Sep 14, 2026
b83a3ac
Web-Deploy
pulk17 Sep 14, 2026
a8b1403
fix console routes under /app/
pulk17 Sep 27, 2026
d07c2a2
send github linking to the classic account page
pulk17 Sep 27, 2026
76a4fc2
redirect bare /app and keep hsts on console responses
pulk17 Sep 27, 2026
4761f3d
[FIX] Treat completed and canceled as terminal progress states
NaitikVerma6776 Sep 10, 2026
172510e
chore(deps): bump the minor-and-patch group across 1 directory with 2…
dependabot[bot] Sep 30, 2026
0eb740c
chore(deps): bump pymysql from 1.2.0 to 1.2.3
dependabot[bot] Sep 21, 2026
a15954c
chore(deps): bump source-map-js from 1.2.1 to 1.2.2 in /web
dependabot[bot] Oct 17, 2026
0dad167
chore(deps-dev): bump @types/node from 24.13.2 to 26.6.5 in /web
dependabot[bot] Oct 17, 2026
1eba626
chore(deps): bump motion from 12.42.2 to 14.2.0 in /web
dependabot[bot] Oct 17, 2026
3d6eef3
chore(deps-dev): bump typescript from 6.0.3 to 7.0.2 in /web
dependabot[bot] Oct 17, 2026
d326970
chore(deps): bump pytz from 2026.3.post1 to 2026.5
dependabot[bot] Oct 17, 2026
92ca509
chore(deps): bump pycodestyle from 2.14.0 to 2.15.0
dependabot[bot] Oct 17, 2026
5c018ad
chore(deps): bump coverage from 7.16.1 to 7.16.2
dependabot[bot] Oct 17, 2026
068d618
chore(deps): bump werkzeug from 3.1.8 to 3.1.9
dependabot[bot] Oct 17, 2026
2b56129
chore(deps): bump isort from 9.0.1 to 9.0.2
dependabot[bot] Oct 17, 2026
71b25ba
[FIX] Clear GcpInstance when restarting a run
NaitikVerma6776 Oct 4, 2026
70134df
[FIX] Avoid string subscript on accept_mimetypes
NaitikVerma6776 Oct 4, 2026
cb43d6f
chore(deps): bump mypy from 2.3.1 to 2.4.0
dependabot[bot] Oct 17, 2026
c402ee1
chore(deps): bump gitpython from 3.1.62 to 3.2.1
dependabot[bot] Oct 19, 2026
8f95c63
chore(deps): bump google-api-python-client from 2.200.0 to 2.201.0
dependabot[bot] Oct 19, 2026
8a44e54
chore(deps): bump markupsafe from 3.0.3 to 3.0.4
dependabot[bot] Oct 19, 2026
3c815f4
chore(deps): bump google-cloud-storage from 3.14.1 to 3.17.1
dependabot[bot] Oct 19, 2026
e5feae7
Update Python versions in GitHub Actions workflow
canihavesomecoffee Oct 19, 2026
6ac310b
chore(deps-dev): bump vite from 8.3.1 to 8.3.4 in /web
dependabot[bot] Oct 21, 2026
991f51d
chore(deps): bump the minor-and-patch group across 1 directory with 1…
dependabot[bot] Oct 21, 2026
38e78d3
[FIX] Align run status enums in OpenAPI spec with the API
kaihere14 Oct 23, 2026
dd144c1
[FIX] Align the rest of the OpenAPI spec with API validation
kaihere14 Oct 23, 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
71 changes: 71 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Git
.git
.gitignore
.gitattributes

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
ENV/
.venv
*.egg-info/
dist/
build/
*.egg

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Docker (don't copy docker files into the image)
Dockerfile
docker-compose*.yml
.dockerignore

# Database lock files
*.db
*.sqlite
*.sqlite3
.db_initialized

# Logs
logs/
*.log

# Test files
.coverage
htmlcov/
.pytest_cache/
.tox/

# CI/CD
.github/
.travis.yml
.circleci/

# Temporary files
tmp/
temp/
*.tmp

# Secrets and credentials (prevent accidental inclusion)
*.pem
*.key
service-account.json
gcp-key.json
secret_key
secret_csrf
config.py
.env
3 changes: 2 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*.bat text eol=crlf
*.bat text eol=crlf
*.sh text eol=lf
8 changes: 8 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,11 @@ updates:
reviewers:
- canihavesomecoffee
- thealphadollar
- package-ecosystem: npm
directory: "/web"
schedule:
interval: weekly
open-pull-requests-limit: 5
groups:
minor-and-patch:
update-types: ["minor", "patch"]
37 changes: 37 additions & 0 deletions .github/workflows/ci-vm-scripts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: CI-VM scripts

# Static analysis for the CI-VM runner scripts (the scripts that run on the
# throwaway test VMs). Runs only when those scripts change. shellcheck lints the
# bash runners; PSScriptAnalyzer lints the PowerShell startup script.

on:
pull_request:
paths:
- 'install/ci-vm/**'
- '.github/workflows/ci-vm-scripts.yml'
push:
paths:
- 'install/ci-vm/**'
- '.github/workflows/ci-vm-scripts.yml'

jobs:
shellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install shellcheck
run: sudo apt-get update && sudo apt-get install -y shellcheck
- name: shellcheck (bash runner scripts)
run: shellcheck --severity=error install/ci-vm/ci-linux/ci/runCI install/ci-vm/ci-linux/startup-script.sh

psscriptanalyzer:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: PSScriptAnalyzer (startup-script.ps1)
shell: pwsh
run: |
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser
$issues = Invoke-ScriptAnalyzer -Path install/ci-vm/ci-windows/startup-script.ps1 -Severity Error
if ($issues) { $issues | Format-Table -AutoSize; exit 1 }
26 changes: 11 additions & 15 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,25 @@ jobs:

runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [3.7, 3.8, 3.9]
python-version: ['3.12', '3.13', '3.14', '3.15']
include:
- python-version: '3.15'
experimental: true

continue-on-error: ${{ matrix.experimental || false }}

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install libvirt-dev
sudo apt-get install libvirt-dev libxml2-dev libxslt-dev
python -m pip install --upgrade pip
if [ -f test-requirements.txt ]; then pip install -r test-requirements.txt; fi
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
Expand All @@ -48,14 +54,4 @@ jobs:
pycodestyle ./ --config=./.pycodestylerc
- name: Test with nose
run: |
nosetests --nocapture --with-cov --cov-config .coveragerc
- name: Temporary fix for codecov
run: |
coverage xml -i
- name: Upload to codecov
uses: codecov/codecov-action@v2
with:
flags: unittests
name: sample-platform
fail_ci_if_error: true
files: ./coverage.xml
nose2
218 changes: 218 additions & 0 deletions .github/workflows/sp-deployment-pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
name: Deploy sample platform

on:
workflow_dispatch:
workflow_run:
workflows: [ "Run tests and code checks" ]
types: [ completed ]
branches:
- "master"

env:
DEPLOY_BRANCH: master
INSTALL_FOLDER: /var/www/sample-platform
SAMPLE_REPOSITORY: /repository

jobs:
deploy:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
permissions:
id-token: write
contents: read

steps:
- name: Pre-deployment checks
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
with:
host: ${{ vars.PLATFORM_DOMAIN }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_KEY_PRIVATE }}
port: 22
command_timeout: 2m
envs: INSTALL_FOLDER,SAMPLE_REPOSITORY,DEPLOY_BRANCH
script: |
set -e
echo "=== Pre-deployment checks ==="
cd $INSTALL_FOLDER

# Check if deployment scripts exist (for backwards compatibility)
if [ -f "install/deploy/pre_deploy.sh" ]; then
sudo INSTALL_FOLDER="$INSTALL_FOLDER" \
SAMPLE_REPOSITORY="$SAMPLE_REPOSITORY" \
DEPLOY_BRANCH="$DEPLOY_BRANCH" \
bash install/deploy/pre_deploy.sh
else
echo "Deployment scripts not found, using legacy validation"
# Basic validation
test -f config.py || { echo "ERROR: config.py not found"; exit 1; }
# Save current commit for potential manual rollback
git rev-parse HEAD > /tmp/previous_commit.txt
echo "Current commit saved: $(cat /tmp/previous_commit.txt)"
fi

- name: Deploy application
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
with:
host: ${{ vars.PLATFORM_DOMAIN }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_KEY_PRIVATE }}
port: 22
command_timeout: 10m
envs: INSTALL_FOLDER,SAMPLE_REPOSITORY,DEPLOY_BRANCH
script: |
set -e
echo "=== Deploying application ==="
cd $INSTALL_FOLDER

# Check if deployment scripts exist
if [ -f "install/deploy/deploy.sh" ]; then
sudo INSTALL_FOLDER="$INSTALL_FOLDER" \
SAMPLE_REPOSITORY="$SAMPLE_REPOSITORY" \
DEPLOY_BRANCH="$DEPLOY_BRANCH" \
bash install/deploy/deploy.sh
else
echo "Using legacy deployment"
# Legacy deployment (will be removed after scripts are merged)
sudo git restore .
sudo git checkout $DEPLOY_BRANCH
sudo git fetch origin $DEPLOY_BRANCH
sudo git reset --hard origin/$DEPLOY_BRANCH
sudo git clean -f -d
sudo git pull origin $DEPLOY_BRANCH

sudo python3 -m pip install -r requirements.txt --break-system-packages
sudo FLASK_APP=./run.py flask db upgrade

sudo cp "install/ci-vm/ci-linux/ci/bootstrap" "${SAMPLE_REPOSITORY}/TestData/ci-linux/bootstrap" 2>/dev/null || true
sudo cp "install/ci-vm/ci-linux/ci/runCI" "${SAMPLE_REPOSITORY}/TestData/ci-linux/runCI" 2>/dev/null || true
sudo cp "install/ci-vm/ci-windows/ci/runCI.bat" "${SAMPLE_REPOSITORY}/TestData/ci-windows/runCI.bat" 2>/dev/null || true

sudo systemctl reload platform
fi

# The console is a static build, so it is compiled here and only the
# output is shipped; the VM needs no Node toolchain. This runs after
# the code deploy so the target directory exists.
- name: Build web console
uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: web/package-lock.json

- name: Compile console
working-directory: web
run: |
npm ci --ignore-scripts
npm run build:app

- name: Ship console
uses: appleboy/scp-action@917f8b81dfc1ccd331fef9e2d61bdc6c8be94634 # v0.1.7
with:
host: ${{ vars.PLATFORM_DOMAIN }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_KEY_PRIVATE }}
port: 22
# Lands at <INSTALL_FOLDER>/web/app/, which is what the nginx
# root expects: the directory name has to match the /app/ URL.
source: "web/dist/**"
target: ${{ env.INSTALL_FOLDER }}/web/app
strip_components: 2
overwrite: true

- name: Verify deployment
id: health_check
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
with:
host: ${{ vars.PLATFORM_DOMAIN }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_KEY_PRIVATE }}
port: 22
command_timeout: 2m
envs: INSTALL_FOLDER
script: |
echo "=== Verifying deployment ==="
cd $INSTALL_FOLDER

# Check if deployment scripts exist
if [ -f "install/deploy/post_deploy.sh" ]; then
sudo INSTALL_FOLDER="$INSTALL_FOLDER" bash install/deploy/post_deploy.sh
else
echo "Using legacy health check"
# Legacy health check - just verify service is running
sleep 5
if systemctl is-active --quiet platform; then
echo "Platform service is running"
# Try to hit the homepage
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1/ 2>/dev/null || echo "000")
if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 400 ]; then
echo "Homepage responding with HTTP $HTTP_CODE"
exit 0
else
echo "ERROR: Homepage returned HTTP $HTTP_CODE"
exit 1
fi
else
echo "ERROR: Platform service is not running"
systemctl status platform || true
exit 1
fi
fi

- name: Rollback on failure
if: failure() && steps.health_check.outcome == 'failure'
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
with:
host: ${{ vars.PLATFORM_DOMAIN }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_KEY_PRIVATE }}
port: 22
command_timeout: 5m
envs: INSTALL_FOLDER,SAMPLE_REPOSITORY
script: |
echo "=== ROLLBACK INITIATED ==="
cd $INSTALL_FOLDER

# Check if deployment scripts exist
if [ -f "install/deploy/rollback.sh" ]; then
sudo INSTALL_FOLDER="$INSTALL_FOLDER" \
SAMPLE_REPOSITORY="$SAMPLE_REPOSITORY" \
bash install/deploy/rollback.sh
else
echo "Using legacy rollback"
# Legacy rollback
if [ -f "/tmp/previous_commit.txt" ]; then
PREV_COMMIT=$(cat /tmp/previous_commit.txt)
echo "Rolling back to commit: $PREV_COMMIT"
sudo git checkout "$PREV_COMMIT"
sudo python3 -m pip install -r requirements.txt --break-system-packages
sudo systemctl reload platform
echo "Rollback complete"
else
echo "ERROR: No previous commit saved, cannot rollback"
echo "MANUAL INTERVENTION REQUIRED"
fi
fi

- name: Report deployment status
if: always()
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
with:
host: ${{ vars.PLATFORM_DOMAIN }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_KEY_PRIVATE }}
port: 22
command_timeout: 30s
envs: INSTALL_FOLDER
script: |
echo "=== Deployment Summary ==="
cd $INSTALL_FOLDER
echo "Current commit: $(git rev-parse HEAD)"
echo "Branch: $(git branch --show-current)"
echo "Service status: $(systemctl is-active platform 2>/dev/null || echo 'unknown')"

# Cleanup lock file if it exists
rm -f /tmp/sp-deploy.lock
Loading